find:实时查找工具,根据我们指定的内容或者条件在系统上进行实时查找,比locate在实际场景中用的多得多的多
具体用法:find 查找路径 查找条件 找到之后执行的动作
例如: find . -name “baoding.log” -print (按名字查找到baoding.log文件后输出到屏幕上,也可以通配符查找)
查找条件
-name 可以使用通配符 比如 * ? [] [^]
find . -name “????.log”
-iname 文件名称忽略大小写
find . -iname “baoding.log”
-inum n 根据inode来查找 (基本不用)
find . -inum 1179826
-samefile name 查找相同inode号的文件,其实等于查找硬链接(基本不用)
-links n 根据链接数
find . -links 2
-regex 使用正则表达式的方法匹配文件名
find /etc/ -regex “.*\.sh$”
根据属主和属组来查找
-user -group -uid -gid
-nouser 查找没有属主的文件或者目录
-nogroup 查找没有属组的文件或者目录
测试方法:新建一个ash用户,然后把一个文件的属主和属组改成ash
然后再删除ash用户
根据文件类型:
-type f 普通文件
d 目录
l 链接文件
s 套接字文件
b 块设备
c 字符设备
p 管道
根据文件大小来查找
-size + 大于多少的文件
k M G
-size – 小于多少的文件
k M G
-size 等于多少的文件
k M G
根据时间来查找
-mtime +7 7天以前的 从第8天开始
-mtime 7 当前时间往前推第7天
-mtime -7 当前时间往前推第7天以内
根据权限来查找(基本不用的)
-perm 755 精确匹配有755权限的文件
-perm -222 必须包含全部的222权限才可以
-perm +222(CentOS 6)
/222(CentOS 7)
只要有一个比如说属主 属组或者其他人有一个拥有写权限即可
组合条件:
与:-a
或:-o
非:-not, !
不是p 或者 不是Q == 不是(P和Q)
不是P 并且 不是Q == 不是 (P或者Q)
同时两个条件 find . -user nanjing -type f
find -not -user joe -o -not -user jane
find . -user nanjing -o -group 1012
find . -user nanjing -type f
使用最频繁的是
-name 通配符
-type f普通文件
d目录
处理动作 -print 打印到屏幕上
-ls 打印到屏幕上 类似于ls -l
-delete 删除操作 只删除文件,不能删除非空目录
-fls file 查找到的文件信息保存到指定的文本中
-ok 在执行后面的动作之前会提示你是否需要执行(交互式的)
-exec CMD {} \; 执行后面的命令 {} 表示前面find出的结果 \; 固定用法
find 出来之后 -exec ls (一百万个文件) 删不了的
xargs 将前面的find的查找结果分批次给后面的命令作为执行的参数,比如
find / -name “*” | xargs ls
避免前面的find查找文件过多造成后面的命令不能执行这种情况
参数过多
示例:执行删除操作
find /tmp/hebei/ -name “*.log” | xargs rm -rf
删除前先执行查看操作:
find /tmp/hebei/ -name “*.log” | xargs ls -l
find /tmp/ \( -not -user root -a -not -name “f*” \)
多个条件要使用\(\) 不能使用“”
find /etc/ -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print
&& 真 ||
查找/etc/下面所有的目录
当查找到/etc/sane.d的时候 前面的条件为真(’/etc/sane.d’ -a -prune)
或后面的条件就不会执行(-name “*.conf”)
当查找到其他目录的时候 前面的条件为假 (’/etc/sane.d’ -a -prune)
或后面的会执行 (-name “*.conf”)
a && b || c
a 和b 都为真的时候 则 a && b 为真,然后后面c就不会执行
a 或者b 有一个为假,则 a && b 为假,然后后面的c就会执行
查找目录是 /etc/
要求排除 /etc/sane.d
查找*.conf 文件
find -name “*.conf” -exec cp {} {}.orig \;
备份配置文件,添加.orig这个扩展名
find /tmp -ctime +3 -user joe -ok rm {} \;
提示删除存在时间超过3天以上的joe的临时文件
find ~ -perm -002 -exec chmod o-w {} \;
在你的主目录中寻找可被其它用户写入的文件
ind /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
find /home –type d -ls
生产使用方式:
1 删除 find /logs/ -name “*.log” -mtime +7 | xargs rm 监控告警 (磁盘告警)
find /logs/ -name “*.log” -size +20G | xargs rm 应用日志
2 备份 find /apps/data/ -name “*” -exec cp {} /backup/ \;
3 查找 find /apps/ -name “*.log” | xargs grep -i “error” 日志里面找错误
原创文章,作者:fsy,如若转载,请注明出处:http://www.178linux.com/73111
评论列表(1条)
总结了find命令的详细用法,内容写的很不错,需要注意一下排版