Linux文件查找详解
我们之前学过的grep、egrep以及fgrep命令是Linux的文本查找命令,只是单纯地匹配字符串的命令,而不是文件查找命令。
·文件查找的常用命令
1,locate:
locate是在全系统查找文件的命令,但是locate的查找是非实时的、非精确的,进行模糊匹配的一种查找方式,因为此种文件查找的方式是根据全系统文件数据库进行的,而该数据库只有在每天晚上才会更新,因此是非实时查找,但是这个文件数据库我们可以手动生成,为了使我们可以实时的查找文件,我们可以手动更新该数据库。
生成文件数据库的命令:updatedb
优点:locate命令执行速度快
2,find:
find命令支持实时查找,精确查找,而且支持多种查找标准,但是find命令的执行速度慢,这是因为find命令是遍历指定目录下的所有文件进行查找,所以执行速度慢。
用法格式:
->find 查找路径 查找标准 查找以后的处理动作
查找路径可以省略,省略以后就表示默认查找当前目录
查找标准默认为查找指定路径下的所有文件
查找处理动作(action),默认为输出至标准输出
(1)查找(匹配)标准(选项):
->-name(严格区分大小写查找) 'filename':对文件名做精确匹配
支持文件名通配
*->用来实现匹配任意长度的任意字符
?->用来实现匹配单个字符
[]->用来实现匹配指定范围内的任意单个字符
->-iname:文件名匹配不区分大小写
->-regex:基于正则表达式进行文件名查找
格式:-regex pattern
->-user:根据文件的属主来进行文件的查找
格式:-user username
->-group:根据文件的属组来进行文件的查找
格式:-group groupname
->-uid:根据uid查找,一旦某个用户被删除之后,此前所有属于这个用户的文件的属主将变为这个用户的id号
格式:-uid uid
->-gid:根据gid查找,一旦某个用户的属组被删除之后,此前所有属于这个用户基本组的文件的属组将变成这个用户的基本组id号
格式:-gid gid
->-nouser:查找没有属主的文件
->-type:根据文件类型来查找文件
f:普通文件
d:目录
c:字符设备
b:块设备
l:链接文件
p:管道设备
s:套接字设备
->-size:根据文件大小来查找文件
[+|-]#:+表示大于,-表示小于,#表示数值大小(不加+|-表示等于),只写#表示精确查找。
k表示KB
M表示MB
G表示GB
大小匹配的法则:精确查找时会有误差,但是误差一般小于1,且小于所要匹配的数值。
·组合条件查找,默认为逻辑与关系
->-a:逻辑与关系
->-o:逻辑或关系
->-not:逻辑非关系
练习:
1,查找/tmp目录下,不是目录且不是套接字类型的文件
2,查找/tmp/test目录下,属主不是user1,也不是user2的文件
·根据时间戳查找文件
时间为天数:
格式:
->-mtime [+|-]#:修改时间
->-ctime [+|-]#:改变时间
->-atime [+|-]#:访问时间
->#表示距离现在的第#天有动作,+#表示距离现在的第#天之前有动作,-#表示距离现在的第#天之后有动作
时间为分钟
格式:
->-mmin [+|-]#:修改时间
->-cmin [+|-]#:改变时间
->-amin [+|-]#:访问时间
->#表示距离现在的第#分钟有动作,+#表示距离现在的第#分钟之前有动作,-#表示距离现在的第#分钟之后有动作
·根据权限来查找
格式:
->-perm MODE:表示精确匹配
->-perm +MODE:三位权限任意一位匹配即满足条件
->-perm -MODE:文件权限能完全包含此MODE才符合条件
(2)查找以后的处理动作(action):
默认为-print(显示出来)
->-ls:类似于命令ls -l的形式显示每一个文件的详细信息
->-ok:-ok表示处理动作的每一步都需要用户确认
固定格式:-ok COMMAND {} \;
花括号表示的是前面find命令查找到的文件名
->-exec:-exec的处理动作不需要用户确认,一气呵成
固定格式:-exec COMMAND {} \;
练习:
1,查找/var目录下属主为root并且属组为mail的所有文件
2,查找/usr目录下不属于root、bin或student的文件
3,查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
4,查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为root
5,查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc/largefiles
xargs方法:
6,查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息