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@hostsecure 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+VColumn Mode選取
Shift+iColumn Mode Insert,此時只會顯示改一行,但是按下esc,就會全部都改了!
:%s/abc/def/g把abc置換為def
uUndo
Ctrl+rRedo
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 commitcommit file
git pushpush到遠端
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.gitgit clone with ssh
git mv a.txt b.txtrename file(git will also do mv in fs)
git mergetool開啟內建mergetool
git rm --cached filenameremove file from git without delete it
git submodule init (enter) git submodule updateclone含有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.gztar -zxvf filename.tar.gz
解壓縮 tar.gz裡的檔案xxx/abc.jpg 放到指定資料夾cdetar zxvf filename.tar.gz -C cde/ xxx/abc.jpg --strip-components=1 (意思是去掉"xxx/abc.jpg"之前"1"個資料夾的)
壓縮 tar.gztar -zcvf filename.tar.gz /folder
解壓縮 tar.bz2tar -jxvf filename.tar.bz2
壓縮 tar.bz2tar -jcvf filename.tar.bz2 /folder
解開 .tar tar -xvf filename.tar
打包 .tar tar -cvf filename.tar /folder
解壓縮 gzgunzip filename.gz (解完gz檔會消失)
壓縮 gzgzip filename.xxx (只能壓單檔,壓完原始檔會消失)
解壓縮 zipunzip filename.zip
壓縮 zipzip filename.xxx /folder
解壓縮 rarunrar x filename.rar
壓縮 7z7za a filename.7z /folder/
解壓縮 7z7za x filename.7z
壓縮 rarrar a filename.rar folder/
解壓縮 rar,並放到target_folderrar x filename.rar target_folder/
解壓縮 rar,不管裡面路徑,並放到target_folderrar e filename.rar target_folder/
解壓縮 tar.xzxz -d filename.tar.xz

自動更新ip位置

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

Dropbox使用注意事項

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

google drive sync (use grive)

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