开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

解析find用法

简介:
+关注继续查看

一,在linux上有两个比较常用的搜索工具

1,locate :模糊查找,速度快,依赖自身的的数据库,非实时查找,比较少用。

2,find:精确,实时查找,速度稍微慢点。

二,find语法 find [-H] [-L] [-P] [path...] [expression]

其中,'-H' '-L' '-P'三个选项主要是用来处理符号连接,'-H'表示只跟随命令行中指定的符号连接,'-L'表示跟随所有的符号连接,'-P'是默认的选项,表示不跟随符号连接。这三个选项很少用,因此find  的语法简化成   find   路径   表达式,  表达式由查找条件和处理动作组成。默认路径是当前所在的目录

1, 查找条件:

(1)-name filename(可以使用通配符*,使用通配符时用双引号引起来)

查找当前系统上passwd的文件名

find / -name passwd

(2)-iname 忽视查找文件名的大小写

查找当前系统上PASSWD和passwd的文件

find / -iname passwd

(3)-regex "patern" 使用基本正则表达式  给出的正则表达式必须要匹配完整的文件路径

find / -regex "find" 找不到/usr/bin/find

正确用法find / -regex ".*find"或者更精确一点find / -regex ".*/find"

(4)-iregex 忽然大小写

(5)-user username

查找文件的属主是user1的

find / -user user1

(6)-group groupname

查找当前系统属组是nobody的文件

find / -group nobody

(7)-uid  usernum

查找文件的属主uid为 500

find / -uid 500

(8)-gid  group

(9)-nouser

查找当前系统没有属主的文件

find / -nouser  

(10)-nogroup

2,多条件查找,条件间逻辑关系:

(1)-a(与)  同时满足两个条件

查找/etc文件名为passwd且属主为root

find /etc/ -name "passwd" -user root(默认是 -a 可以省略)

(2)-o(或)

查找/etc文件名为passwd或属主为user

find /etc/ -name "passwd"  -o -user root(-o不能省略)

(3)! (非)或-not

查找 /etc文件名包含passwd 或者 属主不是root的文件

find /etc/ -name "passwd*"  -o  -not -user root

三,-type 根据文件类型

(1)f 正规文件

查找当前系统文件名passwd且是普通文件

find / -name passwd -a -type f

(2)d 目录

(3)l 链接文件

(4)b 块设备

(5)c 字符设备

(6)p 数据传送文件

(7)s socket设备

4, -size (k|M|G)默认单位是字节

(1)+4M(大于4M)

查找文件大小为大于4M

find /boot  -size +4M

(2)-4M(小于4M但是3M--4M不在这个范围)

(3)4M(查找3M--4M)

5,day(单位为天)

(1)-atime [+/-] (访问时间)

查找第3天被访问过的文件

find / -atime 3

查找最近3天访问过的文件

find / -atime -3

查找3天之前被访问的文件

find / -atime +3

(2)-mtime(修改时间)

(3)-ctime(改变时间)

6, minute(单位分钟)

(1)-amin

(2)-mmin

(3)-cmin

7,权限-perm

(1)mode  查找档案权限刚好等于mode

查找 档案权限为222

find / -perm 222

(2)/mode  模糊匹配(只要满足其中一个就会匹配到)

查找user权限为7或group权限为7或others权限为7的

find / -perm  /777

(3)-mode  必须要全部包括mode权限(比mode大的也会被匹配到)

查找档案权限大于777

find / -perm -777

8,  处理动作:默认是 -print把结果打印到屏幕上

-exec  command {} \;(将前面查找的结果输入给command命令,{}表示占位符)

查找当前没有属主和属组的文件,将它们属主,组改成root

find / -nouser -a -nogroup -exec chown root:root {} \;

9,find与xargs将find查找到的结果用管道输入给xarg

find |xargs command

查找一个文件为PASSWD的文件并删除

find / -name PASSWD |xargs rm -f

在/tmp下找到文件名是core的文件,自动切换到新行,并且删除。

find  /tmp -name core  -type f -print  |xargs /bin/rm -f

在/tmp下找到文件名是core的文件,不自动切换到新行,并且删除。

find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

读取/etc/passwd里的用户并用echo显示

cut -d: -f1 </etc/passwd |sort |xargs echo

exec 后面跟可执行文件,如果在脚本里写exec /sbin/halt 表示会在当前shell执行,不会在当前shell的子shell中执行。

10,查看文件没有属主,属组 find / -nouser -nogroup (-a可以省略)

11,查找没有属主或属组的 find / -nouser -o nogruop

12, ind ./ -type f -name '*.php'  可遍历目录
13, find ./ -maxdepth 1 -name '*.php' 不遍历,只寻找一级目录

14,查看db_summba_site开头的文件

find /cloud/databackup/databasebakup/   -mtime +30 -a -name  'db_summba_site*'  |xargs ls










本文转自 deng304749970 51CTO博客,原文链接:http://blog.51cto.com/damondeng/903149,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
find示例
找到文件inode为31467125 并重命名。 find . -type f -inum 31467125 -exec mv {} new_name.html \; 找到指定inode并删除之 find . -type f -inum 314167125 -delete 找到相关文件,并删除;使用-print0和-0参数,避免某些文件中有包含有分隔符(如test me)而错误删除文件。
397 0
find命令
-amin n 查找系统中最后n分钟访问的文件eg     find / -amin -2 # 查找在系统中最后2分钟访问的文件--------------------------------------------------------------------------cmin...
354 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载