linux系统--find命令详解以及定时查看系统文件是否被修改

一、概述: 
因为Linux下面一切皆文件,经常需要搜索某些文件来编写,所以对于linux来说find是一条很重要的命令。linux下面的find指令用于在目录结构中搜索文件,并执行指定的操作。它提供了相当多的查找条件,功能很强大。在不指定查找目录的情况下,find会在对整个系统进行遍历。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间。

1、命令格式 
find [查找目录] [查找规则] [查找完后的操作] 
即:find pathname -option [-print -exec -ok …]

2、命令功能 
用于在文件树中查找文件,并做相应的处理,(有可能访问磁盘)。

3、命令参数 
(1)pathname:表示所要查找的目录路径,例如”.”表示当前目录,”/”表示根目录。 
(2)-print:将find找到的文件输出到标准输出。 
(3)-exec:对找到的文件执行exec这个参数所指定的shell命令,相应的形式为:-exec command {} \; 将查到的文件进行command操作,”{}”就代替查到的文件。

注意: 
1)”{}”和”\”之间有一个空格。 
2)-ok:和-exec的作用相同,只不过-ok更加安全一点,在执行每一个命令之前,系统会让用户确定是否执行。

二、查找规则: 
1、根据文件名查找 
(1)-name :根据文件名进行查找,区分大小写精确查找。 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)-iname:根据文件名查找,不区分大小写 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(3)文件名通配符: 
“*”:通配任意的字符,可以是任何东西。 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(4)”?”:可表示任意单个字符 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改 
注:与上例比较得知,空不为单字符,所以不能查找“file”文件。

(5)”[]”表示通配括号里面的任意一个字符,注意[]里面的内容会被解析成单个字符。 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

2、根据文件的时间戳信息查找文件 
在根据时间戳信息查找的时候,所有的time都是以天为单位,min都是以分钟为单位。+n表示n以前,-n表示n以内。

(1)以最近一次存取的时间为参数 
1)-atime: 
A、find pathname -atime +n //表示n天前存取过的文件 
B、find pathname -atime -n //表示以当前时间为起点前n天内存取过的文件

2)-amin : 
A、find pathname -amin +n //表示n分钟前存取过的文件。 
B、find pathname -amin -n //表示以当前时间为起点前n分钟内存取过的文件。 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)以最近一次修改的时间为参数 
1)-mtime: 
A、find pathname -mtime +n //表示n天前修改过的文件 
B、find pathname -mtime -n //表示以当前时间为起点前n天内修改 过的文件

2)-mmin: 
A、find pathname -mmin +n //表示n分钟前存取过的文件 
B、find pathname -mmin -n //表示以当前时间为起点前n修改 内存取过的文 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(3)以最近一次更改的属性为参数 
1)-ctime: 
A、find pathname -ctime +n //表示n天前更改 过的文件 
B、find pathname -ctime -n //表示以当前时间为起点前n天内更改 过的文件

2)-cmin: 
A、find pathname -cmin +n //表示n分钟前更改过的文件 
B、find pathname -cmin -n //表示以当前时间为起点前n分钟内更改 过的文件 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

3、根据文件所属用户和所属组来查找文件 
(1)根据文件所有者查找文件:-user 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)根据所有者所在的组查找:-group 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

4、根据nouser或nogroup查找 
(1)查找无有效属主的文件:-nouser 
find pathname -nouser 
(2)查找无有效属组的文件:-nogroup 
find pathname -nogroup 
5、-perm :根据权限来查找文件 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

6、根据uid和gid查找文件 
(1)根据文件的uid查找:-uid 
(2)根据文件所在组的gid查找:-gid

7、-type:根据文件类型查找文件 
(1)普通文件:f 
find pathname -type f 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)目录文件:d 
find pathname -type d 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(3)链接文件:l 
find pathname -type l 
(4)块设备文件:b 
find pathname -type b 
(5)字符设备文件:c 
find pathname -type c 
(6)管道设备文件:p 
find pathname -type p 
(7)套接字文件:s 
find pathname -type s

8、根据文件大小查找文件:-size 
(1)find pathname -size +n //表示大于n字节的文件 
(2)find pathname -size -n //表示小于n字节的文件 
(3)find pathname -size n //表示等于n字节的文件 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

9、按照参考文件的更改时间查找 
-newer :file1//查找更改时间比file1的更改时间距离当前时间近的文件 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

10、maxdepth和mindepth 
(1)-maxdepth 
1)-maxdepth n : 搜索深度距离当前目录最多n个子目录深度 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)-mindepth 
2)-mindepth n :搜索深度距离当前目录至少n个子目录深度 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

11、查找路径下为空的文件或文件夹:-empty 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

12、按照硬连接的数目进行查找 
(1)-link n :硬连接连接数等于n的文件或目录 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)-link +n :硬连接连接数大于n的文件或目录 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(3)-link -n :硬连接连接数小于n的文件或目录 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

13、-a、-o,-not(也就是与、或、非) 
(1)-a:连接两个不同的条件(即两个条件必须同时为真) 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)-o:连接两个不同的条件(两个条件只要满足一个即可) 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(3)-not:对条件进行取反 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

14、查找完成之后的操作 
(1) -exec command {} \;: 其中,”{}”就代表查找之后返回的文件。 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

(2)-ok command {} \;-ok相对于-exec而言更安全一点,会让用户确定所要执行的操作。 
【例】 
linux系统--find命令详解以及定时查看系统文件是否被修改

将原有的文件md5sum输出到指定文件中

find /etc/passwd/ -type f|xargs md5sum >/tmp/test.md5sum

将现有的文件进行比对

md5sum -c /tmp/test.md5sum |grep -i fail