Linux查find命令详解
Linux查–find命令
⾸先,⼤家如果看到有什么不懂的地⽅,欢迎吐槽
我会在当天或者第⼆天及时回复,并且改进~~
find命令的格式
find pathname -options [ -print -exec -ok ...]
pathname #是find命令所查的⽬录路径,例如.表⽰当前⽬录,/表⽰根⽬录
-print #表⽰find命令将匹配的⽂件输出到标准输出中
-exec #表⽰find命令对匹配的⽂件执⾏该参数给出的shell命令。相应命令的形式为 ‘cmd’ {} \;
-ok #它的作⽤和-exec⼀样,只是需要⽤户交互,更安全
find命令的选项
-
name #按照⽂件名查⽂件
-perm #按照权限查⽂件
-prune #使find命令不在当前指定的⽬录中查,如果同时使⽤-depth选项,那么-prune将被find命令忽略find查命令的使用
-user #按照⽂件属主来查⽂件
-group #按照⽂件数组来查⽂件
-mtime -n +n #按照⽂件的更改时间来查⽂件
-n 表⽰从此刻算起,⽂件的更改是在n天以内
+n 表⽰⽂件的更改时间是在n天以前
find命令还有-atime和-ctime选项,和-mtime选项的时间规定类似
-nogroup #查⽆有效属组的⽂件,即该⽂件所属的组在/etc/groups中不存在
-nouser #查⽆有效属主的⽂件,即该⽂件的属主在/etc/passwd中不存在
-newer file1 ! file2 #查更改时间⽐file1新但⽐file2旧的⽂件
-type
b:表⽰块设备⽂件 block
d:表⽰⽬录 directory
c:表⽰字符设备⽂件 char
p:表⽰管道⽂件 pipe
l:表⽰符号链接⽂件 link
f:表⽰普通⽂件 file
-depth #在查⽂件时,⾸先查当前⽬录中的⽂件,然后再在其⼦⽬录中查
-fstype #表⽰查位于某⼀类型⽂件系统中的⽂件,这些⽂件系统类型通常可以在配置⽂件/etc/fstab中到,该配置⽂件中包含了本系统中有关⽂件系统的-mount #表⽰在查⽂件时不跨越⽂件系统的mount点
-follow #表⽰如果find命令遇到符号链接⽂件,就跟踪⾄链接所指向的⽂件
-cpio #表⽰对匹配的⽂件使⽤cpio命令,将这些⽂件备份⾄磁带设备中
find⽰例:
1、在logs⽬录下查更改时间在5⽇以前的⽂件并删除它们
find /logs -mtime +5-exec rm {} \;
2、在当前⽬录中查以.log结尾、更改时间在5⽇以上的⽂件,并删除,但在删除前给出提⽰
find . -name “*.log” -mtime +5-ok rm {} \;
3、先⽤find命令匹配所有⽂件名为”passwd*”的⽂件,然后执⾏grep看看这些⽂件中是否存在⼀个sam的字符串
find / -name"passwd*"-exec grep "sam" {} \;
4、查当前⽤户主⽬录下的所有⽂件
find ~
6、查系统当中所有长度为0的普通⽂件,并列出它们的完整路径
find / -type f -size0-exec ls -l {} \;
7、查/var/log⽬录中更改时间在7⽇以前的普通⽂件,并在删除之前进⾏提⽰
find /var/log-type f -mtime +5-ok rm {} \;
8、查当前⽬录中所有属于root组的⽂件
find . -group root -exec ls -l {} \;
9、find命令将列出⽬录中访问时间在7⽇以内且含有数字后缀的admin.log⽂件
find . -name"admin.log[0-9]*"-atime -7-exec ls -l {} \;
⽤xargs来配合find⼯作
在使⽤find命令的-exec选项处理匹配到的⽂件时,find命令将所有匹配到的⽂件⼀起传递给exec执⾏。但有些系统对传递给exec的命令长度是有限制的,这样 find命令把匹配到的⽂件传递给xargs命令,⽽xargs命令每次只获取⼀部分⽂件⽽不是全部,不像-exec选项那样。这样它就可以先处理最先
获取的那⼀部分⽂
查root下⾯的每个⽂件,然后使⽤file查看⽂件的类别
find /root/ -type f | xargs file
查root下⾯的777权限的⽂件,如果到,都改为644权限
find /root -perm 777| xargs chmod 644
查系统中的所有⽂件,并过滤出⽂件中带有rmt的⽂件
find / -type f | xarfs grep rmt
grep -rl rmt / #也可以 r代表递归,l代表只列出匹配的⽂件
更详细强⼤的find实例
⼀、使⽤name选项
1、在当前⽬录及⼦⽬录中查所有的*.txt⽂件
find . -name "*.txt"
2、在当前⽬录及⼦⽬录中查⼀个⼤写字母开头的⽂件
find . -name"[A-Z]*"
3、想在/etc⽬录中查⽂件名以host开头的⽂件
find /etc -name "host*
4、查$HOME⽬录中的⽂件
find ~
5、想要让系统⾼负荷运⾏,从根⽬录下⾯查所有⽂件
find / -name"*"
6、在当前⽬录中查⽂件名以两个⼩写字母开头,跟着是两个数字,最后是.txt的⽂件
find / -name "[a-z][a-z][0-9][0-9].txt"
⼆、使⽤perm选项
三、使⽤user和mount选项
1、在宿主⽬录下查属主为sam的⽂件
find ~ -user sam | xargs ls -l
2、查已经删除⽤户以前的⽂件
find / -nouser sam
四、按照更改时间或访问时间等查⽂件
-:限定更改时间在距今n⽇以内的⽂件
+:限定更改时间是在n⽇以前的⽂件
1、在根⽬录下查更改时间为最近5⽇的⽂件
find / -mtime -5
2、在根⽬录下查更改时间为3⽇以前的⽂件
find / -mtime +3
五、查⽐某个⽂件新或旧的⽂件
1、查⽐/root/a/a⽂件新的⽂件
find / -newer /root/a/a
2、查⽐wanglei⽂件新的⽂件
find / -newer wanglei
在进⾏系统维护时,我们经常遇到⼀种情况,即发现磁盘在不停地发⽣写现象,这时候我们要定位这个正在写的⽂件,可以选择建⽴⼀个⽂件,⽐如test,然
touch new1
touch new2
find / -newer new1 -o-path"/proc"-prune
出⽐new1新的⽂件,由于/proc⽬录中的⽂件⼀直在变化,所以可以排除
六、使⽤type选项
1、在/etc⽬录下查所有的⽬录
find /etc -type d | xargs file
2、在当前⽬录下查除⽬录以外的所有类型的⽂件
find /etc ! -type d | xargs file
3、在/etc/⽬录⼀下查所有的符号链接⽂件
find /etc -type l | xargs file
⼋、使⽤size选项
dd if=/dev/zero of=/root/100M bs=100M count=1
dd if=/dev/zero of=/root/10M bs=10M count=1
dd if=/dev/zero of=/root/30M bs=30M count=1
1、查当前⽬录下⼤于5M的⽂件
find . -size +5M
2、查当前⽬录下⼤与20M的⽂件
find . -size +20M
3、查当前⽬录下⼤与40M的⽂件 find . -size +40M
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论