文件查找:


#locate

在全系统内查找,非实时的。是根据全系统文件数据库进行的。

模糊匹配。不能精确匹配。优势是速度快。


#updatedb 手动生成文件数据库。但是时间比较长。




#find [OPTION] 查找路径 查找标准 查找动作 

实时查找,精确,支持众多查找标准,支持正则表达式,遍历。指定目录中所有文件完成查找,速度慢。


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


查找标准,默认为指定目录所有文件。


处理动作,默认为显示到屏幕。


查找标准:

-name 'FILENAME' 对文件名做精确匹配。支持文件名通配。


-iname 'FILENAME' 对文件名精确匹配至忽略大小写。


-regex PATTERN 基于正则表达式进行文件名通配。


-empty 查找所有的空文件或空目录,不包括链接文件


-user USERNAME 查找属主是USERNAME的文件。


-group GRPNAME 根据属组查找。


-uid UID 根据UID查找


-gid GID 根据GID查找


-nouser 没有属主的文件


-nogroup 没有属组的问题件


组合查找条件:

PATTERN1 -a|o|not PATTERN2

-a 与 通常可以省略

-o 或

-not|! 取反。

可以使用()来汇总条件,但是必须转义,使用\(\),同时括号内的或与关系要进行转换。


文件类型查找:

-type

f

d

l

s

p

b

c


文件大小查找:

-size [+|-] NUMUNTI 


+:大于。

-:小于。

UNIT:k,M,G等等。默认是BYTE。

查找到的文件数值大小是要做圆整的,方向向上的。例如1.1k的文件会被圆整为2k。


时间戳查找:


-amin [+|-]NUM 单位是分钟

-mmin

-cmin


-atime [+|-]NUM 单位是天

-mtime

-ctime


相对于此刻:

无+-:表示离此刻正好NUM天

+:离此刻至少有NUM天

-:离此刻在NUM天以内



根据权限查找:

文件权限使用数字表示,查找的时候不能简单地做加减法,一定要确定rwx的权限。

-perm MODE  精确匹配制定权限。

-perm -MODE 匹配全部条件,与关系,被匹配的权限只能多不能少。

-perm /MODE 匹配任何条件,或关系,只要有任何1位权限符合即可,权限为0可以任意匹配。


处理动作:

-print:显示。


-ls:类似ls -l的形式显示每一个文件的的详细。


-ok COMMAND {} \;  

{}指代找到的文件。每一次操作都需要用户确认。


-exec COMMAND {} \; 

不需要确认。


#xargs

从标准输入接收命令并执行。

例如:

#find /etc -size +1M -exec echo {} >> /tmp/a.txt \;

可以写成:

#find /etc -size +1M|xargs echo >>/tmp/a.txt




练习:

1.查找/var目录下属主为root并且属组为mail的所有文件

#find /etc -user root -gourp mail


2.查找/usr目录下不属于root、bin或student的文件:

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


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


3.查找/etc目录下最近一周内内容修改过且不属于root和student用户的文件。

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


4.查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为root

#find / \(-nouser -o -nogroup\) -atime -1 -exec chown root:root {} \;


##find / \(-nouser -o -nogroup\) -atime -1 |xargs chown root:root


5.查找/etc目录下大于1M的文件,并将其文件名写入/etc/a.txt文件中

#find /etc -size +1M >> /etc/a.txt \;


6.查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息。

#find /etc -prem /222 -ls