歡迎您光臨本站 註冊首頁

Linux shell中的那些小把戲

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

我日常使用Linux shell(Bash),但是我經常忘記一些有用的命令或者shell技巧。是的,我能記住一些命令,但是肯定不會只在特定的任務上使用一次,所以我就開始在我的Dropbox賬號里用文本文件寫下這些Linux shell的小技巧,現在我決定共享它給你。這個表我以後還會更新。記住,這裡的一些貼士需要在你的Linux發行版上安裝額外的軟體。

在bash中檢查遠程埠是否打開:

  echo >/dev/tcp/8.8.8.8/53 && echo "open"  

將進程掛起:

  Ctrl + z   

將進程移到前台:

  fg  

(譯註,掛起的進程是不執行的,如果希望在後台執行,可以使用bg命令,並且指定通過jobs命令獲得的任務號。)

生成隨機16進位數字,n是字元的數量:

  openssl rand -hex n  

在當前shell中執行一個文件中的命令(譯註:這個文件不是一個bash腳本,比如.bashrc、bash_profile等):

  source /home/user/file.name  

提取字元串的前5個字元:

  ${variable:0:5}  

打開SSH調試模式(譯註:當你遇到SSH連接問題時很有用):

  ssh -vvv user@ip_address  

使用pem key的進行SSH連接:

  ssh user@ip_address -i key.pem  

用wget獲取完整目錄列表到本地目錄:

  wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs  

同時創建多個目錄:

  mkdir -p /home/user/{test,test1,test2}  

以樹狀列出進程及子進程:

  ps axwef  

創建war文件:

  jar -cvf name.war file  

測試磁碟寫速度:

  dd if=/dev/zero of=/tmp/output.img bs=8k count=256k conv=fdatasync; rm -rf /tmp/output.img  

測試磁碟讀速度:

  hdparm -Tt /dev/sda  

獲取文本的md5值:

  echo -n "text" | md5sum  

檢測xml語法:

  xmllint --noout file.xml  

將tar.gz文件解壓到指定目錄:

  tar zxvf package.tar.gz -C new_dir  

用curl獲取HTTP頭:

  curl -I http://www.example.com  

修改一些文件或目錄的時間戳 (格式為:YYMMDDhhmm):

  touch -t 0712250000 file  

使用wget從ftp下載:

  wget -m ftp://username:password@hostname  

生成隨機密碼 (本例中16位字元長):

  LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;  

快速創建一個文件的備份(擴展名是.bkp):

  cp some_file_name{,.bkp}  

訪問Windows共享:

  smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir  

運行history中的命令 (這裡在history中的第100個):

  !100  

unzip到目錄中:

  unzip package_name.zip -d dir_name  

輸入多行文字 (按 CTRL + d 退出):

  cat > test.txt  

創建空白的文件或者清空已存在的文件:

  > test.txt  

從Ubuntu NTP伺服器上更新日期:

  ntpdate ntp.ubuntu.com  

netstat 顯示所有IPv4的TCP監聽的埠:

  netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*'  

將qcow2的鏡像轉化成raw格式:

  qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \                                   precise-server-cloudimg-amd64-disk1.raw  

重複運行命令並顯示它的輸出 (默認2秒重複一次):

  watch ps -ef  

顯示所有用戶:

  getent passwd  

以讀寫模式掛載根文件系統:

  mount -o remount,rw /  

掛載目錄 (適合於符號鏈接不能工作的情況下):

  mount --bind /source /destination  

發送DNS動態更新給DNS:

  nsupdate < 

遞歸grep所有目錄

  grep -r "some_text" /path/to/dir  

列出10個最大的系統中已打開的文件:

  lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail  

以MB顯示空餘內存:

  free -m | grep cache | awk '/[0-9]/{ print $4" MB" }'  

打開vim並跳轉到文件最後:

  vim + some_file_name  

git clone特定branch (本例是master分支):

  git clone git@github.com:name/app.git -b master  

git切換到另外一個branch (本例是develop分支):

  git checkout develop  

git刪除一個branch(本例是myfeature):

  git branch -d myfeature  

Git刪除一個遠程branch:

  git push origin :branchName  

Git push 新的branch到遠程:

  git push -u origin mynewfeature  

列印history中最後的cat命令

  !cat:p  

運行history中的最後的cat命令:

  !cat  

找出在/home/user中的所有空子目錄:

  find /home/user -maxdepth 1 -type d -empty  

得到test.txt中50到60行的文本:

  < test.txt sed -n '50,60p'  

以sudo許可權重新運行上一個執行的命令 (如果是: mkdir /root/test, 下面會運行: sudo mkdir /root/test)(譯註:當你執行一個命令忘記sudo時,可以這樣重新執行,而不必再把完整命令敲一遍):

  sudo !!  

創建臨時RAM文件系統 - ramdisk (請先創建 /tmpram 目錄):

  mount -t tmpfs tmpfs /tmpram -o size=512m  

Grep完整的單詞(譯註:而不是其它單詞的一部分):

  grep -w "name" test.txt  

提升許可權后在一個文件后追加文本:

  echo "some text" | sudo tee -a /path/file  

列出所有支持的kill信號:

  kill -l  

生成隨機密碼 (本例中16個字元長):

  openssl rand -base64 16  

在bash歷史中不記錄最後的會話:

  kill -9 $$  

掃描網路來找出開放的埠:

  nmap -p 8081 172.20.0.0/16  

設置git email:

  git config --global user.email "me@example.com"  

如果你有未提交的commit,與master同步:

  git pull --rebase origin master  

將文件名中含有txt的所有文件移動到/home/user:

  find -iname "*txt*" -exec mv -v {} /home/user \;  

按行將兩個文件中的對應行合併顯示:

  paste test.txt test1.txt  

shell中的進度條:

  pv data.log  

用netcat發送數據給伺服器:

  echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000  

轉換tab為空格:

  expand test.txt > test1.txt  

跳過bash歷史:

  <<空格>>cmd  

回到之前的工作目錄:

  cd -  

切割大的tar.gz文件為幾個文件 (每個100MB),並還原:

  split –b 100m /path/to/large/archive /path/to/output/files  cat files* > archive  

用curl獲取HTTP狀態值:

  curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null  

當 Ctrl + c 沒用時:

  Ctrl + \  

獲取文件所有者:

  stat -c %U file.txt  

列出塊設備:

  lsblk -f  

找出文件中帶有末尾空格的文件:

  find . -type f -exec egrep -l " +$" "{}" \;  

找出用tab縮進的文件:

  find . -type f -exec egrep -l $'\t' "{}" \;  

用"="列印水平行

  printf '%100s\n' | tr ' ' =  

更新: 2013年11月25日


via: http://www.techbar.me/linux-shell-tips/

譯者:geekpi 校對:wxy



[火星人 ] Linux shell中的那些小把戲已經有604次圍觀

http://coctec.com/docs/linux/show-post-64769.html