linux系统是由内核、库文件、各种shell和软件组成的,在这个庞大的系统中存在着各种各样的文件,而有时我们就需要在这庞大的系统中查找我们所需要的各种有用信息。

在这里我们简单的介绍两个命令locatefind

一、locate

locate 是非实时,模糊匹配的查找,查找是根据全系统文件数据库进行的,所以查找的速度非常的迅速。但是由于locate的查找是建立在文件数据库的基础上进行的,所以当文件数据库没有完成的时候命令是无法进行的。我们可以通过updatedb命令来生成文件数据库,以完成文件数据库的建设。

二、下面我们着重的介绍一下常用的fing的命令:

find:能够实时、精确、遍历指定目录中的所有文件进行查找,缺点是速度慢;它能支持众多查找标准,来进行精确的查找。

 

find 查找路径 查找标准 查找到以后的处理动作

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

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

处理动作:默认为显示

匹配标准:

-name FILENAME:根据文件名做精确匹配

文件名匹配:

*:任意长度任意字符

?: 

[]: 

find  /etc -name passwd  查找在/etc下所有和passwd相关的文件

find  /etc -name passwd*  查找在/etc下所有以passwd开头的文件

find  /etc -name *passwd*  查找在/etc下所有包含passwd的文件

 

-iname 文件名不匹配大小写的精确匹配

 

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

 

-user USERNAME:根据属主查找

 

-group GROUPNAME:根据属组查找

 

-uid UID:根据UID查找

 

-gid GID:根据GID查找

 

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

 

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

 

-type 根据文件类型查找

f:普通文件

d:目录文件

s:套接字文件

 

-size 根据文件大小查找

[+|-]#k  大于#k或小于#k的文件大小

#M

#G

 

组合条件:

-a 

-o 

-not 

 

按照时间戳来查找

-mtime 修改时间

-ctime 改变时间

-atime 访问时间

[+|-]# #天之前访问过 #天之内访问过

-mmin 修改分钟

-cmin 改变分钟

-amin 访问分钟

 

按照权限查找

-perm mode 精确权限查找

/mode 任何一位匹配即可

-mode 每一位权限都必须完全包此mode才符合条件

find动作:

-print(默认显示)

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

-ok COMAND {} \;: 每一次操作都需要用户确认

-exec COMMAND {} \;: 不需要用户确认

find /tmp -perm 007 -exec chmod o-x {} \;

引用查找的文件就要用到{} 

 

以下的几个例子,能够大致全面的包含find的具体使用

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

find /var -user root -group 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目录下最近一周内内容修改过且不属于rootstudent用户的文件;

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

find /etc -mtime -7 -not -user root -a -not -user student

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

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

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

find /etc -size +1M >> /tmp/etc.largefiles

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

find /etc -not -perm /222 -ls