设为首页 收藏本站
查看: 273|回复: 0

[经验分享] 文件查找命令find

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-1 08:59:53 | 显示全部楼层 |阅读模式
文件查找:在文件系统上查找符合条件的文件的过程

Linux系统上常用的两个文件查找工具:
locate:
依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务)生成的。
必要时,可手动执行updatedb命令
优点:速度快
缺点:非实时查找、模糊查找
find:
通过遍历指定的目标目录,实时查找符合指定实属性的文件
优点:实时查找、精确匹配
缺点:遍历文件系统、速度慢


find命令

格式:
find [OPTIONS] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径
查找条件:默认为指定路径下的所有文件
处理动作:默认显示到屏幕


查找条件:
根据文件名查找:
-name  "文件名",文件名支持使用globbing
# find /etc/ -name "passwd*"#在/etc目录下搜索名为passwd的文件
-iname  "文件名" 不区分大小写
-regex 'PATTERN',以PATTERN匹配整个文件路径字符串,而不仅仅是文件名


根据文件的属主或属组查找:
-user USERNAME:  根据文件属主查找
-group GROUPNAME:  根据文件属组查找


根据文件的属主或属组的ID号查找:
-uid  UID:  根据指定的UID查找
-gid  GID:  根据指定的GID查找


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


组合查找条件:
组合多个条件查找运用逻辑运算:与、或、非
:-a  查找条件1 -a 查找条件2 -a ... (-a可省略)
所有条件必须同时满足
# find /tmp/ -nouser -a -name "*centos*"

:-o  查找条件1 -o 查找条件2 -o ...
满足其中一个条件即可
# find /tmp/ -name "*centos*" -o -uid 500

:-not or !
-not 查找条件不满足指定条件的(相反)
# find / -not -user root | xargs ls -ld
# find / ! -user root | xargs ls -ld


wKiom1XkjPHygebFAACSPxaw514440.jpg

与: 重叠部分:既属于A,又属于B
或: A+B-重叠部分(减去与的部分)
非: 除A之外,或除B之外

!A  -o !B
=  
!(  A -a B )
!A  -a !B
=  
!( A -o B )

实例1:
//查找/tmp/下非php与非txt结尾的文件
# find /tmp -not -name "*php" -a -not -name"*txt"

//查找/tmp/下非php或非txt结尾的文件
# find /tmp -not \( -name "*.php" -o -name"*.txt" \)


根据文件类型查找:
-type 文件类型
f  普通文件
d  目录文件
l  符号链接文件
b  块设备
c  字符设备文件
p  命名管道文件
s  套接字文件


根据文件大小查找:
-size [+|-] #UNIT
常用单位有:k,M,G
不带+|- 表示精确匹配

实例1:

//查找/etc目录下2k的文件
#UNIT: #-1 < x <= #
find /etc/ -size 2k -exec ls -lh {} \;
(2k: 匹配范围是1.1k - 1.9k)

//查找/etc目录下-2k的文件
-#UNIT: x <= #-1
find /etc/ -size -2k -exec ls -lh {} \;
(-2k: 匹配范围是小于等于1k)

//查找/etc目录下+2k的文件
+#UNIT: x >#
find /etc/ -size +2k -exec ls -lh {} \;
(+2k: 匹配范围是大于2.1k以上)


根据时间戳查找:(过去的某个时间节点)
以“天”为单位
-atime [+|-]#: 根据访问时间查找
-mtime [+|-]#: 根据修改时间查找
-ctime [+|-]#:  根据改变时间查找

实例2:
//查找/etc目录下访问时间为3天的文件
#: # =< x < #+1
find /etc/ -atime 3 -exec stat {} \;
(3: 匹配范围是从3天 - 4天之间)

//查找/etc目录下3天之内访问过的文件
-#: x < #
find /etc/ -atime -3 -exec stat {} \;
(-3: 匹配范围是小于3天之内的)

//查找/etc目录下3天以前访问过的文件
+#:# x >= #+1
find /etc/ -atime +3 -exec stat {} \;
(+3: 匹配范围是等于或大于3天以上的)

以“分钟”为单位
-amin [+|-]#:  根据访问时间查找
-mmin [+|-]#:  根据修改时间查找
-cmin [+|-]#:  根据改变时间查找

find /tmp/ -amin -5 查找范围是小于5分钟内
find /tmp/ -mmin +5 查找范围是大于或等于5分钟以上


根据权限查找:
-perm [+|-]MODE
MODE: 不带+|- 表示与MODE精确匹配
find /etc/ -perm 644 查找权限为644的文件

+MODE: 任何一类用户的权限只要能包括对其指定的任何一位权限即可
find /etc/ -perm +555 任何一类用户有任何一位权限即匹配

-MODE: 每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件。
find /etc/ -perm -111 -ls 查找所有人都有执行权限
find /etc/ -perm -222 -ls 查找所有人都有写权限
find /etc/ -perm -666 -ls 查找所有人都有读和写权限

权限计算:
3=2+1
4=read
5=4+1
6=4+2
7=4+2+1

处理动作:
-print  默认动作:打印至屏幕
-ls  显示找到的文件的详细属性
-exec COMMAND {} \; 对找到的文件执行期望的操作
删除/tmp下没有属组的文件
find /tmp -nogroup -a -type f -exec rm {} \;
-ok        COMMAND {}\;  执行命令之前提示确认

注意:
find命令会一次性找到所有符合条件的文件,并一同传递给后面的命令;但有些命令不能接收过长的参数
解决办法: find | xargs COMMAND


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-108140-1-1.html 上篇帖子: bash的环境变量配置文件 下篇帖子: VI编辑器使用总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表