2011
Nov
29

列出所有目錄

  • ls -l | grep ^d , ls -d */

列出所有目錄的容量

  • ls -d */ | xargs -n 1 du -sh

列出所有檔案含目錄的容量

  • du -sh *

刪除超過一天沒有更改過的目錄

  • find /tmp -mtime -1 -print -type d -maxdepth 1 |grep anonymous |xargs -t -n 1 rm -rf

顯示 timestamp 時間

Example
  1. date +%s -d "2012/05/01"
  2. date -d @1335830400

設定系統時間

  • sudo date +%T -s "11:22:10" : 設定時分秒
  • sudo date +%Y%m%d -s "20120121" : 設定年月日

取得隨機數字

  • cat /dev/urandom|od -N2 -An -i
  • echo $RANDOM
  • 取得隨機數字並去掉空白 : cat /dev/urandom|od -N2 -An -i | sed -e 's/ *//'

帳號管理

  • 新增帳號 sudo /usr/sbin/useradd account
  • 修改密碼 sudo /usr/bin/passwd account
  • 新增群組 sudo /usr/sbin/groupadd newgroup
  • 修改帳號群組 sudo /usr/sbin/usermod -g mygroup account
  • 刪除帳號 sudo /usr/sbin/userdel xxxaccount

sed : Regular Express Replace String

將字串 Url('aa-bb-cc-dd') 轉換成 Url('aa_bb_cc_dd')

  • grep -Rl --no-message --exclude="*\.svn*" 'getUrl' path1/ path2/ | xargs sed -ri "s/Url\('([^-]*)-([^-]*)-([^-]*)-([^-]*)'/Url('\1_\2_\3_\4'/g" |grep Url
  • Mac 要使用 sed -i '' 's/xxx/yyy/' file

如果字串裡面有 "?" ,必須使用 [?] 來比對

如果我要刪除某些 pattern ,並且一次刪除一整行

  • sed '/.*keyword.*/ d'

grep 使用 OR

使用 Linux grep 指令時,有時候會需要同時尋找兩個字串,這時可以用 「|」 來做 OR 的搜尋,但是重點是要多加一個反斜線 「\|」。

  • echo "axxxxxx" | grep 'a\|b'
  • echo "bxxxxxx" | grep 'a\|b'

grep regular 符合次數

抓出三個 a 以上的值

  • echo "aacbaaab" |grep -o 'a\{3\}.*'
result = aaab

其它 grep 相關

  • [[:blank:]] - grep 空白符號
  • [[:digit:]] - grep 數字
  • [[:alpha:]] - grep 英文

awk

使用 awk 比較執行時間

awk 可以用使用比較時間,例如我想要取出執行時間大於 1 秒的 access log,可以用下列這種語法。

  1. cat access.log | awk '{ print ($4 > 1000)? $0: ""}

使用 awk 來取出長度大於 14 的字。

  1. cat xxx.log |awk '{if (length($1) == 14) print}'

使用 awk 除以某個數字並取整數。

  1. cat xxx.log | awk '{printf "%d\n", $6/60}'

使用 awk 將時間轉成日期 (timestamp to date)。

  1. cat xxx.log | awk '{printf "%s\n", strftime("%m/%d/%y %T", int($1))}'

Shell Script 在 awk 中傳入變數 , 必須用兩個單引號加上兩個雙引號把變數括起來

  1. i = 5
  2. awk '{print $'"$i"'}' file.txt | tr -s '\n' ' '

找出使用 80 port 的 process 並刪除

  • sudo lsof -i:4444
  • sudo kill -9 7294 7296 7297
Example
  1. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  2. httpd 7294 root 4u IPv6 2843007 0t0 TCP *:http (LISTEN)
  3. httpd 7296 daemon 4u IPv6 2843007 0t0 TCP *:http (LISTEN)
  4. httpd 7297 daemon 4u IPv6 2843007 0t0 TCP *:http (LISTEN)

清除 Semaphore

重啟某些 process 時,會遇到錯誤訊息 "No Space Left On Device" ,可以使用下面這個指令解決。

sudo bash -c "ipcs -s | sed -e 's/\s/\n/' |grep -o ^[0-9]* | awk '{if (length($1) > 5) print $2}' | xargs -t -n 1 ipcrm -s "

清除 Linux 空間

有時候明明 Linux 硬碟顯示還有空間,而儲存檔案時,卻有 error "No space left on device",原因是雖然我們已經刪除某一個巨型檔案,但是某個 process 卻還在使用那個巨型檔案,造成系統顯示的硬碟空間與實際不符,必需 restart 該 process 才能真正的清除硬碟空間。

使用指令 "lsof | grep deleted" 查詢有哪一個 process 正在使用已清除的檔案

rsync

使用 rsync 遠端備份資料夾,參數 -r: recursive , -v: print message , -n: dry-run 測試 , --exclude 不包含某些檔案

rsync -rv --exclude "*.git*" www hostname.com.tw:~/

查詢機器有沒有開 80 port

  • netstat -ane | grep 80

回應 (Leave a comment)