本篇文章向大家介绍在 Linux 系统下搜索文件的相关命令。文件搜索功能平时还是挺容易用到的。当服务器使用时间长且跑的业务相对比较多时,就会导致有时候对于某个文件具体的位置不是很清楚,一个一个目录找的话很浪费时间,而且最终还不一定可以找出来,那么本文就来介绍以下如何在 Linux 系统下搜索文件。
首先介绍的第一个命令就是 find
,这个命令可以称得上是 “神器”,它是最强大的搜索命令,它可以根据时间戳查找文件,可以根据文件大小查找,可以根据属主属组查找,还可以根据文件名进行查找并且支持正则匹配。总之,只有你想不到,没有 find
做不到,下面就通过几个示例来具体演示:
-
查找指定时间内修改过的文件
$ find /etc/ -atime -2
/etc 表示查找的范围,也就在 /etc 目录下查找,而具体查找的内容就是两天内受到访问的文件,atime 表示 access time 即访问时间,-2 就表示两天之内。
$ find /etc/ -mtime -1
这两个示例差不多,不同的是,这个示例中 mtime 指的是 modify time,也就是一天内 /etc 目录下有过修改的文件。
-
指定文件名进行查找
这种查找方式应该是使用最多的,因为使用文件名查找比较容易达到目的。
$ find /var/log/ -mtime +3 -name '*.log'
这个示例是查找 /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:支持扩展正则表达式的匹配
本文关于在 Linux 下查找文件的命令就说到这里,感兴趣的朋友可以跟着上述示例一块练习。