• 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

  • 相关阅读:
    保险行业电话外呼型呼叫中心方案
    12355青少年服务台呼叫中心解决方案
    未能找到类型集或命名空间名称 "xxxxxx" (是否缺少using 指令或引用?)
    Smarty中section的使用
    什么是Asterisk,它如何帮助我们的呼叫中心?
    高效呼叫中心的8个健康工作习惯
    Python 爬起数据时 'gbk' codec can't encode character 'xa0' 的问题
    Python 网页解析器
    Python 爬虫入门3种方法
    Python open 读写小栗子
  • 原文地址:https://www.cnblogs.com/chuangcc/p/14333765.html
Copyright © 2020-2023  润新知