linux 搜索文件指令 文件whereis locate find

一般我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到 了,才以 find 来搜寻 

因为 whereis 只找系统中某些特定目录底下的文件而已(主要是针 对 /bin /sbin 底下的执行档, 以及 /usr/share/man 底下的 man page 文件,跟几个比较特定的目录来处理),locate 则是利用数据库来搜寻文件名,当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状 态,比较省时间 

 

whereis (由一些特定的目录中寻找文件文件名) 

选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已 -b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件 

 

locate / updatedb 

选项与参数:

-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的文件数量

-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等 -r :后面可接正规表示法的显示方式

 

限制:

使用 locate 来寻找数据的时候特别的快,这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/』里面的数据所搜寻到的, 所以不用直接在去硬盘当中存取数据,很快速 

因为他是经由数据库来搜寻的,而数据库的建立默认是在每天执行一次 (每 个 distribution 都不同,CentOS 7.x 是每天更新数据库一次!),所以当你新建立起来的文件, 却还 在数据库更新之前搜寻该文件,那么 locate 会告诉你『找不到!』 

因为必须要更新数据库呀!

那能否手动更新数据库哪?当然可以啊!更新 locate 数据库的方法非常简单,直接输入『 updatedb 』 就可以了。

updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作,最后就更新整个数据库文件了。

因为 updatedb 会去搜寻硬盘,所以当你执行 updatedb 时,可能会等待数分钟的时间

 

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

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

 

find

[root@study ~]# find [PATH] [option] [action] 

选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明 

-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件; -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件档名 

 

如果我想要找出『4 天内被更动过的文件档名』,可以使用『 find /var -mtime -4 』。

那如果是『4 天前的那一天』就用『 find /var -mtime 4 』。

有没有加上『+, -』差别很大 

  +4 代表大于等于 5 天前的檔名:ex> find /var -mtime +4

  -4 代表小于等于 4 天内的文件档名:ex> find /var -mtime -4

  4 则是代表 4-5 那一天的文件档名:ex> find /var -mtime 4 

 

选项与参数:
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 搜寻。

 

选项与参数:
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.... 的属性存在!

 

选项与参数:
4. 额外可进行的动作:

-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。 -print :将结果打印到屏幕上,这个动作是预设动作! 

 

posted @ 2019-02-21 20:38  猫不会游泳却爱吃鱼  阅读(230)  评论(0)    收藏  举报