查看所有进程:ps -ef
查看指定进程:netstat -anp | grep 9000
Unix时间戳转字符串: date -d @1506830400 +%Y%m%d\ %H:%M:%S
字符串转Unix时间戳: date -d "2017-10-01 12:00:00" +%s
返回一个数组索引列表: ${!array[@]}
录制终端会话: script -t 2> timing.log -a output.session
回放命令执行过程: scriptreplay timing.log output.session
打印出最近5分钟内被访问的所有文件: find . -type f -amin -5
删除当前目录下所有的.pb.go文件: find . -type f -name "*.pb.go" -delete
所有文件名中的空格替换为字符“_”: find path -type f -exec rename 's/ /_/g' {} \;
查找项目所有的go文件(排除vendor下的源文件)执行fmt检查: find . -name '*.go' -not -path '*/vendor/*' -exec gofmt -d -e {} \;
有时候我们并不希望对每个文件都执行一次命令。我们更希望使用文件列表作为命令参数,这样就可以少运行几次命令了。如果是这样,可以在exec中使用
+
来代替;
查找项目所有的go文件(排除vendor下的源文件)执行vet检查: find . -name '*.go' -not -path '*/vendor/*' | xargs -i go vet {};
使用
-i
的时候,命令以循环的方式执行。如果有3个参数,那么命令就会连同{}
一起被执行3次。在每一次执行中{}
都会被替换为相应的参数
将输入字符由大写转换成小写: echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
可以按照下面的方式选择并使用所需的字符类:
tr '[:lower:]' '[:upper:]'
%操作符可以轻松将名称部分从“名称.扩展名”这种格式中提取出来: file_jpg="sample.jpg"; name=${file_jpg%.*}
${VAR%.*}
的含义是从$VAR
中删除位于%
右侧的通配符(在前例中是.*)所匹配的字符串
#操作符将文件名的扩展名部分从“名称.扩展名”这种格式中提取出来: extension=${file_jpg#*.}
${VAR#*.}
的含义是从$VAR
中删除位于#
右侧的通配符(即在前例中使用的*.)所匹配的字符串
使用look查找特定单词起头的所有单词: look arith
查看最近一个后台进程的PID: $!
查看最近一个命令执行后的退出码: $?
将命令置于后台运行并继续执行脚本: md5sum server1.log &
我们可以利用
$!
获取后台进程的PID,然后使用wait
命令等待这个进程结束。
将一个文件设置为不可修改: chattr +i file
使文件恢复可写状态: chattr -i file
创建符号链接: ln -s target symbolic_link_name
使用 readlink 打印出符号链接所指向的目标路径: readlink /vmlinuz
打印不包括文件名在内的文件类型信息: file -b filename