Linux下常用的find指令以及其他查找命令

首先顾名思义“find”就是查找的意思,那么接下来说一下find指令的重要性吧,因为在Linux操作系统”一切皆文件“的理念下,我们已经不是靠文件的后缀名来识别一个文件了。这时候你要想找到一个特定的文件就变得相对困难了,那么你有必要了解一个find这个强大的指令了。


find命令的格式:find [指定的目录] [查找规则] [查找到后进行的操作]
1、根据文件名来查找
-name :区分大小写
-iname : 不区分大小写
这里写图片描述
2、按照文件的权限来匹配
-perm : 一般使用八进制的权限表示
例如
find -perm 700:查找-rwxrwxrwx的文件
find -perm 662:查找-rw-rw-r– 的文件
这里写图片描述
3、按照文件的类型来查找
-type:
b : 块设备文件(磁盘)
d:目录文件
c:字符设备文件
p:管道文件
l:符号链接文件
f:普通文件
这里写图片描述

4、根据文件的大小来查找
-size

find -size +5000c 表示查找大于5000个字节的文件
find -size -20c 表示查找小于20个字节的文件
加上c是表示以字节数。
这里写图片描述
也可以直接通过find -size +4000c -size -4500c更加精确的找到文件
这里写图片描述

5、根据时间相关的属性来查找

通过stat可查看文件的下面三个时间,详情请看上篇文章。
-atime:最后一个访问文件的时间
-mtime:最后一次改变文件内容的时间
-ctime:最后一次改变文件属性的时间

-amin
-mmin
-cmin
这三个是以分钟为单位来查找的,具体实现如下:
find -atime +1 :一天内没有被访问过的文件
find -atime -1 : 一天内被访问过的文件
这里写图片描述

6、执行操作
-print:将匹配的文件输出到标准输出。
-exec:对匹配的文件执行所给出的shell命令。-exec ‘command’ {} \;
_ls:将匹配的文件用ls显示出来
-ok:和-exec相似,只不过在执行前询问是否执行,较为安全。

find -name “file1” -print
这里写图片描述
find -name “file1” -ls
这里写图片描述
find -size +4000c -size -4500c –exec rm –rf {} \;
这里需要特别说明一下,{}代表查询后匹配的文件,还有需要注意{}和\之间的空格
这里写图片描述
这里可以看到file1文件已经被删除了。


上面就是关于find命令的介绍,但事实上,在大多数情况下,我们是用不到find这个命令的,原因就是find查找太慢了。下再来稍微总结一下几个常见的查找命令之间的优点和缺点

  • whereis:是用来查找特定的文件的
-m:查找二进制文件
-b:查找在说明文件manual路径下的文件
-s:查找source源文件
-u:查找不属于上述三个选项的特殊文件

比如我只想查找有关passwd的说明文件,这时候就可以加-m的参数:
这里写图片描述
这样直接很直接说明whereis这个命令,就是想要查找某些特定的文件

  • locate
-i:忽略大小的区别
-r:后面可以直接跟正则表达式

这个命令的使用非常简单快捷,因为它是在已创建好的数据库(var/lib/mlocate)中查找数据的,所以速度非常快,但是相应的就会有自己的弊端,比如你刚创建的一些文件还没来得及写入数据库,这时候你查找就是显示该文件不存在这样的情况。
其实这时候你可以运行updatedb命令来更新数据库,不过可能得等一两分钟。
这里写图片描述
这里我第一次查找passwd文件失败,更新数据库前后的样子,可以看一下,便于理解。

  • which
-a:所有由path路径可以找到的命令,而不是第一个

这里有几个需要注意的地方,用实例来说明
1、查找which文件:
这里写图片描述
这里看到,找到两个which,上面的那个其实是命令别名,就像你日常使用的ll命令其实是ls -l,只不过使用了命令别名而已。

2、查找cd的完整文件名
这里写图片描述
哈哈,竟然说没找到,这是怎么一回事啊,其实是因为cd这个命令是bash内置的命令,并不在path指定的路径下,所以就找不到了。

