• Linux之文件/目录搜索


    相关知识

    locate命令用来查找文件或目录。

    locate命令要比其他查找文件命令(例如:find)快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db

    /var/lib/mlocate/mlocate.db这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

    locate命令

    接下让我们详细的学习locateupdatedb的使用方法。

    locate具体命令如下:

    locate 命令参数 文件/目录

    常用命令参数如下:

    1. -c, --count 只输出找到的数量;
    2. -d, --database DBPATH 使用DBPATH指定的数据库,而不是默认数据库/var/lib/mlocate/mlocate.db;
    3. -i, --ignore-case 忽略大小写;
    4. -q, --quiet 安静模式,不会显示任何错误讯息;
    5. -e, --existing 只显示当前存在的文件条目;

    案例演示1

    搜索etc目录下以pass开头的文件或目录,具体使用如下命令:

    1. locate /etc/pass

     

    案例演示

    搜索包含passwd字母的文件或目录总个数,具体使用如下命令:

    locate -c passwd

     

    updatedb命令

    updatedb命令用来创建或更新locate命令所必需的数据库文件。

    updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入locate数据库文件中。

    具体命令如下:

    updatedb 命令参数

    常用参数如下:

    1. -o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件;
    2. -U<目录>:更新指定目录的slocate数据库;
    3. -v:显示执行的详细过程;

    执行权限:updatedb必须以root权限才能执行,如果是普通用户想执行updatedb时,需要在命令前加sudo命令来提升权限为root权限。

    案例演示1

    新创建一个testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令:

    1. touch testFile
    2. locate testFile
    3. sudo updatedb
    4. locate testFile

     

    可以看到新创建文件后直接使用locate去查找是没有任何结果的,只有更新数据库后才能查找到新创建的文件。

    案例演示2

    删除testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令:

    1. rm testFile
    2. locate testFile
    3. sudo updatedb -U ./
    4. locate testFile

     

    第三条命令是只更新testFile所在目录的数据库,这样速度比较快,如果不使用该参数,则会更新整个文件系统的内容。

    可以看到删除文件后直接使用locate去查找是可以定位到的,但是此时文件已经不存在了,原因是没有马上更新数据库。

    编程要求

    在右侧编辑器中补充代码,使用locate命令查找系统中的文件,具体编程要求如下:

    • 使用locate命令查找系统中所有包括group字母的文件或目录的总个数;

    • 使用locate命令定位系统中最新创建的文件newFile

    1. #!/bin/bash
    2. #在以下部分写出完成任务的命令
    3. #*********begin*********#
    4. #使用locate命令查找系统中所有包括group字母的文件或目录的总个数;
    5. locate -c group
    6. #使用locate命令定位系统中最新创建的文件newFile。
    7. updatedb
    8. locate newFile
    9. #********* end *********#

  • 相关阅读:
    HIbernate多表学习
    MES管理系统中的质量管理活动是什么
    我使用延迟队列实现商品的竞拍成交功能
    消息队列--必须掌握的两个基础模式
    Java/.Net双平台核心,Jvm和CLR运行异同点
    【rust工具链】
    开创性的区块链操作系统项目——公共交通系统
    使用非递归的方式实现归并排序
    CycleGAN论文解读+思想+学习路径
    前端 CSS 经典:省略号
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/126163911