Linux文件管理03 文件搜索命令

文件搜索命令 locate

1
2
3
4
5
6
7
8
9
locate 文件名
#在后台数据库中按文件名搜索,搜索速度更快
/var/lib/mlocate (保存的搜索数据库)
#locate 命令所搜索的后台数据库
#数据库不是实时的,更新频率大概一天更新一次
updatedb
#更新数据库

对于新建的文件,由于数据库没有更新,使用locate不能查到。可以使用 updatedb强制更新数据库后即可查到。
可使用 locate locate搜索locate相关文件,可看到locate数据库。
在不同linux中,该数据库名字稍微不同,例如,locatedb、slocate、mlocate。

缺点:只能按照文件名进行搜索,但常用。

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
touch /root/cangls
touch /tmp/cangls
updatedb
locate cangls
#显示为 /root/cangls
#只有一条,而/tmp下的cangls没有显示出来
#原因在于locate搜索遵循配置文件 `/etc/updatedb.conf`
#在PRUNEPATHS 中配置了/tmp/目录不进行搜索。所以没有进行查找
/etc/updatedb.conf 配置文件
PRUNE_BIND_MOUNTS = "yes"
#开启搜索限制,yes为后面三项都生效。no为 后面三项都不生效
PRUNEFS =
#搜索时,不搜索的文件系统
PRUNENAMES =
#搜索时,不搜索的文件类型
PRUNEPATHS =
#搜索时,不搜索的路径


文件搜索命令 find

.表示当前目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
find [搜索范围][搜索条件]
#搜索文件
find /home -name 文件名
# find搜索默认是完全匹配
# 避免大范围的搜索,会非常浪费系统资源
# find是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
find /home -name "[12]*"
find /home -name "test[12]"
#要加引号
*匹配任意内容
?匹配任意一个字符
[]匹配任意一个中括号内的字符
find /home -mtime +10 在home目录下,查找10天前修改的文件
find /home -mtime 10 在home目录下,查找10天前当天修改的文件
find . -mtime -10 在当前目录下,查找10天内修改的文件
# atime 文件访问时间
# ctime 改变文件属性
# mtime 修改文件内容
find . -type f
#列出文件
find /root -iname test
# 不区分要搜索的test大小写格式
find /root -user root
# -user 按文件所有者搜索
# 搜索root目录下的所有属于root用户的文件
find /root -nouser
#没有所属者的文件,liunx中,每个文件都有所属者,如果没有,那么一般都是垃圾文件,但还是有特例的,比如内核产生的文件,就没有所属者,一般在proc和sys目录下;还有外来文件,也就是U盘拷入的文件也会忽略所有者。
find 目录 -size 25k
# 查找文件大小是25KB的文件
# 注意:文件大小用小写k和大写M
# -25k 小于25k
# 25k 等于25k
# +25k 大于25k
find . -size 25M
# 查询当前目录文件大小是25M的文件
find /etc -size +20k -a -size -50k
# 查找/etc下大于20k并且小于50k的文件
# -a and,逻辑与,两个条件都满足
# -o or,逻辑或,两个条件满足一个即可
find . -type f -perm 644 -exec ls -l {} \;
# 查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find /etc -size +20k -a -size -50k -exec ls -lh {} \;
-exec {} \;
# 固定格式,表示直接对前面的搜索结果进行后面的命令处理
# 注意,{}和\之间有空格,结尾有分号
find . -inum 262422
# 查找inode是262422的文件
# -inum 查询指定i节点的文件


字符串搜索命令 grep

全目录全文搜索

1
2
3
4
5
6
7
8
9
10
11
grep [选项] 字符串 文件名
# 在文件中匹配符合条件的字条串
# 字符串使用 "" 包围,结果为行记录
-i 忽略大小写
-v 排除指定字符串/取反
-n 显示行号
-r 递归
grep apple fruitlist.txt
grep -i apple fruitlist.txt #忽略大小写
grep -nr apple * #搜索目录里所有文件,包括子目录,并且在结果中显示行号


find命令和grep命令的区别

find:在 系统 中搜索符合条件的 文件名,使用 通配符(完全)匹配
grep:在 文件 当中搜索符合条件的 字符串,使用 正则表达式 (包含)匹配

通配符(完全)匹配:搜索文件名
正则表达式 (包含)匹配:搜索文件中的数据