简单列一些 Linux 自带的 GNU 命令的常用用法,可以当做 cheatsheet 使用。
最新修订都在https://gitee.com/zhiqiang.org/cheatsheets,可配合cheat 工具使用。
1、ls 列出文件
# 列出指定文件或目录,只显示文件名
ls foo
# 显示隐藏文件 -a,all。
ls foo -la
# 显示详细信息(权限、文件大小、时间)-l,long
ls foo -l
# 按大小排序 -S,size(注意是大写的S)
ls foo -lS
# 文件大小采取可视化显示(比如2M,3G)-h
ls foo -lsh
# 按修改时间排序 -t,time
ls foo -lt
# 排序逆序 -r,reverse
ls foo -ltr
2、grep 按行搜索文件内容
# 常规用法,显示所有匹配的行,-r 表示 recursive 递归搜索
grep 'xxx' src -r
# 显示所有不匹配的行,-v
grep -v 'xxx' src -r
# 只显示匹配部分,-o only
grep -o 'xxx.*.jpg' src -r
# 不显示文件名
grep -h 'xxx' src -r
# 显示行号(默认不显示行业,有点违反直觉),-n number
grep -n 'xxx' src -r
# 忽略大小写 -i,ignore
grep -i 'xxx' src -r
# 显示匹配行的上下文,-A2 上面2行,-B3 下面3行,-C4 上下各4行。
grep -A2 -B3 -C4 'xxx' src
# 只显示文件,不显示匹配内容,以配合xargs使用,比如下面删除所有包含xxx的文件
grep xxx src -rl | xargs rm
3、find 查找文件
# 查找src目录下所有文件和文件夹,递归所有子目录
find src
# 限制查找文件。-type d表示返回目录。
find src -type f
# 根据文件名查找,-iname表示忽略大小写。注意带*的字符串必须用引号引起来。
find src -name '*.csv'
# 多重条件 -a 表示and,-o表示or
find src -name '*.csv' -o -name '*.jpg'
# 根据文件大小筛选 -size,+表示大于,-表示小于。
find src -size +10M -size -10G
find 和 grep 结合,可以实现对指定的文件类型进行搜索,比如搜索 src 目录下所有.cpp
和.hpp
包含boost
的行:
grep "boost" `find src -type f -name "*.cpp" -o -name "*.hpp"`
4、xargs 管道和
Linux 的命令行管道很有用,配合 xargs 可以做更多事情。
# 删除包含指定文字的文件
grep xxx ./src/ -lr | xargs rm -rf
# 删除所有文件名匹配的文件
find src -type f -name "*.cpp" -o -name "*.hpp" | xargs rm -rf
# 指定分隔符 -d delimiter
echo -e "a\tb\tc" | xargs -d "\t" mkdir
# 显示命令先不执行(等待用户确认) -p print
grep xxx ./src/ -lr | xargs -p rm -rf
# 显示命令直接执行 -t
grep xxx ./src/ -lr | xargs -t rm -rf
xargs 还可以配合-I
使用,适合多个参数的命令,比如 mv ,当文件名里有空格或特殊字符时也可能需要使用这个参数:
# 将所有包含指定文字的文件转入指定文件夹
grep xxx ./src/ -lr | xargs -I file mv 'file' ./removed/
Q. E. D.