linux常用搜索工具find/whereis/locate

 

1 whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

1.1 选项与参数

-b 搜索文件的二进制部分。

-m 搜索文件的手册部分。

-s 搜索文件的源部分。

-u 没有说明文档的文件

1.2示例

[root@localhost ~]# whereis ifconfig #搜索ifconfig全部信息

ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

[root@localhost ~]# whereis -m ifconfig #搜索man文件部分

ifconfig: /usr/share/man/man8/ifconfig.8.gz

[root@localhost ~]# whereis -b ifconfig #搜索二进制部分

ifconfig: /sbin/ifconfig

 

那么 whereis 到底是使用什么咚咚呢?为何搜寻的速度会比 find 快这么多? 其实那也没有什么,只是因为 whereis 只找几个特定的目录而已~并没有全系统去查询之故。所以说,whereis 主要是针对 /bin /sbin 下面的可执行文件, 以及 /usr/share/man 下面的 man page 文件,跟几个比较特定的目录来处理而已。所以速度当然快的多!不过,就有某些文件是你找不到的啦! 想要知道

whereis 到底查了多少目录?可以使用 whereis -l 来确认一下即可!

 

2 locate/updatedb

updatedb:根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;

locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名。

[root@localhost ~]# rpm -ql mlocate

/etc/cron.daily/mlocate.cron

/etc/updatedb.conf

/usr/bin/locate

/usr/bin/updatedb #更新数据库命令

 

[root@study ~]# locate [-ir] keyword

选项与参数:

-i :忽略大小写的差异;

-c :不输出文件名,仅计算找到的文件数量

-l :仅输出几行的意思,例如输出五行则是 -l 5

-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等

-r :后面可接正则表达式的显示方式

范例一:找出系统中所有与 passwd 相关的文件名,且只列出 5 个

[root@study ~]# locate -l 5 passwd

/etc/passwd

/etc/passwd-

/etc/pam.d/passwd

/etc/security/opasswd

/usr/bin/gpasswd

范例二:列出 locate 查询所使用的数据库文件之文件名与各数据数量

[root@study ~]# locate -S

Database /var/lib/mlocate/mlocate.db:

8,086 directories # 总纪录目录数

109,605 files # 总纪录文件数

5,190,295 Bytes in file names

2,349,150 Bytes used to store database

 

 

3 find

3.1 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明

-mtime n :n 为数字,意义为在 n 天之前的"一天之内"被更动过内容的文件;

-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;

-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。

-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

 

范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出

[root@study ~]# find / -mtime 0

# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,

# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?

# find / -mtime 3 有变动过的文件都被列出的意思!

 

范例二:寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出

[root@study ~]# find /etc -newer /etc/passwd

# -newer 用在分辨两个文件之间的新旧关系是很有用的!

 

3.2 与使用者或群组名称有关的参数:

-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在/etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。

-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在/etc/group,相关的介绍我们会第四篇说明~

-user name :name 为使用者帐号名称喔!例如 dmtsai

-group name:name 为群组名称喔,例如 users ;

-nouser :寻找文件的拥有者不存在 /etc/passwd 的人!

-nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。

 

范例三:搜寻 /home 下面属于 dmtsai 的文件

[root@study ~]# find /home -user dmtsai

# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,

# 就可以利用这个指令将属于某个使用者的所有文件都找出来喔!

 

范例四:搜寻系统中不属于任何人的文件

[root@study ~]# find / -nouser

# 通过这个指令,可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何人的文件时,

# 不要太紧张,那有时候是正常的~尤其是你曾经以源代码自行编译软件时。

 

3.3与文件权限及名称有关的参数

-name filename:搜寻文件名称为 filename 的文件;

-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB还要大的文件,就是" -size +50k "

-type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c),目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。

-perm mode :搜寻文件权限"刚好等于" mode 的文件,这个 mode 为类似 chmod的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !

-perm -mode :搜寻文件权限"必须要全部囊括 mode 的权限"的文件,举例来说,我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。

-perm /mode :搜寻文件权限"包含任一 mode 的权限"的文件,举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw.... 的属性存在!

 

范例五:找出文件名为 passwd 这个文件

[root@study ~]# find / -name passwd

范例五-1:找出文件名包含了 passwd 这个关键字的文件

[root@study ~]# find / -name "*passwd*"

# 利用这个 -name 可以搜寻文件名啊!默认是完整文件名,如果想要找关键字,

# 可以使用类似 * 的任意字符来处理

范例六:找出 /run 目录下,文件类型为 Socket 的文件名有哪些?

[root@study ~]# find /run -type s

# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,

# 例如 socket 与 FIFO 文件,可以用 find /run -type p 或 -type s 来找!

 

范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性

[root@study ~]# find / -perm /7000

# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,所以当然要使用 /7000,

# 使用 -7000 表示要同时含有 ---s--s--t 的所有三个权限。而只需要任意一个,就是 /7000 ~瞭乎?

 

 

3.4额外可进行的动作

-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。

-print :将结果打印到屏幕上,这个动作是默认动作!

 

范例八:将上个范例找到的文件使用 ls -l 列出来~

[root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} ;

# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,

# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!

 

范例九:找出系统中,大于 1MB 的文件

[root@study ~]# find / -size +1M

原文地址:https://www.cnblogs.com/chuangcc/p/14333765.html