Linux Find 备忘清单

在这里插入图片描述

引言

这是 Linux find 命令备忘清单的快速参考列表,包含常用选项和示例。

一、入门

1.1 简介

  在 Linux 系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find在工作时会遍历指定的目录,通过匹配指定的条件搜寻我们需要的文件或者目录。因此,find命令具有以下特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 可能只搜索用户具备读取和执行权限的目录

1.2 命令用法

find 命令用于按照指定条件来查找文件所对应的位置,语法格式如下所示:

find [path...] [options] [expression]
参数描述
path…需要查找文件所指定的路径。如果不指定,则默认为当前目录及其子目录
options
expression匹配条件/表达式。如果未设置匹配条件,则默认查找指定目录及子目录下所有文件

find命令的参数以及作用如下表所示。

参数示例描述
-typefind . -type d仅查找目录
-namefind . -type f -name “*.txt”按名称查找文件
-inamefind . -type f -iname “hello”按名称查找文件(不区分大小写)
-sizefind . -size +1G查找大于 1G 的文件
-userfind . -type d -user jack查找杰克的文件
-regexfind /var -regex ‘.*/tmp/.[0-9].file’将正则表达式与查找一起使用
-maxdepthfind . -maxdepth 1 -name “a.txt”在当前目录和子目录中
-mindepthfind / -mindepth 3 -maxdepth 5 -name pass在子目录级别 2 和 4 之间
-atimefind / -atime 50访问时间(上次文件打开)
-mtimefind / -mtime 50修改时间(上次文件内容被修改)

二、基本使用

2.1 根据文件大小查找

命令用法为

find 搜索路径 [选项] 搜索内容

  其中,选项是 -size [+|-]N,这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。N为文件大小,单位为c/k/M/G,如下所示:

命令说明
-size b默认单位,如果单位为b或不写单位,则按照512 Byte搜索
-size c搜索单位是c,按照字节搜索。
-size w搜索单位是w,按照双字节(中文)搜索。
-size k按照KB单位搜索,必须是小写的k。
-size M按照MB单位搜索,必须是大写的M
-size G按照GB单位搜索,必须是大写的G

示例如下所示:

# 在当前目录下搜索文件大小为28k的文件
find . -size 28k

# 查找所有大于 10MB 的文件
find / -size +10M

# 查找所有小于 10MB 的文件
find / -size -10M

# 查找所有正好为 10M 的文件
find / -size 10M

# 查找 100MB 和 1GB 之间的大小
find / -size +100M -size -1G

2.2 根据文件类型查找

  Linux系统中的文件大致分为以下种:普通文件、目录文件、二进制程序文件、符号链接文件、套接字文件、块设备文件、字符设备文件。我们可以指定搜索文件的文件类型以达到查找文件的目的。命令用法为

find 搜索路径 [选项] 搜索内容

所搜文件的具体类型有TYPE的值确定。TYPE的值及具体含义如下:

命令说明
-type f查找普通文件
-type d查找目录文件
-type l查找符号链接文件
-type s查找套接字文件
-type b查找块设备文件
-type c查找字符设备文件
-type p查找管道文件

示例如下所示:

# 使用名称查找目录
find / -type d -name tecmint

# 使用名称查找php文件
find . -type f -name tecmint.php

# 查找目录下的所有php文件
find . -type f -name "*.php"

2.3 根据文件名查找

在下面的例子中,我们使用了-name选项查找f开头的文件,现在我们开始讲解如何根据文件名查找指定文件。

find 搜索路径 [选项] 搜索内容

其中,选项参数如下表所示:

参数说明
-name按照文件名搜索
-iname按照文件名搜索,不区分文件名大小写

示例如下所示:

# 在当前目录中使用名称查找文件
find . -name tecmint.txt

# 查找主目录下的文件
find /home -name tecmint.txt

# 使用名称查找文件并忽略大小写
find /home -iname tecmint.txt

2.4 指定搜索目录层级/深度

  指定搜索目录的层级需要用到选项-maxdepth和-mindepth,分别指定搜索目录的最大深度和最小深度。两个选项可以配合使用,指定搜索目录的深度范围。如果-maxdepth/-mindepth二者的参数相同,则find命令会搜索某个特定深度的文件。

参数说明
-maxdepth level指定最大搜索目录深度level,指定的目录为第1级
-mindepth level指定最小搜索目录深度level。配合-maxdepth可搜索指定深度的文件。

示例如下所示:

# 该命令中”/”为第一级目录,查找文件的最大目录深度为2。
find / -maxdepth 2 -name "*.conf"

2.5 根据权限查找

我们可以根据文件三类访问对象的三种三种权限查找对应文件,命令用法如下:

find 搜索路径 [选项] 搜索内容

其中,选项参数如下表所示:

参数描述
-perm查找文件权限刚好等于“权限模式”的文件
-perm -权限模式查找文件权限全部包含“权限模式”的文件
-perm +权限模式查找文件权限包含“权限模式”的任意一个权限的文件

