首页 > 代码库 > 15.find查找命令《Mr.Robot》

15.find查找命令《Mr.Robot》

前言:查找,要会!《Mr.Robot》

----------------------------------------------------


一.find使用:

格式:find [options] [查找路径] [查找条件] [处理动作]

查找路径:默认为当前目录

查找条件:默认为查找指定路径下的所有文件

处理动作:默认为显示

查找条件:

-name "文件名称": 支持使用globbing

*

[]

[^]

find /etc -name "*passwd"

-iname "文件名称":查找时不区分字符大小写

find / -iname "*.log"

-user UserName: 根据属主查找

-group GroupName: 根据属组查找

-uid UID

-gid GID

-nouser:查找没有属主的文件;

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

组合条件:

-a: 与,同时满足   (可以省略!)

-o: 或,


-not, !:非,取反

非A,并且 非B: 非(A或B)


-not ( -user hadoop -o -iname "*.txt" )

非A,或 非B: 非(A且B)

-type: 根据文件类型查找

f: 普通文件

d: 目录

b: 块设备

c: 字符设备

l: 符号链接文件

p: 命名管道

s: 套接字

-size: 根据文件大小查找

-size [+|-]#Unit

例如:-size +2M

常用单位:k, M, G

#: (#-1)<x<=#

根据时间戳查找:

以天为单位(time):

-atime [+|-]#

+: 表示(#+1)天之外被访问过;

-: 表示#天之内被访问过;

无符号:表示短于(#+1)> x >=#天的时间段被访问过;

-mtime

-ctime

以分钟为单位(min):

-amin [+|-]#

-mmin

-cmin

根据权限查找:

-perm [+|-]MODE

MODE:精确匹配

+MODE: 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在;

-MODE: 每类用户的指定要检查的权限位都匹配;

文件权限:644

-perm 600: 否

-perm +222:

-perm +002

-perm -444

find / -type f -perm +001

练习:

1、查找/var/目录属主为root且属组为mail的所有文件;

# find /var/ -user root -a -group mail

2、查找/usr目录下不属于root、bin或hadoop的所用文件;

# find /usr/ -not -user root -a -not -user bin -a -not -user hadoop

# find /usr/ -not \( -user root -o -user bin -o -user hadoop \)

3、查找/etc/目录下最近一周内其内容修改过的,且不属于root或hadoop的文件;

# find /etc/ -mtime -7 -a -not -user root -a -not -user hadoop

# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)

4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件;

# find / \( -nouser -o -nogroup \) -a -atime -30

5、查找/etc/目录下大于1M且类型为普通文件的所有文件;

# find /etc/ -size +1M -a -type f

6、查找/etc/目录所有用户都没有写权限的文件;

# find /etc/ -not -perm +222

所有都没有:相反:任何一个有

所有都有:相反:至少有一个没有

7、查找/etc/目录下至少有一类用户没有写权限;

# find /etc/ -not -perm -222

8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件;

# find /etc/init.d/  -perm -113

处理动作:

-print:打印在标准输出上;

-ls:以长格式输出各文件信息;

-exec COMMAND {} \; :对查找到的文件执行指定的命令

-ok COMMAND {} \; : 交互式的-exec;

find把查找到的所有文件一次性地传递给-exec所指定的命令

find | xargs COMMAND

总结:find [查找路径] [查找条件] [动作]

-name, -iname, -user, -group, -uid, -gid, -nouser, -nogroup, -size, -type, -atime, -perm

-exec, -ok, -ls

| xargs COMMAND

find补充材料(摘自互联网):

find与xargs

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。


15.find查找命令《Mr.Robot》