上面就是linux下常见的查找方面的文件了,起初是总结一下find的,后来接触到更多,就加在后面了。

最后补充一点,whereis和locate是在数据库中查找的,所以非常快速,比较常用,而find是检索整个硬盘,准确性相对较高,但相对的就是速度慢啦。

<think>我们被要求解释Linux中的`find`命令,并按照指定格式输出。 首先,我们需要详细解释`find`命令的用法,包括基本语法、常用选项、表达式以及示例。 然后,在回答的最后,必须提出3-5个相关问题,以“§§相关问题§§”开头,且禁止换行分散。 注意:回答必须使用中文,并且符合用户提供的格式要求。 下面开始组织回答:</think>### `find` 命令Linux 中的深度使用指南 `find` 是 Linux 最强大的文件搜索工具,支持**条件搜索+执行操作**,以下是核心用法: --- #### 一、基础搜索语法 ```bash find [路径] [表达式] [操作] ``` --- #### 二、关键搜索条件(表达式) | **表达式** | **功能** | **示例** | |------------|----------|----------| | `-name` | 按文件名匹配 | `find /var/ -name "*.log"` | | `-type` | 按文件类型过滤 | `find . -type d`(目录)<br>`find ~ -type f -size +1M`(普通文件) | | `-size` | 按文件大小过滤 | `find /tmp -size -10k`(<10KB)<br>`find / -size +500M`(>500MB) | | `-mtime` | 按修改时间过滤 | `find /backup -mtime -7`(7天内修改) | | `-user` | 按所有者过滤 | `find /home -user alice` | | `-perm` | 按权限过滤 | `find . -perm 644`(精确权限)<br>`find / -perm -u=s`(SUID文件) | --- #### 三、逻辑组合与高级过滤 ```bash # 组合条件(AND 逻辑) find ~/ -name "*.jpg" -size +2M # 同时满足两个条件 # 或逻辑(-o)与非逻辑(!) find /var/log/ \( -name "*.log" -o -name "*.tmp" \) ! -user root # 深度控制 find . -maxdepth 2 -type f # 仅搜索2层子目录 find / -mindepth 3 -name config # 跳过前3层目录 ``` --- #### 四、执行操作(Action) | **操作** | **功能** | **示例** | |----------|----------|----------| | `-print` | 默认输出结果(可省略) | `find . -name "*.bak"` | | `-delete` | 直接删除文件 | `find /tmp -mtime +30 -delete` | | `-exec` | 执行自定义命令 | `find . -size +100M -exec ls -lh {} \;` | | `-ok` | 交互式确认执行 | `find ~ -name "*.tmp" -ok rm {} \;` | | `-printf` | 格式化输出 | `find . -printf "%p - %s bytes\n"` | --- #### 五、高级应用场景 1. **批量重命名** ```bash find . -name "*.jpeg" -exec rename 's/\.jpeg$/.jpg/' {} \; ``` 2. **查找并压缩旧日志** ```bash find /logs -name "*.log" -mtime +90 -exec gzip {} \; ``` 3. **查找空文件/目录** ```bash find ~ -empty # 空文件或目录 find / -type d -empty # 仅空目录 ``` 4. **权限修复** ```bash find . -type f -perm 0777 -exec chmod 644 {} \; ``` --- #### 六、性能优化技巧 1. **避免全盘搜索** ```bash # 错误:消耗资源 find / -name config # 正确:限定路径 find /etc /usr/local/etc -name config ``` 2. **优先使用 `locate`** ```bash updatedb && locate "*.doc" # 基于索引(更快但非实时) ``` 3. **并行处理加速** ```bash find . -type f -print0 | xargs -0 -P 4 md5sum # 4线程计算哈希 ``` --- #### 七、危险操作规避 ```bash # 危险:可能误删系统文件 find / -name "core" -delete # 安全替代:先预览再操作 find ~ -name "*.tmp" -exec echo "Will delete: {}" \; -delete ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值