美文网首页
Linux locate 命令

Linux locate 命令

作者: 追风骚年 | 来源:发表于2022-05-12 12:10 被阅读0次

    在 Linux 中可能有时候需要查询磁盘上某个文件在什么位置,可能只是知道文件名,大多数情况通过 find 命令是可以解决问题,但是 find 命令在于每次都需要遍历磁盘文件树速度,所以文件越多速度就越慢,并且由于 find 功能尤为强大参数较多。有没有一个命令能快速查找,又简单明了,locate 就是解决这个问题的。

    $ time find / -path *apache*
    /var/lib/selinux/targeted/active/modules/100/apache
    /var/lib/selinux/targeted/active/modules/100/apache/hll
    /var/lib/selinux/targeted/active/modules/100/apache/lang_ext
    /var/lib/selinux/targeted/active/modules/100/apache/cil
    /usr/share/selinux/targeted/default/active/modules/100/apache
    /usr/share/selinux/targeted/default/active/modules/100/apache/lang_ext
    /usr/share/selinux/targeted/default/active/modules/100/apache/cil
    /usr/share/bash-completion/completions/apache2ctl
    /usr/lib/python3.6/site-packages/sos/report/plugins/apache.py
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.pyc
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.opt-1.pyc
    
    real    0m1.254s
    user    0m0.419s
    sys 0m0.717s
    
    $ time locate apache
    /usr/lib/python3.6/site-packages/sos/report/plugins/apache.py
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.opt-1.pyc
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.pyc
    /usr/share/bash-completion/completions/apache2ctl
    /usr/share/selinux/targeted/default/active/modules/100/apache
    /usr/share/selinux/targeted/default/active/modules/100/apache/cil
    /usr/share/selinux/targeted/default/active/modules/100/apache/lang_ext
    /var/lib/selinux/targeted/active/modules/100/apache
    /var/lib/selinux/targeted/active/modules/100/apache/cil
    /var/lib/selinux/targeted/active/modules/100/apache/hll
    /var/lib/selinux/targeted/active/modules/100/apache/lang_ext
    
    real    0m0.141s
    user    0m0.130s
    sys 0m0.007s
    

    如果提示没有 .db 文件,updatedb 可以生成 .db 文件,首次会比较慢

    我的磁盘文件较少,这其中查询速度就已经相差一个数量级。
    locate 还有一些其他参数

    • 查询文件名
    $ locate -b  apache 
    /usr/lib/python3.6/site-packages/sos/report/plugins/apache.py
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.opt-1.pyc
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.pyc
    /usr/share/bash-completion/completions/apache2ctl
    /usr/share/selinux/targeted/default/active/modules/100/apache
    /var/lib/selinux/targeted/active/modules/100/apache
    

    b 是 basename

    • 统计数量
    $ locate -b -c  apache
    6
    
    • 忽视大小写
    $ locate -i apache
    /usr/lib/python3.6/site-packages/sos/report/plugins/apache.py
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.opt-1.pyc
    /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/apache.cpython-36.pyc
    /usr/share/bash-completion/completions/apache2ctl
    /usr/share/selinux/targeted/default/active/modules/100/apache
    /usr/share/selinux/targeted/default/active/modules/100/apache/cil
    /usr/share/selinux/targeted/default/active/modules/100/apache/lang_ext
    /var/lib/docker/overlay2/116ff1a457689fa9d31f045d4bb7d04d8791308e3ce6bb28b806d0634f5a580e/diff/usr/share/perl/5.20.2/CGI/Apache.pm
    /var/lib/docker/overlay2/236df4c36580d0f590b7beb2421720a0afa9dc4459bc7fb7d9e6f9f1fc41d75c/diff/usr/share/common-licenses/Apache-2.0
    /var/lib/docker/overlay2/2f0479cc846777a9c4f650680be86346cdda6ed1b040947e87324fab4e86034f/diff/usr/share/common-licenses/Apache-2.0
    /var/lib/docker/overlay2/b899ddfdb2940ae3c37e654ed23c93c704365a9ea5599e0000123167a026b3d6/diff/usr/share/common-licenses/Apache-2.0
    /var/lib/selinux/targeted/active/modules/100/apache
    /var/lib/selinux/targeted/active/modules/100/apache/cil
    /var/lib/selinux/targeted/active/modules/100/apache/hll
    /var/lib/selinux/targeted/active/modules/100/apache/lang_ext
    
    • 通过正则表达式查询
    $ locate -i  -r apache.py$
    /usr/lib/python3.6/site-packages/sos/report/plugins/apache.py
    

    Tip

    但是 locate 也有一个问题在于如果文件被删除,locate 数据库还没有刷新的话,就会存在查找的文件已不再磁盘上,这个时候可以添加另外一个参数解决 -e,但是更为合适做法是配置 cronjob,定时更新 locate 数据库。

    $ updatedb  
    
    $ locate -S
    数据库 /var/lib/mlocate/mlocate.db:
        20,215 文件夹
        174,859 文件
        18,633,061 文件名中的字节数
        4,898,343 字节用于存储数据库
    

    updatedb 更新数据库,locate -S 数据库统计。

    相关文章

      网友评论

          本文标题:Linux locate 命令

          本文链接:https://www.haomeiwen.com/subject/vaysurtx.html