Linux相關心得

VMware錯誤

Error while powering on:internal error

當VMware開著的時候不正常關機會出現的錯誤

法一、刪除記憶體檔案
法二(推薦)、開啓VMware服務

有時只有方法一有效,但方法二比較快

Error while opening the virtual machine: Taking ownership of this virtual machine failed

刪除lck檔

連線問題

不能上網
eth0在ifconfig中消失

重新啟動服務(daemon)

服務定義:位於 /etc/init.d/ 裡

[bash]
1
/etc/init.d/SERVICE_NAME restart 
或是
[bash]
1
service SERVICE_NAME restart 

在tty介面下重新開啟圖形介面

開啟tty1: Ctrl-Alt-F1

重啟gnome

[bash]
1
sudo service gdm restart 

此時就會重新回到gnome登入畫面
在gnome沒有反應時十分有效

此外,圖形介面預設為tty7: Ctrl-Alt-F7

在遠端連線中顯示圖形化介面

本機

1
2
3
export DISPLAY=:0.0tra
setenv DISPLAY :0.0
ssh -X hosturl

遠端機器

1
2
export DISPLAY=localhost:11.0
setenv DISPLAY localhost:11.0

避免誤刪檔案

使用safe-rm套件,可防止意外(惡意)刪除系統重要資料

在terminal開啟檔案

xdg-open foo.jpg

在gnome-terminal中也可以用 gnome-open foo.jpg

tar 壓縮

*.gz gzip 程式壓縮的檔案
*.tar tar 程式打包的資料,並沒有壓縮過
*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮

