您的位置:首页 > 运维架构 > Linux

find命令详解(1)

2017-09-25 11:40 281 查看
find命令

find作为一个文件查找命令,与locate不同的是,它是一个实时查找命令,而locate则依赖于事先建好的数据库。而数据库的建立又十分耗费系统资源;locate命令虽然在查找速度上优于find,但在工作应用时有可能不能查到短时间内新建或者改变的文件,故个人认为二者各有优劣,使用时依照情况的不同自己斟酌使用。
本文中部分为马哥Linux视频中的课程笔记,且虽然标题是find命令详解,但由于本人也处于初学阶段,知之尚浅,故不能保证所写文章能够详细叙述此命令精髓,望诸位前辈能够指出错误及不足。

find命令的工作模式

find命令是一个实时查找工具,它是通过遍历指定起始路径下的文件系统层级结构完成查找的;

例如,我们直接在当前用户目录下使用如下图(命令效果效果因人而异)





上图是本人的root目录的部分文件,可以看到find命令将当前路径下的所有文件路径全部了显示出来。

find命令的用法

find [选项] [查找起始路径] [查找条件] [处理动作]
从刚刚的例子可以看出,find后的这四种元素都可省略

查找起始路径:指定具体的搜索目标文件的起始路径,如不指定,则默认指定命令执行时用户所在的路径为起始路径。

查找条件:指定查找的目标文件的限定条件,限定条件可以指定为文件名、文件大小、文件类型、文件的从属关系、文件的权限等,如不指定,则为指定的查找起始路径下的所有文件。

处理动作:对符合查找条件的文件做出相应的操作,例如,删除操作。默认输出至标准输出。

find命令查找条件详述:

按照文件名查找:
-name "pattern":pattern为要查找的文件名
-iname "pattern":与-name用法一样,只不过忽略大小写

上述两个命令支持glob风格的通配符,例如:

*,?,[],[^]

-regex pattern:基于正则表达式模式查找文件,匹配的是整个路径,而非基名;

按照文件从属关系查找:
-user USERNAME:-user后指定用户名,查找属主为所键入的用户名的所有文件

-group GROUP:-group后为指定用户组,查找属组为所键入的用户组的所有文件

-uid UID:-uid后为指定的UID,查找属主为所键入的UID的所有文件

-gid GID:-gid后为指定的GID,查找属组为所键入的GID的所有文件

-nouser:顾名思义,此选项查找没有属主的文件

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

按照文件类型查找:
-type TYPE:

TYPE具体类型:

f:普通文件

d:目录文件

l:符号链接文件

b:块设备文件

c:字符设备文件
p:管道文件

s:套接字文件

匹配条件时也可以使用逻辑运算进行更加复杂一些的匹配
与:-a,默认组合逻辑;
或:-o or:
非:-not,!

按照时间戳查找:
以“天”为单位

-atime: [+|-]#,#为天数;
-mtime:

-ctime:

选项后直接跟天数#表示具体某一天,例如 -atime 7:含义为7天前的那一天被访问过的文件。

选项后跟+#表示在#天之前(不包含第#天)的所有时间,例如 -mtime +7:含义为在过去的7天之前(不包含第7天)被修改过的文件。

选项后跟-#表示在过去#天之内,例如:-ctime -7:含义为过去的7天之前改变文件状态的文件。

以“分钟”为单位:
-amin:
-mmin:
-cmin:

因使用方法与以“天”为单位的使用方法相似,在此不进行赘述。

按照权限查找:
-perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;文件的9位权限存在“或”关系;
例如:-perm /222:当前目录的所有文件中,文件的三段权限中至少有一段权限有写权限;

-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件既满足;文件的9位权限存在“与”关系;
例如:-perm -111:当前目录的所有文件中,文件的三段权限都要有执行权限;

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux find 文件管理