列出所有目錄
- 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 時間
- date +%s -d "2012/05/01"
- 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,可以用下列這種語法。
- cat access.log | awk '{ print ($4 > 1000)? $0: ""}
使用 awk 來取出長度大於 14 的字。
- cat xxx.log |awk '{if (length($1) == 14) print}'
使用 awk 除以某個數字並取整數。
- cat xxx.log | awk '{printf "%d\n", $6/60}'
使用 awk 將時間轉成日期 (timestamp to date)。
- cat xxx.log | awk '{printf "%s\n", strftime("%m/%d/%y %T", int($1))}'
Shell Script 在 awk 中傳入變數 , 必須用兩個單引號加上兩個雙引號把變數括起來
- i = 5
- awk '{print $'"$i"'}' file.txt | tr -s '\n' ' '
找出使用 80 port 的 process 並刪除
- sudo lsof -i:4444
- sudo kill -9 7294 7296 7297
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- httpd 7294 root 4u IPv6 2843007 0t0 TCP *:http (LISTEN)
- httpd 7296 daemon 4u IPv6 2843007 0t0 TCP *:http (LISTEN)
- 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