当前位置:首页>弱电技术>系统运维>在 Linux 上以各种方式查找文件

在 Linux 上以各种方式查找文件

在 Linux 上以各种方式查找文件

当尝试在 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免费入群,记得备注“弱电智能网”。

给TA打赏
共{{data.count}}人
人已打赏
系统运维

如何确定 Linux 系统的文件系统类型

2023-9-1 22:37:21

系统运维

在 Linux 上为用户分配 sudo 权限

2023-9-1 22:58:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
搜索