Linux中的文件搜索命令
文件搜索命令:locate
搜索速度非常快,而find命令比较耗费资源,会根目录开始把所有的搜索一遍,locate命令只能搜索文件名。
locate 文件名
在后台数据库中按文件名搜索,搜索速度更快。
locate命令是在/var/lib/mlocate中搜索的后台数据库,大概每天数据库更新一次,如果没有更新今天的,则无法搜索到,需要等到它更新完成。
优点是快,但缺点是只能按照文件名搜索。
updatedb
强制更新locate数据库。
/etc/updatedb.conf配置文件,locate搜索命令是通过这个规则的,可以通过vi /etc/updatedb.conf命令查看内容。
-
PRUNE_BIND_MOUNTS="yes" 开启搜索限制
-
PRUNEFS= 搜索时,不搜索的文件系统
-
PRUNENAMES= 搜索时,不搜索的文件类型
-
PRUNEPATHS= 搜索时,不搜索的路径
例1:locate five命令,搜索名为five的目录
例2:locate install.log命令,搜索名为install.log的文件。
例3:updatedb命令,可以看到临时创建了一个名为test.log的文件,但是使用locate命令无法搜索到,因为数据库没有更新,所以使用updatedb命令强制更新数据库,就能够成功搜索到结果。
命令搜索命令:whereis与which
whereis 命令名
搜索某个系统命令所在路径及帮助文档所在位置,不能搜索文件。[whoami]查看属于谁。[whatis 命令名]查看该命令是做什么的。[whereis -b 命令名][whereis -m 命令名]
选项:
-b 只查找可执行文件
-m 只查找帮助文件
which 命令名
能看到命令的所在路径,及命令的别名
例1:whereis ls命令,查找ls命令所在路径及帮助文档的所在路径。
例2:whereis -b ls命令,查找ls命令的课执行文件所在目录。
例3:which ls命令,查看ls命令所在路径及别名。
文件搜索命令:find
语法:
find [搜索范围] [搜索条件]
该命令用来搜索文件。
如[find / -name install.log]命令,但使用该命令时应该避免大范围搜索,因为会非常耗费系统资源。find是在系统当中搜索符合条件的文件名,如果需要匹配,则使用通配符匹配,通配符完全匹配。
Linux中的通配符
-
星号(*):匹配任意内容
-
问号(?):匹配任意一个字符
-
中括号([]):匹配任意一个中括号内的字符
其他
-
[find /root -iname 文件名] 不区分大小写
-
[find /root -user 所有者名] 按照所有者进行搜索
-
[find /root -nouser] 用来搜索没有所有者的文件,一般是垃圾文件,不过也有特殊情况。
-
[find /root -mtime +10] 查找10天前修改的文件,其中"/root"指的是搜索范围。
-
-10 10天内修改文件
-
10 10天当天修改的文件
-
+10 10天前修改的文件
-
atime 文件访问时间
-
ctime 改变文件属性
-
mtime 修改文件内容
-
-
[find /root -size 25k] 查找文件大小是25KB的文件,查找兆要用M,其中"/root"指的是搜索范围。
-
-25k 小于25KB的文件
-
25k 等于25KB的文件
-
+25k 大于25KB的文件
-
-
[find /root -inum 26244] 查找i节点是262422的文件,其中"/root"指的是搜索范围。
-
[find /etc -size +20k -a -size -50k] 查找/etc/目录下大于20KB并且大于50KB的文件
-
-a and,逻辑与,两个条件都满足
-
-o or,逻辑或,两个条件满足一个即可
-
-
[find /etc -size +20k -a -size -50k -exec ls -lh {} \;] 查找/ect/目录下,大于20KB并且大于50KB的文件,并显示详细信息。[-exec 命令 {} \;]这是标准格式,是处理第一个命令的结果。
例1:find /root -name install.log命令,在root目录下查找名为install.log的文件,其中"/root"是要查找的目录,"-name"表示按文件名查找,“install.log"表示要查找的文件名。
例2:find /root -user root命令,在root目录下查找文件所有者是root的文件。
例3:find /root -mtime +10命令,在root目录下查找最后修改时间是10天之前的文件
可以执行exec命令查看具体日期
例4:find /root -size -10k命令,查找root目录文件大小小于10k的文件
例5:find /root -size +10k -a -size -60k命令,在root目录下查找大于10k小于60k的文件
查看文件具体大小:
例6:find /etc -size +20k -a -size -50k -exec ls -lh {} \;命令,查找/ect/目录下,大于20KB并且大于50KB的文件,并显示详细信息 。
字符串搜索命令:grep
grep [选项] 字符串 文件名
在文件当中匹配符合条件的字符串
选项:
-i 忽略大小写
-v 排除指定字符串
find命令与grep命令的区别
-
find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
-
grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。
例1:grep "ab" install.log命令,在install.log文件中查找"ab”的内容。
例2:grep -v "ab" install.log命令,在install.log文件中搜索除“ab"字符串外的所有字符串。