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:当前目录的所有文件中,文件的三段权限都要有执行权限;
未完待续