Linux 快速定位文件

点击访问 Linux 命令大全 >>

随着文件增多,使用文件搜索工具成了顺理成章的事情。本章节将介绍怎样在 Linux 快速定位文件,主要介绍下面几个命令:

find —— 查找文件

find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。语法:

find [PATH...] [EXPRESSION] [ACTION]

参数说明:

  • PATH:要搜索的目录路径

  • EXPRESSION: 默认情况下(不带任何搜索条件),find 命令会返回指定目录下的所有文件,所以常常需要通过特定的 expression 对结果进行筛选。

  • ACTION:find 命令默认的 action 是将所有检索结果打印至标准输出(-print)。可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的操作。

实例:在 /usr/bin 目录中查找 zip 命令。

[root@localhost ~]# find /usr/bin/ -name zip -print
/usr/bin/zip
[root@localhost ~]# find /usr/bin/ -name zip
/usr/bin/zip

上面例子中,需要一个路径作为查找的范围,在这里是 /usr/bin/。find 命令会深入到这个目录的每一个子目录中去寻找。-name 选项指定了文件名,这里意思为“查找文件名为 zip 的文件”,-name 是允许使用通配符的,例如:find /usr/bin -name *.java -print 将列出 /usr/bin 目录下面所有 java 文件。-print 表示将结果输出到屏幕。注意,find 命令会打印出文件的绝对路径。

实例:使用 -type 选项来定位特殊文件类型。在 /etc/ 目录中查找名称为 sysconfig,类型为目录的目录。

[root@localhost ~]# find /etc/ -name sysconfig -type d -print
/etc/sysconfig

-type 可以使用的参数如下:

  • b:块设备文件

  • c:字符设备文件

  • d:目录文件

  • f:普通文件

  • p:命令管道

  • l:符号链接

实例:使用 -atime n 用来查找最后一次使用在 n 天前的文件,可以用 +n 表示大于 n,或 -n 表示小于 n。

[root@localhost ~]# find /root/ -atime +1 -print
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
[root@localhost ~]#

上面实例,查找 /root/ 目录下面最后一次使用大于1天的文件。

[root@localhost ~]# find /root/ -atime -1 -print
/root/
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.bash_history
/root/test1.txt
/root/test2.txt
/root/.lesshst

上面实例,查找 /root/ 目录下面最后一次使用小于1天的文件。

实例:使用 -mtime n 用来查找最后一次修改在 n 天前的文件,可以用 +n 表示大于 n,或 -n 表示小于 n。

[root@localhost ~]# find /root/ -mtime +1 -print
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
[root@localhost ~]#

上面实例,查找 /root/ 目录下面最后一次修改时间大于1天的文件。

[root@localhost ~]# find /root/ -mtime -1 -print
/root/
/root/.bash_history
/root/test1.txt
/root/test2.txt
/root/.lesshst
[root@localhost ~]#

上面实例,查找 /root/ 目录下面最后一次修改时间小于1天的文件。

locate —— 快速定位文件

尽管 find 命令已经展现了其强大的搜索功能,但对于大批量的搜索而言,还是显得慢了一些。特别是当用户完全不记得自己的文件放在哪里的时候。这是,locate 命令会是一个不错的选择。例如:

[root@localhost ~]# locate
-bash: locate: 未找到命令

上面提示没有 locate 命令,可以使用“yum list | grep locate”命令安装包。如下:

[root@localhost ~]# yum list | grep locate
mlocate.x86_64                              0.26-8.el7                 base

然后使用“yum install mlocate”安装 locate 命令。如下:

[root@localhost ~]# yum install mlocate
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                                                            | 3.6 kB  00:00:00
extras                                                                                                          | 2.9 kB  00:00:00
updates                                                                                                         | 2.9 kB  00:00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 mlocate.x86_64.0.0.26-8.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=======================================================================================================================================
 Package                         架构                           版本                                源                            大小
=======================================================================================================================================
正在安装:
 mlocate                         x86_64                         0.26-8.el7                          base                         113 k

事务概要
=======================================================================================================================================
安装  1 软件包

总下载量:113 k
安装大小:379 k
Is this ok [y/d/N]: y
Downloading packages:
mlocate-0.26-8.el7.x86_64.rpm                                                                                   | 113 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : mlocate-0.26-8.el7.x86_64                                                                                          1/1
  验证中      : mlocate-0.26-8.el7.x86_64                                                                                          1/1

已安装:
  mlocate.x86_64 0:0.26-8.el7

完毕!

这是就可以使用 locate 命令了。如下:

[root@localhost ~]# locate *.txt
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录

这是因为我们没有使用“updatedb”命令更新 locate 数据库。如下:

[root@localhost ~]# updatedb

继续使用 locate 命令查找所有 txt 文件。如下:

[root@localhost ~]# locate *.txt
/root/test1.txt
/root/test2.txt

为什么 locate 那么快呢?locate 并没有进入子目录搜索,而是通过搜索 updatedb 命令创建的文件名数据库索引来快速查找文件。

whereis —— 查找程序文件

whereis 命令主要用于查找程序文件,并提供这个文件的二进制可执行文件、源码文件和使用手册存放位置。

例如:查找 find 命令。

[root@localhost ~]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz

可以使用 -b 选项让 whereis 命令只查找指定命令的二进制文件。如下:

[root@localhost ~]# whereis -b find
find: /usr/bin/find

如果 whereis 没有找到文件,则返回一个空字符串。如下:

[root@localhost ~]# whereis finds
finds:

注意:whereis 命令只搜索 /usr/bin、/usr/sbin、和 /usr/share/man 目录。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号