当尝试在 Linux 系统上查找文件时,有很多方法可以缩小搜索范围。
Linux find命令可以根据您可能需要的几乎任何标准来查找文件。这篇文章描述了您可以用来查找所需内容的许多标准 – 即使您不记得文件的命名或上次更改文件或添加内容的时间。
基本查找语法
find 命令的基本语法如下所示:
$ find [起始位置] [条件] [选项] [要采取的操作]
起始位置可以是目录名称(例如,/var/log)、当前目录(.)、您的主目录(无论您是否位于其中)(~)或相对于您当前位置的目录(例如./bin)。输入起始位置时,您可以根据需要指定具体的位置。
按名称查找文件
按名称搜索文件是查找文件最简单、最直接的方法。请注意,下面的命令使用星号,以便它将查找以“fix”开头的任何文件。
$ find ~ -name "fix*" -print /home/shs/fixit
按类型查找文件
您还可以查找特定类型的文件(例如文件、目录或符号链接) 要查找文件,请使用“-type f”。
$ find Documents -name junk* -type f -print Documents/junk.odt Documents/junk.docx
要查找符号链接,请使用“-type l”。
$ find . -name "h*" -type l -ls 28603 0 lrwxrwxrwx 1 shs shs 9 Jun 27 12:27 ./hold -> /tmp/hold4me
要查找目录,请使用“-type d”。
$ find . -type d -ls | head -3 3389 4 drwxr-x--- 25 shs shs 4096 Jun 27 14:24 . 3467 4 drwxr-xr-x 2 shs shs 4096 May 20 2021 ./Pictures 3468 4 drwxr-xr-x 2 shs shs 4096 May 7 2021 ./Videos
确定您想看什么或做什么
您可能注意到在前面的两个命令中,您可以列出文件名(-ls表示长列表)或仅显示文件名(-print)。这些并不是唯一的选择。
要删除文件,您需要添加-exec rm命令,如下所示。此命令将从您的主目录(包括子目录)中删除任何带有“.old”扩展名的文件。
$ find ~ -name *.old -exec rm {} \;
exec命令甚至可以让您查看文件的内容。这是一个例子:
$ find . -name "h*" -type l -exec cat {} \; Meow, Meow!
按所有者和/或组查找文件
要按用户查找文件,请包含“-user uname”规范。您可以指定用户名或用户 ID。下面的第三个示例将生成错误(例如,权限被拒绝)的输出发送到 /dev/null,以便它不会使屏幕混乱。
$ find . -user shs -ls | head -4 3389 4 drwxr-x--- 25 shs shs 4096 Jun 27 13:18 . 5617 4 -rw-rw-r-- 1 shs shs 22 Feb 15 2021 ./CHECKME 8001 4 -rwx------ 1 shs shs 150 Feb 25 2021 ./send_msg 12727 24 -rw-rw-r-- 1 shs shs 20805 Apr 15 2021 ./history-rece $ find . -user 1000 -ls | head -4 3389 4 drwxr-x--- 25 shs shs 4096 Jun 27 13:18 . 5617 4 -rw-rw-r-- 1 shs shs 22 Feb 15 2021 ./CHECKME 8001 4 -rwx------ 1 shs shs 150 Feb 25 2021 ./send_msg 12727 24 -rw-rw-r-- 1 shs shs 20805 Apr 15 2021 ./history-recent $ find /tmp -user shs -ls 2> /dev/null 26476575 4 -rw-rw-r-- 1 shs shs 10 Jun 27 12:44 /tmp/haha 26476577 4 drwx------ 2 shs shs 4096 Jun 27 12:09 /tmp/tree 26476585 0 srwxrwxrwx 1 shs shs 0 Jun 27 12:09 /tmp/dbus 26476595 4 -r--r--r-- 1 shs shs 11 Jun 27 12:09 /tmp/.X1-lock
根据文件权限,您也许还可以找到属于其他用户的文件。
$ find /home -group tom -print /home/tom /home/tom/report /home/tom/myfile
要按组查找文件,请使用“-group gname”规范。可以使用组 ID 来代替组名称。
$ find /tmp -group 1000 -ls 2>/dev/null 26476575 4 -rw-rw-r-- 1 shs shs 10 Jun 27 12:44 /tmp/haha 26476577 4 drwx------ 2 shs shs 4096 Jun 27 12:09 /tmp/tracker-extract-files.1000 26476585 0 srwxrwxrwx 1 shs shs 0 Jun 27 12:09 /tmp/dbus-HpFApADlMO 26476595 4 -r--r--r-- 1 shs shs 11 Jun 27 12:09 /tmp/.X1-lock 26476580 0 srwxrwxrwx 1 shs shs 0 Jun 27 12:09 /tmp/.ICE-unix/2051 26476596 0 srwxrwxr-x 1 shs shs 0 Jun 27 12:09 /tmp/.X11-unix/X1 26476594 0 srwxrwxr-x 1 shs shs 0 Jun 27 12:09 /tmp/.X11-unix/X0 26476586 4 -r--r--r-- 1 shs shs 11 Jun 27 12:09 /tmp/.X0-lock
通过文件权限查找文件
要查找具有组写权限的文件,您可以使用如下命令:
$ find /usr/bin -name "net*" -perm -g=w -ls 26666 0 lrwxrwxrwx 1 root root 24 Feb 14 2021 /usr/bin/netcat -> /etc/alternatives/netcat
请注意,包含文件名的开头,否则会列出更多文件。
您还可以按文件权限查找文件,如以下示例所示,查找提供所有访问权限 (777) 的文件:
$ find /usr/bin -name "d*" -perm 777 -ls | head -3 34026 0 lrwxrwxrwx 1 root root 9 Mar 12 2021 /usr/bin/dvipdfmx -> xdvipdfmx 29934 0 lrwxrwxrwx 1 root root 18 Jan 29 2021 /usr/bin/distro-info -> ubuntu-distro-info 33159 0 lrwxrwxrwx 1 root root 6 Feb 17 2021 /usr/bin/dvilualatex -> luatex
按时间查找文件
要按期限查找文件,请使用-mtime选项,并使用 +100(超过 100 天)或 -10(最近 10 天内修改)等数字指定文件修改后的天数。
$ find Documents -mtime -1 Documents Documents/junk.doc
按大小查找文件
要查找空文件,请使用如下命令:
$ find . -size 0 -ls | head -1 28959 0 -rw-rw-r-- 1 shs shs 0 Jun 27 13:18 ./.abc
如果没有在这个例子中添加head命令,这个命令会发现更多的空文件——代表缓存等。
$ find . -size 0 -ls | wc -l 45
下一个命令查找大于 1 GB 的文件: 请注意,该命令将所有“权限被拒绝”消息发送到 /dev/null。
$ find / -type f -size +1G -ls 2>/dev/null 12 2097156 -rw------- 1 root root 2147483648 Feb 14 2021 /swapfile 18 8388612 -rw------- 1 root root 8589934592 Sep 9 2021 /mint/swapfile/40265
find命令有很多选项,当您在 Linux 系统上查找特定文件时,可以使用它们来缩小搜索范围。
本文由 @小喵 发布于弱电智能网 。
题图来自Unsplash,基于CC0协议
内容观点仅代表作者本人,弱电智能网平台仅提供信息存储空间服务。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
文章名称:《在 Linux 上以各种方式查找文件》
文章链接:https://www.ruodian360.com/tech/sytemops/49893.html
添加微信ydian188免费入群,记得备注“弱电智能网”。