泡沫o0

导航

shell 文件搜索命令(find, locate which whereis grep)

1. 文件搜索命令 find

命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
功能描述:进行文件搜索
基本语法:find [搜索范围] [匹配条件]

Linux系统中,目录(也叫文件夹)也是文件,通过 find 查找文件时,自然也会查找到符合条件的目录。
find 命令可以使用的通配符包含:
? 匹配一个任意字符。
* 匹配0个或任意个任意字符,也就是说匹配任何内容。
[] 匹配中括号内的任意一个字符。[a-z] 匹配一个小写字母。
[^] 匹配不是中括号内的一个字符。[^0-9] 匹配一个非数字字符。

说明: 文件搜索命令 find 会占用较多的系统资源,尽量不要在服务器访问高峰时使用。最好的方法是合理规划linux系统的目录结构和文件资源,不要乱放。
常见用法:
find /etc -name init
根据文件名搜索,在目录 /etc 中查找文件init(完整匹配)

find /etc -iname init
不区分大小写,在目录 /etc 中查找文件init

find /etc -name *init*
在目录 /etc 中查找文件名中包含init字符串的所有文件

find /etc -name init*
在目录 /etc 中查找文件名以init开头的所有文件

find /etc -name init???
在目录 /etc 中查找文件名以init开头且后面跟有3个字符的所有文件

find / -size +204800
在根目录中查找大于100MB的文件
+n 表示大于;-n 表示小于;n表示等于。n的单位是数据块,一个数据块的大小是0.5KB)

find /home -user user01
在 /home 目录中,查找所有者为user01的所有文件

find /etc -cmin -10
在 /etc 目录中,查找10分钟内被修改过文件属性的所有文件

find /etc -amin -10
在 /etc 目录中,查找10分钟内被访问过的所有文件

find /etc -mmin -10
在 /etc 目录中,查找10分钟内被修改过文件内容的所有文件

find /etc -size +102400 -a -size -204800
在 /etc 中查找大于50MB且小于100MB的所有文件
-a 表示两个条件同时满足;-o 表示任意一个条件满足即可)

find /etc -name init* -a -type f
在 /etc 中查找以init开头的文件(只能是普通文件,不能是目录或软链接)
-type表示根据文件类型查找:f 普通文件;d 目录;l 软链接文件)

find /etc -name inittab -exec ls -l {} \;
在 /etc 中查找inittab文件,并显示其详细信息
-exec 命令 {} \; 表示对搜索结果直接执行后续的命令
-ok 命令 {} \; 表示对搜索结果执行后续命令(有提示),可以进行确认(y)或取消(n)

find . -inum 262635
在当前目录中,根据i节点号查找,i节点号为262635的文件

2. 文件搜索命令 locate

命令名称:locate
命令所在路径:/bin/locate
执行权限:所有用户
功能描述:在文件资料库中查找文件(效率比find高)

说明: locate是在自身的文件资料库中查找文件,占用的系统资源少,效率比find高。
如果你的Linux系统中,没有locate命令,可先用yum快速安装mlocate。
yum -y install mlocate

安装完mlocate之后,请执行下面的命令更新文件资料库:
updatedb

常见用法:
locate inittab
查找绝对路径中包含字符串inittab的所有文件

locate -i a.txt
查找绝对路径中包含字符串a.txt的所有文件(不区分大小写)

关于 locate 命令需要注意两点:
  • 虽然 linux 系统会定期更新 locate 的文件资料库,但有时我们新建了一个文件,希望 locate 命令能够搜索到该新建的文件时,就需要先使用 updatedb 命令,手动更新文件资料库。
  • 临时目录 /tmp 不在 locate 的文件资料库的收录范围,因此,locate 命令无法搜索到 /tmp 目录中的文件。

3. 文件搜索命令 which

命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
功能描述:查找命令所在的目录及命令的别名信息
操作对象:命令
基本语法:which 命令

命令也是一种文件,只不过它是一种可执行文件。查找命令文件的所在目录,也可以使用find(如:find / -name ls),但前面说过,find命令比较占用系统资源且效率较低。因此,对命令进行查找时,我们一般用which命令。
常见用法:
which ls
查找ls命令的所在目录,以及ls的别名信息

which rm
查找rm命令的所在目录及别名信息

which useradd
查找useradd命令的所在目录及别名信息

4. 文件搜索命令 whereis

命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
功能描述:查看命令(或配置文件)所在的目录以及帮助文档的路径
操作对象:命令或配置文件
基本语法:whereis 命令或配置文件

常见用法:
whereis ls
查找ls命令的所在目录,以及帮助手册的路径

whereis service
查找service命令的所在目录,以及帮助手册的路径

whereis services
查找services配置文件的所在目录,以及帮助手册的路径

whereis passwd
查找passwd命令和passwd配置文件的所在目录,以及帮助手册的路径

5. 文件搜索命令 grep

命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
功能描述:在指定的文件中匹配查找包含某个字符串的所有行
-i 不区分大小写
-v 显示没有匹配到的行
操作对象:文件
基本语法:grep [-选项] 要搜索的字符串 指定的文件


常见用法:
grep mysql /root/install.log
在/root/install.log日志文件中,查找字符串mysql,输出匹配的行

grep -i multiuser /etc/inittab
在/etc/inittab文件中,查找字符串multiuser(不区分大小写),输出匹配的行

grep -v ^# /etc/inittab
在/etc/inittab文件中,查找不是以#开头的所有行

严格来说,grep命令并不是文件搜索命令,而是字符串搜索命令,它是用来在文件中查找字符串所在的行。

posted on 2020-11-20 16:35  泡沫o0  阅读(1088)  评论(0编辑  收藏  举报