Linux基础知识之查找和处理文件which&locate&find
查找和处理文件常用工具:which、locate、find,当然还有图形化工具。
一、which 仅查寻系统当中可执行的文件,
[root@desktop23 ~]# which passwd 没有查寻到/etc/passwd
一般使用查寻命令的绝对路径。建议在写脚本时,使用它来查寻绝对路径。
二、locate 基于系统数据库查询。
★ 查询路径(指向系统中的文件)的预构建数据库
• 数据库必须由管理员进行更新
• 将搜索完整路径,而不是只搜索文件名
★ 只能搜索用户具有读取和执行权限的目录
[student@desktop23 ~]$ locate iptables.h
[student@desktop23 ~]$ locate passwd (它是一个模糊查找,速度很快)
[student@desktop23 ~]$ touch xmws.txt
[student@desktop23 ~]$ locate xmws.txt 查不到!
[root@desktop23 ~]# updatedb 即刻更新数据库。
[student@desktop23 ~]$ locate xmws.txt
每天都要手动更新系统数据库吗?
[root@desktop23 ~]# vim /etc/cron.daily/mlocate.cron 凌晨4点02分。
★ 有用的选项
-i 用于执行不区分大小写的搜索
-n X 仅列出前 X 个匹配项
[student@desktop23 ~]$ locate -n 5 passwd 仅搜索前5个匹配项
-e dir1,dir2… 在指定的目录中搜索
三、find [dir1 …] [criteria… 组] [action…]
可以针对找到的文件执行命令
只能搜索用户具有读取和执行权限的目录
1.实时搜索,不用基于数据库
速度较慢,但比locate更准确
如果未给定任何起始目录,则会使用CWD
如果未给定任何条件,则所有文件均匹配。如:
[root@desktop23 ~]# find /
[root@desktop23 ~]# find .
2.基本示例
[root@desktop23 ~]# find -name snow.png
在当前目录中搜索名为 snow.png 的文件
[root@desktop23 ~]# find -iname snow.png
在当前目录中搜索(不区分大小写)名为:
snow.png、Snow.png、SNOW.PNG等文件
[root@desktop23 ~]# find / -name ‘*.txt’
在系统的任意位置搜索以.txt结尾的文件
通配符应当始终加引号,以避免出现异常结果
[root@desktop23 ~]# find /etc -name ‘*pass*’
在 /etc/ 中搜索在其名称中包含 pass 的文件
[root@desktop23 ~]# find /home -user joe -group joe
在 /home/ 中搜索由用户 joe 和组 joe 所有的文件。
默认情况下,都是逻辑and关系,2者都必须符合。
3.也可以用 OR 连接或者用 -o 或 -not 求反
也可以使用括号来确定逻辑顺序,但在 bash中必须忽略
[root@desktop23 ~]# find -user joe -not -group joe
[root@desktop23 ~]# find -user joe -o -user jane 或者关系
[root@desktop23 ~]# find -not \( -user joe -o -user jane \)
拥有人不是joe或者不是jane
4.可以按文件拥有人名称或 ID 搜索
[root@desktop23 ~]# find / -user student -o -uid 500
5.可以按文件的权限搜索
[root@desktop23 ~]# find -perm 755
[root@desktop23 ~]# find -perm +222
如果任意一个人可以写入,则匹配
[root@desktop23 ~]# find -perm -222
如果每个人都可以写入,则匹配
[root@desktop23 ~]# find -perm -002
如果其他人可以写入,则匹配
6.find和数字条件
[root@desktop23 ~]# find -size 10M 大小等于10MB的文件
[root@desktop23 ~]# find -size +10M 大小超过10MB的文件
[root@desktop23 ~]# find -size -10M 大小不足10MB的文件
还可以使用其他修饰符,例如K代表KB,G代表GB等
7.find和文件访问时间
-atime,上次读取文件时
-mtime,上次更改文件数据时
-ctime,上次更改文件数据或元数据时
这3个时间很重要,特别是在集群应用中。如:
1.脑分裂;
2.web服务器noatime,可提高服务器性能10%
给定值以天数为单位
[root@desktop23 ~]# stat test.txt
[root@desktop23 ~]# find /tmp -ctime +10 文件更改超过10天前
可以使用分钟值
-amin
-mmin
-cmin
[root@desktop23 ~]# find /etc –amin -60 一小时以内。
8.find可以针对找到的文件执行命令
命令前必须带有 -exec 或 -ok
-ok 将在对每个文件执行操作之前提示
命令必须以 Space\;结尾
可以使用{}作为文件名占位符
示例列举:
备份配置文件,添加 .orig 扩展名
[root@desktop23 ~]# find -name‘*.conf’-exec cp {} {}.orig /;
提示删除 Joe 的超过3天的tmp文件
[root@desktop23 ~]# find /tmp -ctime +3 -user joe -ok rm {} \;
修正主目录中其他人可写入的文件
[root@desktop23 ~]# find ~ -perm -002 -exec chmod o-w {} \;
生成 /home/ 中所有目录的 ls –l 样式列表
[root@desktop23 ~]# find /home -type d -ls
查找以.sh结尾但任何人都无法执行的文件。对于每个文件,询问是否将其变为可由每个人执行的文件
[root@desktop23 ~]# find -not -perm +111 -name ‘*.sh’ -ok chmod 755 {} \;