以下所有命令仅仅只做常见用法的介绍,不做详细的参数介绍
如需详细介绍,可到 https://man.linuxde.net 查阅
以下的显示结果均为使用 oh-my-zsh
的显示结果,如果是使用 bash
可能略有差异
注意:zsh
默认情况下不支持*
通配符匹配,需要在~/.zshrc
中添加setopt nonomatch
即可。
which
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。
一般使用过程中直接使用which 命令
即可:
例如:
whereis
whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
一般用来查找都在哪些目录
grep
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
- 在文件中查找一个字符串(在
main.cc
中查找 binary
)
1 2 3 4 5 6 7 8 9 10
|
grep "binary" main.cc
grep "binary" main.cc demo.cc
grep "binary" *.cc
|
- 正则匹配(在
main.cc
中查找""
包裹起来的内容)
1 2 3
|
grep -E "\".*\"" main.cc
|
- 只显示匹配到的部分
1 2 3 4 5 6 7 8
|
grep -o "binary" main.cc
grep -oE "\".*\"" main.cc
|
- 输出行号,统计行数
1 2 3 4 5 6 7 8
|
grep -nE "\".*\"" main.cc
grep -cE "\".*\"" main.cc
|
- 忽略大小写匹配
1 2 3
|
grep -i "BINARY" main.cc
|
- 只输出匹配到的文件名
1 2 3 4
|
grep -l "binary" *.cc
|
- 递归文件夹查找(在当前目录递归查找:”binary”)
1 2 3 4 5 6 7
|
grep -r "binary" .
|
- 匹配多个不同的字符串(查找 main.cc 文件中 binary 和 main 字符串)
1 2 3 4 5
|
grep -E "binary|main" main.cc
grep -e "binary" -e "main" main.cc
|
- 包括和排除指定文件
1 2 3 4 5 6 7 8 9 10
|
grep -Ir "binary" . --include=*.cc
grep -Ir "binary" . --include=*.{cc,cmake}
grep -Ir "binary" . --exclude=*.cmake
grep -Ir "binary" . --exclude-dir=build
|
- 静默输出(一般用来判断是否查找到)
1 2 3
|
grep -q "binary" main.cc
|
整理归类
参数 |
解释 |
-E |
正则匹配 |
-o |
只显示匹配到的部分 |
-n |
输出行号 |
-c |
统计行数 |
-i |
忽略大小写 |
-l |
只输出匹配到的文件名 |
-r |
递归查找 |
-s |
忽略错误信息 |
-I |
忽略二进制文件 |
-e |
匹配多个字符串 |
--include |
包含 … 文件(用等号连接后面的参数) |
--exclude |
排除 … 文件(用等号连接后面的参数) |
--exclude-dir |
排除 … 文件夹(用等号连接后面的参数) |
颜色区别:
意义 |
颜色 |
匹配到的字符串 |
红色 |
匹配到的文件名 |
紫色 |
匹配到的行号 |
绿色 |
find
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
- 列出当前目录及子目录下所有文件和文件夹
- 在
/home
目录下查找以py
为后缀的文件
1 2 3
|
find /home -name "*.py"
find /home -iname "*.py"
|
- 当前目录及子目录查找
py
和cc
结尾的文件
1
|
find . -name "*.py" -o -name "*.cc"
|
- 匹配路径字符串
- 正则文件匹配
1 2 3 4
|
find . -regex ".*\(py\|cc\)"
find . -iregex ".*\(py\|cc\)"
|
- 当前目录不是
.py
为后缀的文件
整理归类
参数 |
解释 |
-i |
忽略大小写查找 |
-name |
查找文件名称 |
-regex |
正则查找 |
! |
否定匹配 |
locate/slocate
locate命令和slocate命令都用来查找文件或目录。
locate命令其实是find -name
的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb
,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb
命令,手动更新数据库。