示例如下所示:

# 查找权限为 777 的文件
find . -type f -perm 0777 -print

# 查找未经许可的文件 777
find / -type f ! -perm 777

# 查找 SUID 集文件
find / -perm /u=s

# 查找 SGID 集文件
find / -perm /g=s

# 查找只读文件
$ find / -perm /u=r

# 查找可执行文件
find / -perm /a=x

2.6 根据属主/属组查找

根据文件的属主以及属组信息,我们可以查找符合指定属主、属组的文件。相关选项用法如下:

find 搜索路径 [选项] 搜索内容

其中,选项参数如下表所示:

命令说明
-user username查找属主为指定用户(UID)的文件
-group groupname查找属组为指定组(GID)的文件
-uid UseerID查找属主为指定的UID号的文件
-gid GroupID查找属组为指定的GID号的文件
-nouser查找没有属主的文件
-nogroup查找没有属组的文件

示例如下所示:

# 根据用户查找单个文件
find / -user root -name tecmint.txt

# 根据用户查找所有文件
find /home -user tecmint

# 根据组查找所有文件
find /home -group developer

# 查找用户的特定文件
find /home -user tecmint -iname "*.txt"

2.7 多个文件名

# 查找带有 .sh 或 .txt 扩展名的文件
find . -type f \( -name "*.sh" -or -name "*.txt" \)

2.8 多个目录

# 查找具有多个目录的文件
find /opt /usr /var -name foo.scala -type f

2.9 根据时间戳查找

  文件的时间戳分为访问时间(access time)、修改时间(modify time)、创建时间(create time),分别简写为atime/mtime/ctime。我们可以根据这三个时间戳查找对应文件。命令用法如下:

find 搜索路径 [选项] 搜索内容

其中,选项参数如下表所示:

参数说明
-atime [+|-]时间按照文件访问时间搜索
-mtime [+|-]时间按照文件数据修改时间搜索
-ctime [+|-]时间按照文件状态修改时间搜索

提示:也有-amin、-mmin等时间选项,时间单位为分钟。

命令说明
-mtime +024 小时前修改
-mtime 0从现在到 1 天前修改
-mtime -1不到 1 天前修改(与 -mtime 0 相同)
-mtime 124 至 48 小时前修改
-mtime +1超过 48 小时前修改
-mtime +1w上次修改时间超过 1 周前
-atime 0从现在到 24 小时前最后一次访问
-atime +0访问时间超过 24 小时
-atime 1在 24 至 48 小时前访问
-atime +1访问时间超过 48 小时
-atime -1不到 24 小时前访问过(与 -atime 0 相同)

示例如下所示:

# 查找最近 50 天修改的文件
find / -mtime 50

# 查找最近 50 天访问的文件
find / -atime 50

# 查找最近 50-100 天修改的文件
find / -mtime +50 –mtime -100

# 查找最近 1 小时内更改的文件
find / -cmin -60

# 查找最近 1 小时内修改过的文件
find / -mmin -60

# 查找最近 1 小时内访问过的文件
find / -amin -60

三、进阶使用

有时候我们查找文件可能还会对这些文件进行后续的操作,例如删除,修改权限等。可以使用以下命令:

命令说明
-print默认的处理动作,显示至屏幕
-ls类似于对查找到的文件执行“ls -l”命令
-delete删除查找到的文件 慎用!
-fls file查找到的所有文件的长格式信息保存至指定文件中,也可用重定向的方式
-ok COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令,没有-ok中的交互式确认。
其中{}用于引用查找到的文件名称自身,;是配合-ok和-exec选项的

3.1 查找和删除

# 查找并删除多个文件
find . -type f -name "*.mp3" -exec rm -f {} \;

# 查找和删除单个文件
find . -type f -name "tecmint.txt" -exec rm -f {} \;

# 查找和删除 100mb 文件
find / -type f -size +100m -exec rm -f {} \;

# 查找特定文件并删除
find / -type f -name *.mp3 -size +10m -exec rm {} \;

3.2 查找和移动

# 查找并将其移动到特定目录
find . -name '*.mp3' -exec mv {} /tmp/music \;

3.3 查找和复制

# 查找并将其复制到特定目录
find . -name '*2020*.xml' -exec cp -r "{}" /tmp/backup \;

3.4 查找和排序

find . -printf "%T+\t%p\n" | sort
find . -printf "%T+\t%p\n" | sort -r

3.5 查找和 chmod

# 查找文件并将权限设置为 644
find / -type f -perm 777 -print -exec chmod 644 {} \;

# 查找目录并将权限设置为 755。
find / -type d -perm 777 -print -exec chmod 755 {} \;

3.6 查找并排除目录

# 查找当前目录及子目录中的所有js文件,但是排除掉node_modules目录中的
find . -type f -name "*.js" -not -path "./node_modules/*"

四、小结

  find命令通常进行的是从根目录开始的全盘搜索,搜索位置越大,消耗系统资源越多。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独泪了无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值