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)