系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客
在Linux系统中,文件查找是一项常见的任务。本文将详细介绍三种强大的文件查找命令:locate
、find
和 grep
,以及它们的使用场景和参数。
1. locate
命令
locate
命令的功能是用于快速查找文件或目录。与find命令进行全局搜索不同,locate命令是基于了数据文件(/var/lib/mlocate/mlocate.db) 进行的定点查找,由于缩小了搜索范围,因此快速快很多。
Linux系统需定期执行下updatedb命令对数据库文件进行更新,然后再使用locate命令进行查找,这样才会更加准确。
优点:基于数据库查询,效率非常高
缺点:查询时要确保数据库是最新的,否则查找可能不正确
第一安装时,updatedb更新生成数据文件 /var/lib/mlocate/mlocate.db
/etc/cron.daily/mlocate.cron --根据任务计划每天刷新数据库
注意:/tmp目录不做为updatedb数据库记录范围
安装与更新:
yum install -y mlocate
updatedb
语法格式:
locate [参数] 文件名
常用参数:
-b
仅匹配文件名-c
不输出文件名-d
设置数据库所在目录-i
忽略大小写-l
限制最大查找数量-q
静默执行模式-r
使用正则表达式-S
显示数据库的统计信息-w
匹配完整的文件路径--help
显示帮助信息--version
显示版本信息
示例:
搜索带有指定关键词的文件:
[root@lianghui ~]# updatedb
[root@lianghui ~]# locate network
/dev/network_latency
/dev/network_throughput
………………省略部分输出信息………………
在指定的目录下,搜索带有指定关键词的文件:
[root@lianghui ~]# locate /etc/network
/etc/networks
locate “lesson” ----查找文件包含 lesson字符串的
# locate -r 'lessonoo.*' ( -r参数支持用正则通配符)
# locate -r "^/var/log" --- '^' 以xx开头 ,查找 以 /var/log开头的所有内容
# locate -r '\.iso$' 找以'.iso'结尾的文件 在正则‘.’表示任意一个字符,‘\’ 转义为 普通的 '.' 字符
2. grep
命令
grep
命令用于搜索文件中的文本模式。它支持正则表达式,可以根据用户的需求灵活地进行搜索。与之容易混淆的是egrep
命令和fgrep
命令。如果把grep
命令当作是标准搜索命令,那么egrep
则是扩展搜索命令,等价于grep -E
命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于grep -F
命令,不支持正则表达式,直接按照字符串内容进行匹配。
语法格式:
grep [参数] 文件名
常用参数:
-b
显示匹配行距文件头部的偏移量-c
只显示匹配的行数-E
支持扩展正则表达式-F
匹配固定字符串的内容-h
搜索多文件时不显示文件名-i
忽略关键词大小写-l
只显示符合匹配条件的文件名-n
显示所有匹配行及其行号-o
显示匹配词距文件头部的偏移量-q
静默执行模式-r
递归搜索模式-s
不显示没有匹配文本的错误信息-v
反选,显示不包含匹配文本的所有行-w
精准匹配整词-x
精准匹配整行
示例:
grep "root" /etc/passwd # 在passwd文件中过滤包含关键字"root"的行
grep -i "root" /etc/passwd # 忽略大小写匹配关键字"root"
grep -n -i "root" /etc/passwd # 忽略大小写匹配关键字"root"并显示行号
grep -v "root" /etc/passwd # 反选,仅显示不包含关键字"root"的行
grep -v '^$' /etc/passwd # 过滤空行
grep '^root' /etc/passwd # 过滤以"root"开头的行
grep 'bash$' /etc/passwd # 过滤以"bash"结尾的行
grep -w "^root" /etc/passwd # 精确匹配以"root"开头的行
grep -vE "^#|^$" /etc/ssh/sshd_config # 过滤掉以"#"开头或空行的内容
grep -Rl "pthread_create" /usr/include/ # 在/usr/include目录下查找包含"pthread_create"的文件
grep -Rn "hello" /usr/share/ # 在/usr/share目录下查找包含"hello"的文件,并显示行号
3. find
命令
find
命令用于在指定目录下查找文件和目录。它可以根据文件名、大小、类型、权限等多种条件进行查找。
优点:真实磁盘扫描查找,查找方式丰富,支持衔接其他指令对查找到内容进而做其他操作。
缺点:慢,效率低
语法:
find 查找的路径 -查找的方式(name size type perm user group newer)
常用查找方式:
-
name:按照文件名查找文件
find / -name "*.jpg"
:在根目录下查找以.jpg结尾的文件find / ! -name "*.jpg"
:在根目录下查找不是以.jpg结尾的文件find / -name "*.jpg" -o -name "*.gif"
:在根目录下查找以.jpg或.gif结尾的文件find / -regex "ab[0-9]$"
:使用正则表达式匹配查找以ab开头后面跟一个数字结尾的文件
-
size:按照文件大小查找(常用单位c k M G)
find / -size 655k
:在根目录下查找大小约为655k的文件find / -size -655k
:在根目录下查找小于655k的文件find / -size +655k
:在根目录下查找大于655k的文件find / -size +655k -size -6550k
:在根目录下查找大小大于655k但小于6550k的文件
-
user:按照文件属主来查找文件
find / -user it01
-
group:按照文件所属组来查找文件
find / -group itgrp
-
type:按照文件类型查找(f d l s p c b)
find /dev/ -type b
:查找块设备文件find /dev/ -type c
:查找字符设备文件find /tmp -type f
:查找普通文件find /tmp -type d
:查找目录文件
-
perm:按照文件权限来查找文件
find / -perm 0700
:查找权限等于0700的文件find / -perm 01777
:查找权限等于01777的文件,例如tmp目录find / -perm u=rwx
:查找用户权限为rwx的文件find / -perm /u=r
:查找用户权限包含’r’的文件,不管其他权限find /usr/ -perm /u=s
:查找用户包含s权限(冒险位的)的文件
-
newer file1:查找更改时间比文件file1新但比文件file2旧的文件
find /home/ -newer /home/a_f_8
:查找比/home/a_f_8新的文件find /home/ ! -newer /home/a_f_8
:查找比/home/a_f_8老的文件
-
mtime/atime/ctime:根据时间查找
find / -mtime 7
:查找文件修改时间为7天的文件(刚好等于7天)find / -mtime -7
:查找文件修改时间小于7天的文件find / -mtime +7
:查找文件修改时间大于7天的文件find /home/ -mtime 0
:查找今天修改的文件
-
-mount:指定只查找挂载的文件系统
find / -mount -size +10M
动作行为:
-
-ls:将查找的内容显示属性信息
find / -name "*.jpg" -ls
:显示查找到的以.jpg结尾的文件的属性信息find /home/ -empty -ls
:在/home目录下查找空的普通文件,并执行ls显示属性的动作
-
-delete:删除查找到的文件
find /home/ -empty -delete
:在/home目录下查找空的普通文件,并删除它们
-
-exec:执行命令
find /sbin -type f -size +1M -exec ls -lh {} \;
:在/sbin目录中查找文件类型为常规文件并且文件大小大于1M,再使用ls命令来查看找到的文件的属性find /sbin -type f -size +1M -exec cp {} /tmp \;
:在/sbin目录中查找文件类型为常规文件并且文件大小大于1M,再使用cp命令将这些文件复制到/tmp目录下
-
-ok:执行命令,但依次询问
find /home/ -empty -ok mv {} / \;
:在/home目录下查找空的普通文件,然后依次询问是否执行mv命令将它们移动到根目录下
示例:
find / -name "*.jpg"
通过这些命令,可以高效地在Linux系统中查找文件。无论是快速定位文件位置,还是深入搜索文件内容,这些工具一般都能满足需求。