在 Linux 系统上搜索文件的方法有很多,有的命令很简单,有的很详细。我们的目标是:缩小搜索范围,找到您正在寻找的文件,又不受其他文件的干扰。在今天的文章中,我们将研究一些对文件搜索最有用的命令和选项。我们将涉及:
- 快速搜索
- 更复杂的搜索条件
- 组合条件
- 反转条件
- 简单和详细的回应
- 寻找重复的文件
有很多有用的命令可以搜索文件,find
命令可能是其中最有名的,但它不是唯一的命令,也不一定总是找到目标文件的最快方法。
快速搜索命令:which 和 locate
搜索文件的最简单的命令可能就是 which
和 locate
了,但二者都有一些局限性。which
命令只会在系统定义的搜索路径中,查找可执行的文件,通常用于识别命令。如果您对输入 which
时会运行哪个命令感到好奇,您可以使用命令 which which
,它会指出对应的可执行文件。
$ which which
/usr/bin/which
which
命令会显示它找到的第一个以相应名称命名的可执行文件(也就是使用该命令时将运行的那个文件),然后停止。
locate
命令更大方一点,它可以查找任意数量的文件,但它也有一个限制:仅当文件名被包含在由 updatedb
命令构建的数据库时才有效。该文件可能会存储在某个位置,如 /var/lib/mlocate/mlocate.db
,但不能用 locate
以外的任何命令读取。这个文件的更新通常是通过每天通过 cron 运行的 updatedb
进行的。
简单的 find
命令没有太多限制,不过它需要指定搜索的起点和搜索条件。最简单的 find
命令:按文件名搜索文件。如下所示:
$ find . -name runme
./bin/runme
如上所示,通过文件名搜索文件系统的当前位置将会搜索所有子目录,除非您指定了搜索深度。
不仅仅是文件名
find
命令允许您搜索除文件名以外的多种条件,包括文件所有者、组、权限、大小、修改时间、缺少所有者或组,和文件类型等。除了查找文件外,您还可以删除文件、对其进行重命名、更改所有者、更改权限和对找到的文件运行几乎任何命令。
下面两条命令会查找:在当前目录中 root 用户拥有的文件,以及不被指定用户(在本例中为 shs)所拥有的文件。在这个例子中,两个输出是一样的,但并不总是如此。
$ find . -user root -ls
396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./xyz -> /home/peanut/xyz
$ find . ! -user shs -ls
396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./xyz -> /home/peanut/xyz
感叹号 !
字符代表“非”:反转跟随其后的条件。
下面的命令将查找具有特定权限的文件:
$ find . -perm 750 -ls
397176 4 -rwxr-x 1 shs shs 117 Sep 21 08:55 ./get-updates
397145 4 drwxr-x
via: <https://www.networkworld.com/article/3227075/linux/mastering-file-searches-on-linux.html>
作者:[Sandra Henry-Stocker](https://www.networkworld.com/author/Sandra-Henry_Stocker/) 译者:[jessie-pang](https://github.com/jessie-pang) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
发表回复