linux下find和locate文件查找命令详解

文件查找命令:

locate命令特点

 1.非实时,模糊匹配,查找是根据全系统文件数据库进行的;

 2.updatedb, 手动更新生成文件数据库,默认第天凌晨4点02分更新数据库

 3.速度快

find命令特点:

1.实时

2.精确

3.支持众多查找标准

4.搜索指定目录中的所有文件完成查找,但速度慢;

 格式: find 查找路径 匹配标准 查找到以后的处理运作

  查找路径:默认为当前目录

  匹配标准:默认为指定路径下的所有文件

  处理运作:默认为显示


  匹配标准:

-name '文件名':对文件名作精确匹配,可用文件名通配表示:

-iname '文件名': 文件名匹配时不区分大小写

-regex 模式:基于正则表达式进行文件名匹配

-user 用户名: 根据属主查找

-group 组名: 根据属组查找

-uid UID: 根据UID查找

-gid GID: 根据GID查找

-nouser:查找没有属主的文件

-nogroup: 查找没有属组的文件

 -type: f d c l p s b 根据文件类型查找

-size:[+|-]k/M/G 根文件大小查找

-mtime 修改天数 例如 7,代表7天前那一天时刻修改的所有文件

-ctime 改变天数 例如 -7,代表7天之内改变的所有文件

-atime 访问天数 例如 +7,代表7天之前所有访问过的文件

-mmin 修改分钟 例如 7,代表7分钟前那一分时刻修改的所有文件

-cmin 改变分钟 例如 -7,代表7分钟之内改变的所有文件

-amin 访问分钟 例如 +7,代表7分钟之前访问的所有文件

-perm 模式:精确匹配

   /模式: 任意一位匹配即可

   -模式: 完全包含此模式权限才符合条件

组合条件:-a 与 ,-o 或, -not 非

-ls:相当于ls -l显示文件的详细信息

-ok 命令 {} \; 每次操作需要与用户交互

-exec 命令 {} \; 无需交互

xargs命令 :无需 {} \; 但需与管道 | 一起使用

实例说明:

1、查找/var/spool目录下属主为root并且属组为mail的所有文件;

find /var/spool -user root -group mail

2、查找/usr目录下不属于root,tom,或user1的文件;

find /usr -not -user root -a -not -user tom -a -not -user user1

find /usr -not \( -user root -o -user tom -o -user user1 \)

3、查找/etc目录下最近2天内内容修改过且不属于root及tom用户的文件;

find /etc -mtime -2 -not \ ( -user root -o -user tom \)

find /etc -mtime -2 -not -user root -a -not -user tom

4、查找当前系统上没有属主或属组且最近30分钟内曾被访问过的文件,并将其属主属组均修改为root;

find / \( -nouser -o -nogroup \) -a -amin -30 -exec chown root:root {} \; 


5、查找/etc目录下大于10M的文件,并将其文件名写入/tmp/hugefiles文件中;

find /etc -size +10M >> /tmp/hugefiles

6、查找/bin目录下所有用户都没有写权限的文件,显示出其详细信息;

find /bin -not -perm /222 -ls

7.查找当前系统UID大于1000的所有文件

find / -uid +1000

find / -uid +1000 >> /tmp/uidfiles

find / -uid +1000 -exec echo {} >> /tmp/uidfiles \;

find / -uid +1000 | xargs echo >> /tmp/uidfiles