列出所有目录
- 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