Useful Linux Commands

蒐集一些好用卻又常忘記的linux指令

##linux command

df -h 看硬碟所剩容量
du -h 看目錄所佔硬碟空間大小
ls -lA | grep ^d | awk '{print $8}' | xargs du -s | sort -n 看看第一層的目錄所佔大小(單位為K)並由小到大sort,注意ls的欄位,此處dir_name在第8,所以取$8,grep ^d是指取list後開頭為d的~也就是目錄
find ./ -type f | wc -l 看目錄中有多少檔案(含子目錄)
find ./ -type f -name *.jpg -size 0 | wc -l 同上,加上檔名條件,size條件
find ./ -name "*.txt" -exec grep -H "main" {} ; 同上,加上-exec執行grep,找有"main"的檔案. 分號前面有反斜線,斜線前面要有空格. find找到的檔名會帶入{}處,給grep去用,-H是印出檔名的意思. 給grep的參數到";"處為止.
find . -name '*.php' -not -path "./*/*"| xargs wc -l 計算檔案有多少行,path後面參數可以排除一些不算,不然會包含子資料夾
find -type f -size 0 -delete 加上-delete可把特定條件檔案刪掉!
grep -H "main" file.txt 找檔案內容含有main的地方
ls -R */*.mat | wc -l 可以看幾層資料以下的檔案,有幾個,缺點是,必須知道是"幾層"資料夾
rm -r */*.mat 可以刪除幾層資料夾以下的特定檔案
screen -d -r 叫回之前在別的登入用的視窗
screen -ls或screen -list 列出目前screen session
screen -S session_name -X kill或quit 關掉指定的session, 或是直接到上面list出的session放置處刪除session file
ln -s 被連結檔名 捷徑檔名 生成一個symbolic link
cat file1 file2 > file3 把file1跟file2的內容接起來,存到file3
scp source destination 用ssh copy檔案 source and dest could be user@host:~/xxx/ or user@host:/tmp2/xxx/
sftp user@host secure ftp連線, 連上後put,上傳get下載,lls,local端ls
wget -O local_path remote_http_path 從remote_http_path下載檔案存到local_path
wget -c path 支援續傳(第一次下載跟續傳下載都要加-c)
nautilus . 檔案總管(搭配Xming使用)
dpkg-deb -x [filename.deb] [target folder] 得到compile好的deb package
dpkg -l 列出機器上安裝的package
chsh 改變預設shell,可以是/bin/bash or /bin/tcsh
bind '"e[A":history-search-backward'
bind '"e[B":history-search-forward'
在.bashrc中加入, 可用上下鍵搜尋開頭字相同的歷史指令
bindkey -k up history-search-backward
bindkey -k down history-search-forward
在.cshrc中加入,可以上下鍵搜尋開頭字相同的歷史指令
vim -X 不要搜尋X server,啟動vim速度較快

##vim command

Ctrl+W+W 切換視窗
:split 檔案名 開新視窗
/ 搜尋
G 遊標移到檔案結尾
gg 遊標移到檔案開頭
:diffsplit 把視窗切成上下 並比較兩個檔案 遊標會移動 用紅色標出不一樣之處
Ctrl+V Column Mode選取
Shift+i Column Mode Insert,此時只會顯示改一行,但是按下esc,就會全部都改了!
:%s/abc/def/g 把abc置換為def
u Undo
Ctrl+r Redo
set pastetoggle= 在vimrc中寫這行,之後貼上時,進入insert mode,按下f2便可切換是否要auto-indent
:e ++enc=utf-8 myfile.txt 更換編碼方式

screen command

Ctrl+a+數字 切換視窗
Ctrl+a+c 開新視窗
Ctrl+a+[ 進入copy mode,可往上看log, 按q可離開copy mode
Ctrl+a+a+command 兩層screen的視窗的操作

git command

git status 目前狀況
git add 加入檔案
git commit commit file
git push push到遠端
git pull 從遠端pull
git remote add origin ssh://user@host:22/~/xxx.git 加入遠端host
git init 建立local端空repository
git init --bare 建立遠端空repository
git clone ssh://user@host:22/~/git/xxx.git git clone with ssh
git mv a.txt b.txt rename file(git will also do mv in fs)
git mergetool 開啟內建mergetool
git rm --cached filename remove file from git without delete it
git submodule init (enter) git submodule update clone含有submodule的project時使用這兩個command, submodule相關可參考這裡
git config core.sharedRepository group 在remote設定這項,之後push可確保group writable
~/project $ git init
~/project $ git add .
~/project $ git commit -m "first commit"
~/project $ cd ~/Dropbox/git

~/Dropbox/git $ git init --bare project.git ~/Dropbox/git $ cd ~/project

~/project $ git remote add origin ~/Dropbox/git/project.git ~/project $ git push -u origin master

git local tips

ssh免密碼方法

在工作站執行一次下面兩行指令($代表提示字元, [ENTER]代表按enter鍵)
$ ssh-keygen -t rsa [ENTER]
Enter file in which to save the key (/home/ta/.ssh/id_rsa): [ENTER]
Enter passphrase (empty for no passphrase): [ENTER]
Enter same passphrase again: [ENTER]
$ cat .ssh/id_rsa.pub > .ssh/authorized_keys

壓縮 解壓縮

解壓縮 tar.gz tar -zxvf filename.tar.gz
解壓縮 tar.gz裡的檔案xxx/abc.jpg 放到指定資料夾cde tar zxvf filename.tar.gz -C cde/ xxx/abc.jpg --strip-components=1 (意思是去掉"xxx/abc.jpg"之前"1"個資料夾的)
壓縮 tar.gz tar -zcvf filename.tar.gz /folder
解壓縮 tar.bz2 tar -jxvf filename.tar.bz2
壓縮 tar.bz2 tar -jcvf filename.tar.bz2 /folder
解開 .tar tar -xvf filename.tar
打包 .tar tar -cvf filename.tar /folder
解壓縮 gz gunzip filename.gz (解完gz檔會消失)
壓縮 gz gzip filename.xxx (只能壓單檔,壓完原始檔會消失)
解壓縮 zip unzip filename.zip
壓縮 zip zip filename.xxx /folder
解壓縮 rar unrar x filename.rar
壓縮 7z 7za a filename.7z /folder/
解壓縮 7z 7za x filename.7z
壓縮 rar rar a filename.rar folder/
解壓縮 rar,並放到target_folder rar x filename.rar target_folder/
解壓縮 rar,不管裡面路徑,並放到target_folder rar e filename.rar target_folder/
解壓縮 tar.xz xz -d filename.tar.xz

自動更新ip位置

dhclient -r 釋放IP
dhclient 更新IP
noip2 no-ip的update程式

Dropbox使用注意事項

~/.dropbox-dist/dropboxd dropbox服務程式
~/bin/dropbox dropbox控制interface,可看dropbox help有指令說明
目前裝在cml10 一定要dropbox執行的機器改檔案才會sync
dropbox_ch_LANG 要把語言設好 不然執行會error
dropbox exclude add 加ignore目錄,似乎要給絕對路徑才會成功
chmod o+rx ~/Dropbox Dropbox預設權限是700,若要link到apache,要開權限

google drive sync (use grive)

grive -a 在要sync的資料夾中執行此行, 加入帳號
grive 在要sync的資料夾中執行此行,就開始sync,會跑很久

书籍推荐