良许Linux教程网 Linux命令大全 Linux系统搜索文件命令

Linux系统搜索文件命令

本篇文章向大家介绍在 Linux 系统下搜索文件的相关命令。文件搜索功能平时还是挺容易用到的。当服务器使用时间长且跑的业务相对比较多时,就会导致有时候对于某个文件具体的位置不是很清楚,一个一个目录找的话很浪费时间,而且最终还不一定可以找出来,那么本文就来介绍以下如何在 Linux 系统下搜索文件。

首先介绍的第一个命令就是 find ,这个命令可以称得上是 “神器”,它是最强大的搜索命令,它可以根据时间戳查找文件,可以根据文件大小查找,可以根据属主属组查找,还可以根据文件名进行查找并且支持正则匹配。总之,只有你想不到,没有 find 做不到,下面就通过几个示例来具体演示:

  1. 查找指定时间内修改过的文件

    $ find /etc/ -atime -2
    image-20201118225839091
    image-20201118225839091

    /etc 表示查找的范围,也就在 /etc 目录下查找,而具体查找的内容就是两天内受到访问的文件,atime 表示 access time 即访问时间,-2 就表示两天之内。

    $ find /etc/ -mtime -1
    image-20201118230149262
    image-20201118230149262

    这两个示例差不多,不同的是,这个示例中 mtime 指的是 modify time,也就是一天内 /etc 目录下有过修改的文件。

  2. 指定文件名进行查找

    这种查找方式应该是使用最多的,因为使用文件名查找比较容易达到目的。

    $ find /var/log/ -mtime +3 -name '*.log'
    image-20201118230654578
    image-20201118230654578

    这个示例是查找 /var/log 目录下 3 天前以 “.log” 结尾的文件。

  3. 查找文件时忽略某个目录

    $ tree
    .
    |-- dir1
    |-- dir2
    |-- dir3
    `-- dir4

    4 directories, 0 files
    $ find /test -path "/test/dir1" -prune -o -print
    /test
    /test/dir4
    /test/dir3
    /test/dir2

    参数 -path 指定路径样式,需要配合 -prune 参数用于排除指定目录。当我们不想查找时不想检索某个目录就可以用这个命令。

接下来需要说的第二个命令就是 locate ,在 Linux 系统中有一个名为 mlocate.db 的数据库文件,这个文件里包括了 Linux 系统文件里的文件名以及文件对应的路径信息。所以使用 locate 命令来查找某个文件时其实是不用遍历磁盘的,直接查找 mlocate.db 数据库文件就可以了,这样可以更快的给到查找结果。这样虽然快,但是会有一个问题就是如果是新建立的一个文件,那么 mlocate.db 数据库文件是不会记录的,所以如果使用 locate 命令时可以先用 updatedb 命令更新一下 mlocate.db 的数据库文件。需要注意的是,不是每次都需要我们手动执行命令去更新的,mlocate.db 也会由系统自带的定时任务定时执行 updatedb 命令进行定期更新的。

$ ll -h /var/lib/mlocate/mlocate.db  
-rw-r----- 1 root slocate 1.6M Nov 18 03:43 /var/lib/mlocate/mlocate.db
locate 查找的数据库文件

系统自带的定时任务脚本:
$ cat /etc/cron.daily/mlocate 
#!/bin/sh
nodevs=$(awk '$1 == "nodev" && $2 != "rootfs" && $2 != "zfs" { print $2 }' 
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"

查找文件路径:

$ locate pwd
/etc/.pwd.lock
/usr/bin/pwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/modules/3.10.0-1062.18.1.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz
/usr/lib64/cracklib_dict.pwd
/usr/lib64/python2.7/lib-dynload/spwdmodule.so
......

locate 后面可以直接跟上想要查找的文件名,只要包含 pwd 字符串的都能截取出来

使用通配符查找文件路径:

$ locate /etc/sh  只要部分符合就输出
/etc/shadow
/etc/shadow-
/etc/shells

$ locate /etc/sh*  还可以使用通配符来匹配
/etc/shadow
/etc/shadow-
/etc/shells

$ locate -c /etc/*sh*
26

这里在补充几个关于 locate 命令的常用参数选项:

-c:它不会显示匹配的内容,只显示匹配到的行数,从上面的示例中可以看出

-i:匹配时忽略字母的大小写

-r:支持基本正则表达式的匹配

–regex:支持扩展正则表达式的匹配

本文关于在 Linux 下查找文件的命令就说到这里,感兴趣的朋友可以跟着上述示例一块练习。

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部