本篇文章向大家介绍在 Linux 系统下搜索文件的相关命令。文件搜索功能平时还是挺容易用到的。当服务器使用时间长且跑的业务相对比较多时,就会导致有时候对于某个文件具体的位置不是很清楚,一个一个目录找的话很浪费时间,而且最终还不一定可以找出来,那么本文就来介绍以下如何在 Linux 系统下搜索文件。 首先介绍的第一个命令就是 find ,这个命令可以称得上是 “神器”,它是最强大的搜索命令,它可以根据时间戳查找文件,可以根据文件大小查找,可以根据属主属组查找,还可以根据文件名进行查找并且支持正则匹配。总之,只有你想不到,没有 find 做不到,下面就通过几个示例来具体演示: 查找指定时间内修改过的文件 $ 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 目录下有过修改的文件。 指定文件名进行查找 这种查找方式应该是使用最多的,因为使用文件名查找比较容易达到目的。 $ find /var/log/ -mtime +3 -name '*.log' image-20201118230654578 image-20201118230654578 这个示例是查找 /var/log 目录下 3 天前以 “.log” 结尾的文件。 查找文件时忽略某个目录 $ 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:支持扩展正则表达式的匹配 (编辑:聊城站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|