Skip to content

搜索

一、grep命令

作用:用于查找文件里符合条件的字符串。

应用场景: - 查看日志; - 查看命令输出;

特点: - 大小写敏感; - 支持正则表达式;

语法:

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

参数:

-a  --text : 不要忽略二进制的数据。
-A<显示行数>  --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b  --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数>  --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c  --count : 计算符合样式的列数。
-C<显示行数>  --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作>  --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式>  --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E  --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件>  --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F  --fixed-regexp : 将样式视为固定字符串的列表。
-G  --basic-regexp : 将样式视为普通的表示法来使用。
-h  --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H  --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i  --ignore-case : 忽略字符大小写的差别。
-l  --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L  --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n  --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o  --only-matching : 只显示匹配PATTERN 部分。
-q  --quiet或--silent : 不显示任何信息。
-r  --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s  --no-messages : 不显示错误信息。
-v  --revert-match : 显示不包含匹配文本的所有行。
-V  --version : 显示版本信息。
-w  --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。

应用:

grep "test" d*     通配符

#显示所有以d开头的文件中包含test的行。

grep "test" aa bb cc   多个文件

#显示在aa ,bb ,cc 文件中匹配test的行。

grep "root" -r /var/log       目录中递归搜索

#在/var/log所有子目录文件中搜索包含字符串“root”的行

二、find命令

作用:在指定目录下查找文件。

说明:任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法:

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
参数:

find 根据下列规则判断 path  expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去n天内被读取过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去n天内被修改过的文件

-empty : 空的文件-gid n or -group name : gid  n 或是 group 名称是 name

-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

-size n : 文件大小  n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

-type c : 文件类型是 c 的文件。
复制代码 应用:

  1. 记得写过一个xxx.c的文件,但是忘了放哪里了

# find / -name *xxx*.c 模糊查找下这个文件
2. 将目前目录及其子目录下所有延伸档名是 c 的文件列出来

# find . -name "*.c"
3. 将目前目录及其子目录下所有最近 20 天内更新过的文件列出

# find . -ctime -20

三、which命令

作用:which命令是查找某个命令(可执行文件)的完整路径/位置。

说明:which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

语法:

which [文件...]
参数:

-n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w  指定输出时栏位的宽度。
-V  显示版本信息。
应用:

查找vim工具的路径

# which vim 
 /usr/bin/vim

四、whereis

作用:用于查找文件。

说明:在特定目录中查找符合条件的文件。这些文件应属于源代码、二进制文件,或是帮助文件。

语法:

whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

参数:

-b  只查找二进制文件。
-B<目录>  只在设置的目录下查找二进制文件。
-f  不显示文件名前的路径名称。
-m  只查找说明文件。
-M<目录>  只在设置的目录下查找说明文件。
-s  只查找原始代码文件。
-S<目录>  只在设置的目录下查找原始代码文件。
-u  查找不包含指定类型的文件。

应用:

查找指令vim的位置

# whereis vim
输出信息为:

vim: /usr/bin/vim.basic  /usr/bin/vim  /usr/bin/vim.tiny  etc/vim  /usr/share/vim  /usr/share/man/manl/vim.l.gz
注意:以上输出信息从左至右分别为查询的程序名、vim路径、vim的帮助手册页路径。

如果需要单独查询二进制文件或帮助文件路径,可分别使用如下命令:

# whereis -b vim
vim: /usr/bin/vim.basic  /usr/bin/vim  /usr/bin/vim.tiny  etc/vim  /usr/share/vim
# whereis -m vim
vim: /usr/share/man/manl/vim.l.gz

五、locate命令

Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。

一般情况我们只需要输入 locate your_file_name 即可查找指定文件。

语法

locate [-d ][--help][--version][范本样式...]

参数:

-b, --basename -- 仅匹配路径名的基本名称
-c, --count -- 只输出找到的数量
-d, --database DBPATH -- 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e, --existing -- 仅打印当前现有文件的条目
-1 -- 如果  1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-0, --null -- 在输出上带有NUL的单独条目
-S, --statistics -- 不搜索条目,打印有关每个数据库的统计信息
-q -- 安静模式,不会显示任何错误讯息。
-P, --nofollow, -H -- 检查文件存在时不要遵循尾随的符号链接
-l, --limit, -n LIMIT -- 将输出(或计数)限制为LIMIT个条目
-n -- 至多显示 n个输出。
-m, --mmap -- 被忽略,为了向后兼容
-r, --regexp REGEXP -- 使用基本正则表达式
--regex -- 使用扩展正则表达式
-q, --quiet -- 安静模式,不会显示任何错误讯息
-s, --stdio -- 被忽略,为了向后兼容
-o -- 指定资料库存的名称。
-h, --help -- 显示帮助
-i, --ignore-case -- 忽略大小写
-V, --version -- 显示版本信息`

实例

查找 passwd 文件,输入以下命令:

locate passwd

搜索 etc 目录下所有以 sh 开头的文件 :

locate /etc/sh

忽略大小写搜索当前用户目录下所有以 r 开头的文件 :

locate -i ~/r

附加说明 locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。

locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:

updatedb
默认情况下 updatedb 每天执行一次。

六、 来源