1
2
tar [-zxcvfpP] filename
tar -N 'yyyy/mm/dd' [/path] -zcvf [target.tar.gz] [source]
參數 用途
-c 執行壓縮
-x 執行解壓縮
-z 使用gzip壓縮/解壓縮(應對應.gz的檔案)
-t 查看壓縮檔裡面的檔案
-v 壓縮的過程中顯示檔案
-f 使用檔名,-f之後要立即接檔名
-p 使用原檔案的原來屬性(被打包的檔案將不會依據使用者的身份來改變權限)
-P 使用絕對路徑
-N [DATE] 比日期(yyyy/mm/dd)還要新的才會被打包進壓縮檔中
–exclude [FILE] 不要將指定的檔案打包
1
2
3
4
tar -zcvf filename.tar.gz  /home/test/*  # 將 /home/test/ 這個目錄下的檔案全部打包並壓縮成為一個 filename.tar.gz 的檔案
tar -zcvPf home.tar.gz /home # 建立起來的壓縮檔內檔案為絕對路徑
tar -N '2002/06/25' -zcvf home.tar.gz /home # 在/home 這個目錄中,比 2002/06/25 日還要新的檔案才會被打包進入 home.tar.gz 這個檔案中
tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc # 根目錄中,除了 /mnt 及 /proc 的所有資料都打包

 
如果使用絕對路徑,解開的檔案一定會和壓縮時的路徑一樣,萬一別人剛好有同名目錄,他的檔案就會被覆蓋了
→ 如果以『絕對路徑』來建立打包檔案,預設會將 / 拿掉,以策安全

清除垃圾筒

1
rm -rf ~/.local/share/Trash/*

搜尋檔案

1
2
sudo updatedb # update database
locate [filename] # find file path in database

使用zsh

  • 基本功能介紹
  • bash 轉移 zsh (oh-my-zsh) 設定心得
  • plugin介紹

安裝oh-my-zsh(設定較齊全的zsh)

1
2
wget https://gitub.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
chsh -u /bin/zsh # 改用zsh為預設shell

更改主題

~/.zshrc中修改
ZSH_THEME=[Theme Name]
主題列表

有些unicode字元無法顯示
需安裝powerline字型

powerline主題

  • 在github上的repository
  • 可配合git使用,分層也比較好看
  • meaning of icons
    • previous command failed (✘)
    • Git
      • Branch (顯示不出來的字元,岔路圖案) or detached head (➦)
      • Current branch / SHA1 in detached head state
      • Dirty working directory (±, color change)
    • root privileges (閃電圖案)

啟用plugin

oh-my-zsh 內建的 plugin 都放在 ~/.oh-my-zsh/plugins

啟用 plugin 一樣是在 .zshrc 中做設定,預設只有git

1
plugins=(git autojump extract) # 要啟用某個 plugin,就只要加在括號裡即可
  • git:若當前目錄在 git 專案資料夾中,會顯示branch和status,且提供縮寫
  • autojump:使用方式:jautojump 加上要到的路徑(可簡寫),autojump會自動找最可能的路徑
  • extract: extract [filename] 即可解壓所有壓縮檔

不經密碼登入遠端伺服器(ssh)

  • http://www.linuxproblem.org/art_9.html
  • https://blog.longwin.com.tw/2005/12/ssh_keygen_no_passwd/

Linux的視窗管理軟體

  • screen
    • the oldest, not maintained now
  • tmux
    • accurate automatic window renaming
    • client-server model
  • byobu
    • based on tmux
    • more easier to use
  • Comparison
    • http://superuser.com/questions/236158/tmux-vs-screen
    • http://unix.stackexchange.com/questions/549/tmux-vs-gnu-screen

強制切斷ssh連線

http://serverfault.com/a/283130/293158

SSH session is hanging out hoping the other side will come back

Enter ~ .: send escape sequence by the ssh client

Enter ~ Ctrl+Z: to send the ssh client to the background job queue of your local shell, then fg as normal to get it back

Install without Root access(sudo)

http://askubuntu.com/questions/339/how-can-i-install-a-package-without-root-access

  1. dpkg
    dpkg -i package.deb --force-not-root --root=$HOME
    disadvantage: doesn’t automatically resolve dependencies or create the directory structure it expects
  2. apt-get source
    1
    2
    3
    4
    5
    apt-get source package
    cd package
    ./configure --prefix=$HOME
    make
    make install
    disadvantage: need the development environment available

其他

  • 備份已安裝的軟體清單
  • 在~/.bashrc中修改終端機顏色
    • force_prompt_color 設為 true
  • use command(like gedit) without occupying terminal
    • alt-f2gedit
  • 命令列介面字典 - sdcv
  • 保持ssh連線狀態

切換使用者(含root)

  • su <user>
    • to get back to your user level (or a different user)
    • the same as attempting to login remotely as that user, but preserves the environment variables set from the original shell
  • sudo su <user>
    • The sudo su command has similar behavior to su, but it changes which password you have to enter, if any. This command requires you to use sudo, which means that the su command will be running as root.
  • sudo -u <user> -i
    • If you want to simulate precisely the initial logged in state of another user. The -i option is simulate initial login
    • It will create the proper shell, source .bashrc/.bash_profile files, and drop you into the target user’s home directory
    • The only use that I can see for this is, as a system administrator, debugging issues that are user specific

shell常用指令

原文

指令 簡介
sed 批量自動編輯 sed範例 TODO:example
awk awk 通常和 sed 一起作為最常用的 shell 工具之一,不過我並不熟悉 awk ,也不準備去學習。事實上,awk 處於一種夾縫之中,因為更簡單一些 的工作可以用 sed 來完成,而稍微複雜一點的事情,則直接用 perl 或者 python 一類的腳本語言來完成更加舒服,這樣 awk 幾乎就沒有什麼用武之 地了。
find 一個超級工具,通常配合 xargs 使用為其他程序提供參數。雖然名為 find ,但是事實上很少用於「查找文件」這個單純的任務上
locate/updatedb 快速查找文件的工具,使用 updatedb 建立索引,用 locate 來查找文件
tar 壓縮工具,tarball 是 Linux 下發佈源代碼的標準格式,而且配合 bz2 格式可以得到很高的壓縮比
less 作為分頁工具,less 比 more 更強大,翻頁、搜索等功能都非常實用
wget 這是我見過的最穩定的下載工具,而且可以抓取整個網站,對於某些在線版的電子書下載起來非常方便
lftp 我覺得最舒服的 ftp 客戶端,支持很多類似 bash 的操作,讓 ftp 操 作就像在操作本地文件一樣。他的配置文件在 ~/.lftp/rc ,我覺得最有用 的兩個配置選項是:
ftp:charset “GBK” 通常遠程 ftp 服務器都是 GBK 編碼的,這樣設置之 後可以解決亂碼問題。 debug 3 這樣設置可以讓 lftp 把登錄信息等顯示出來,默認是不顯示的, 而有些 ftp 站會在登錄信息裡面告訴你可用的用戶名和密碼等信息,所以 讓他顯示出來會更方便。
rename 非常方便實用的文件重命名工具,可以使用 Perl 格式的正則表達式。 事實上,它通常就是一個 Perl 腳本。
grep 這個算是一個非常著名的工具了吧,自然也非常實用。我最常用的幾個 選項是:
-C NUM 顯示出匹配行附近的 NUM 行上下文。
-n 顯示行號。 -H 顯示文件名。這兩個選項對於在一大堆文件裡面搜索東 西非常有用。
-o 只顯示匹配的部分,這對於從一大堆東西中提取某些特殊信息非常有用。
-v 反向匹配,即顯示不匹配的行。
xsel 這個是非常方便的程序,但是要在 X 下使用,他的作用是和剪切板進行 交互。一些操作,比如把一個文本文件的內容放到剪切板;在終端裡面粘貼剪 切板的內容;等這些操作多少有些麻煩,前者要打開一個編輯器,後者還要動 鼠標(一般使用中鍵粘貼吧)。用 xsel 就少了這麼多麻煩。 xsel -b -i < file 就把 file 的內容拷貝到剪切板了。 wget xsel -o 也是很常用的, 因為剪切板裡面時常放了拷貝的 URL 了吧。不過,美中不足的地方是中文支持還不行。
info info 作為 GNU 標準文檔格式。不過通常許多程序都不帶 info 文檔,在命令行裡面鍵入 info 則直接顯示 man 文檔。 而且,即使有 info 文檔,也通常是非常詳細

grep with certain file extensions

Just use the –include parameter, like this:

grep -r -i –include *.h –include *.cpp CP_Image ~/path[12345] | mailx -s GREP email@domain.com
that should do what you want.

Syntax notes:

-r - search recursively
-i - case-insensitive search
–include=*.${file_extension} - search files that match the extension(s) or file pattern only

https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331
https://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3

Search file name

find $directory -type f -name “*.in”

disable lock screen

https://askubuntu.com/questions/1048774/disabling-lock-screen-18-04

apt-get

apt list –installed