加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux 系统下搜索文件的相关命令

发布时间:2023-07-19 14:50:56 所属栏目:Linux 来源:
导读:本篇文章向大家介绍在 Linux 系统下搜索文件的相关命令。文件搜索功能平时还是挺容易用到的。当服务器使用时间长且跑的业务相对比较多时,就会导致有时候对于某个文件具体的位置不是很清楚,一个一个目录找的话很浪费

本篇文章向大家介绍在 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:支持扩展正则表达式的匹配
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!