教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

Linux培训:利用locate按照文件名搜索文件

更新时间:2019年04月03日09时46分 来源:传智播客linux培训 浏览次数:

    whereis 和 which 命令都是只能搜索系统命令的命令,而 locate 命令才是可以按照文件名搜索普通文件的命令。
    但是 locate 命令的局限也很明显,它只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。如果要按照复杂条件执行搜索,则只能求助于功能更加强大的 find 命令。locate 命令的优点鮮常明显,那就是搜索速度非常快,而且耗费系统资源非常小。这是因为 locate 命令不会直接搜索硬盘空间,而会先建立 locate 数据库,然后在数据库中按照文件名进行搜索,是快速的搜索命令。
》》》传智播客linux培训班,带你从新手到大神,咨询右下角窗口咨询开班时间《《《
传智播客linux培训

    locate 命令的基本信息如下。

    命令名称:locate。
    英文原意:find files by name。
    所在路径:/usr/bin/locate。
    执行权限:所有用户。
    功能描述:按照文件名搜索文件。

    命令格式

    locate 命令只能按照文件名来进行搜索,所以使用比较简单。
    [root@localhost ~]# locate [选项] 文件名
    选项:
    -i:忽略大小写

    常见用法

    【例 1】基本用法。
    搜索 Linux 的安装日志。
    [root@localhost ~]# locate install.log
    /root/install.log
    /root/install.log.syslog
    #搜索文件名叫install.log的文件
    系统命令其实也是文件,也可以按照文件名来搜索系统命令。
    [root@localhost ~]# locate mkdir
    /bin/mkdir
    /usr/bin/gnomevfs-mkdir
    /usr/lib/perl5/auto/POSIX/mkdir.al
    …省略部分内容...
    #会搜索出所有含有mkdir字符串的文件名,当然也包含mkdir命令【例 2】locate 命令的数据库。
    我们在使用 locate 命令的时候,可能会发现一个问题:如果我们新建立一个文件,那么 locate 命令找不到这个文件。例如:
    [root@localhost ~]# touch cangls
    [root@localhost ~]# locate cangls
    #新建立的文件,locate命令找不到
    这是因为 locate 命令不会直接搜索硬盘空间,而会搜索 locate 数据库。这样做的好处是耗费系统资源小、搜索速度快;缺点是不是实时更新的,而要等用户退出登录或重启系统时,locate 数据库才会更新,所以我们无法查找到新建立的文件。
    既然如此,locate 命令的数据库在哪里呢?
    [root@localhost ~]#ll /var/lib/mlocate/mlocate.db-rw-r----- 1 root slocate 2328027 6月 14 02:08/var/lib/ mlocate/mlocate.db#这是 locate 命令实际搜索的数据库的位置
    这个数据库是二进制文件,不能直接使用 Vim 等编辑器査看,而只能使用对应的 locate 命令进行搜索。如果我们不想退出登录或重启系统,则也可以通过 updatedb 命令来手工更新这个数据。例如:
    [root@localhost ~]# locate cangls
    #没有更新数据库时,找不到cangls文件
    [root@localhost ~]# updatedb
    #更新数据库[root@localhost ~]# locate cangls/root/cangls
    #新建立的文件已经可以搜索到了

    locate配置文件

    我们再做一个实验,看看这是什么原因导致的。
    [root@localhost ~]# touch /tmp/lmls
    #在/tmp/目录下新建立一个文件
    [root@localhost ~]# updatedb
    #更新locat数据库
    [root@localhost ~]# locate lmls
    #依然查询不到lmls这个新建文件
    新建立了 /tmp/lmls 文件,而且也执行了 updatedb 命令,却依然无法找到这个文件,这是什么原因?这就要来看看 located 配置文件 /etc/updatedb.conf了。
    [root@localhost ~]#vi /etc/updatedb.conf
    PRUNE_BIND_MOUNTS = "yes"
    #开启搜索机制,也就是让这个配置文件生效
    PRUNEFS = "9p afs anonjnodefs auto autofs bdev binfmt_misc cgroup cifs codaconfigfs cpuset debugfs devpts ecryptfs exofe fuse fusectl gfs gfe2 hugetlbfsinotifyfs iso9660 jffs2 lustre mqueue ncpfs nfe nfs4 nfsd pipefe proc ramfs rootfsrpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"#在local执行搜索时,禁止搜索这些文件系统类型PRUNENAMES = ".git.hg.svn"
    #在locate执行搜索时,禁止搜索带有这些扩展名的文件PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spod/cups /var/spool/squid /var/tmp"#在locat执行搜索时,禁止搜索这些系统目录
    在 locate 执行搜索时,系统认为某些文件系统、某些文件类型和某些目录是没有搜索必要的,比如光盘、网盘、临时目录等,这些内容要么不在 Linux 系统中,是外来存储和网络存储,要么是系统的缓存和临时文件。刚好 /tmp/ 目录也在 locate 搜索的排除目录当中,所以在 /tmp/ 目录下新建的文件是无法被找到的。
linux培训