安卓系统

如何使用命令行在Linux中查找文件

Linux系统常用命令 [LinuxCast视频教程]

Linux系统常用命令 [LinuxCast视频教程]

目录:

Anonim

find 命令是Linux系统管理员中最强大的工具之一。 它根据用户给定的表达式在目录层次结构中搜索文件和目录,并且可以对每个匹配的文件执行用户指定的操作。

您可以使用 find 命令根据文件和目录的权限,类型,日期,所有权,大小等来搜索它们。 它也可以与其他工具(例如 grep sed 结合使用。

Linux find 命令语法

find 命令的一般语法如下:

find

  • options 属性控制符号链接,调试选项和优化方法的处理。path path… 属性定义find搜索文件的一个或多个起始目录。expression属性由选项,搜索模式和由操作员分隔的动作。

要在目录中搜索文件,调用 find 命令的用户需要对该目录具有读取权限。

让我们看下面的例子:

find -L /var/www -name "*.js"

  • 选项 -L (选项)告诉 find 命令跟随符号链接。/ /var/www (路径…)指定要搜索的目录。(表达式) -name "*.js 告诉 find 搜索以文件结尾的文件 .js (JavaScript文件)。

按名称查找文件

通过名称查找文件可能是 find 命令最常见的用法。 要使用名称查找文件,请在要搜索的文件名后加上 -name 选项。

例如,要在 /home/linuxize 目录中搜索名为 document.pdf ,可以使用以下命令:

find /home/linuxize -type f -name document.pdf

要运行不区分大小写的搜索,请使用 -iname 更改 -name 选项:

find /home/linuxize -type f -iname document.pdf

上面的命令将匹配“ Document.pdf”,“ DOCUMENT.pdf”.. etc。

按扩展名查找文件

按扩展名搜索文件与按名称搜索文件相同。 例如,要在 /var/log/nginx 目录中查找所有以 .log.gz 结尾的文件,可以使用:

find /var/log/nginx -type f -name '*.log.gz'

重要的是要提到,当您使用通配符时,必须引用该模式或使用反斜杠 \ 来代替星号 * 符号,以免外壳程序解释它。

要查找与正则表达式 *.log.gz 不匹配的所有文件,可以使用 *.log.gz 选项。 例如,要查找所有不以 *.log.gz 结尾的文件,可以使用:

find /var/log/nginx -type f -not -name '*.log.gz'

按类型查找文件

有时您可能需要搜索特定的文件类型,例如普通文件,目录或符号链接。 在Linux中,所有内容都是文件。

要基于文件的类型搜索文件,请使用 -type 选项和以下描述符之一来指定文件类型:

  • f :常规文件 d :目录 l :符号链接 c :字符设备 b :块设备 p :命名管道(FIFO) s :套接字

例如,要查找当前工作目录中的所有目录,可以使用:

find. -type d

常见示例是使用 chmod 命令将网站文件权限递归更改为 644 ,将目录权限递归更改为 755

find /var/www/my_website -type d -exec chmod 0755 {} ; find /var/www/my_website -type f -exec chmod 0644 {} ;

按大小查找文件

要基于文件大小查找文件,请传递 -size 参数以及大小标准。 您可以使用以下后缀指定文件大小:

  • b :512字节块(默认) c :字节 w :两字节字 k :千字节 M :兆字节 G :千兆字节

以下命令将在 /tmp 目录中找到所有 1024 个字节的文件:

find /tmp -type f -size 1024c

使用 find 命令还可以搜索大于或小于指定大小的文件。

在以下示例中,我们正在当前工作目录中搜索所有小于 1MB 的文件。 注意大小值之前的减号 -

find. -type f -size -1M

find. -type f -size +1M

您甚至可以搜索大小范围内的文件。 以下命令将查找 1 2MB 之间的所有文件:

find. -type f -size +1M -size 21M

按修改日期查找文件

find 命令还可以根据文件的最后修改,访问或更改时间来搜索文件。

与按大小搜索时相同,使用加号和减号表示“大于”或“小于”。

假设几天前,您修改了一个dovecot配置文件,但是却忘记了其中一个。 您可以轻松过滤 /etc/dovecot/conf.d 目录下以 .conf 结尾并在最近五天内进行了修改的所有文件:

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

这是另一个使用 -daystart 选项根据修改日期过滤文件的 -daystart 。 以下命令将列出 /home 目录中 30 天或更早之前修改的所有文件:

find /home -mtime +30 -daystart

按权限查找文件

-perm 选项允许您根据文件许可权搜索文件。

例如,要在 /var/www/html 目录中查找所有权限完全为 775 的文件,请使用:

find /var/www/html -perm 644

您可以在数字模式前加上减号 - 或斜杠 /

当将斜杠 / 用作前缀时,则至少一个类别(用户,组或其他类别)必须至少设置相应的位,文件才能匹配。

考虑以下示例命令:

find. -perm /444

上面的命令将匹配所有为用户,组或其他用户设置了读取权限的文件。

如果将减号 - 用作前缀,则必须设置文件以至少匹配指定的位。 以下命令将搜索对所有者和组具有读写权限并且可由其他用户读取的文件:

find. -perm -664

按所有者查找文件

要查找特定用户或组拥有的文件,请使用 -user -group 选项。

例如,要搜索 linuxize 用户拥有的所有文件和目录,可以运行:

find / -user linuxize

这是一个真实的例子。 假设您要查找用户 www-data 拥有的所有文件,并将匹配文件的所有权从 www-data 更改为 nginx

find / -user www-data -type f -exec chown nginx {} ;

查找和删除文件

要删除所有匹配文件,请将 -delete 选项附加到匹配表达式的末尾。

确保仅在确信结果与要删除的文件匹配时,才使用此选项。 在使用 -delete 选项之前,最好先打印匹配的文件。

例如,要从 /var/log/ 删除所有以 .temp 结尾的文件,您可以使用:

find /var/log/ -name `*.temp` -delete 谨慎使用 -delete 选项。 find命令行被评估为表达式,如果您首先添加 -delete 选项,则该命令将删除指定起点以下的所有内容。

对于目录, find 只能删除与 rmdir 相同的空目录。

结论

我们向您展示了如何在各种选项和条件下使用 find 命令。

本文应该使您对如何在Linux系统上定位文件有基本的了解。 您也可以访问 find 手册页,并阅读 find 命令的所有其他强大功能。

查找终端