wiki/运维/操作系统/Linux/笔记/9.文件查找.md
2026-04-08 15:02:24 +08:00

229 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 1、文件查找概览
Linux 中查找文件时,最常用的命令之一就是 `find`。它功能非常强,既可以按名称找文件,也可以按类型、属主、权限、时间、大小等多种条件组合查找。
在日常运维中,`find` 主要用于:
- 定位某个文件或目录
- 查找大文件、旧文件、异常权限文件
- 结合删除、统计、打包等命令做批量处理
## 2、`find` 基本格式
```shell
find [路径] [条件] [动作]
```
例如:
```shell
find /var/log -name "*.log"
```
表示在 `/var/log` 下查找所有 `.log` 文件。
## 3、目录深度控制
### 3.1 `-maxdepth`
限制最大搜索深度。
```shell
find /etc -maxdepth 2 -name "*.conf"
```
### 3.2 `-mindepth`
限制最小搜索深度。
```shell
find /data -mindepth 2 -type f
```
## 4、按名称和 inode 查找
### 4.1 `-name`
按文件名精确匹配查找,区分大小写。
```shell
find /tmp -name "test.txt"
```
### 4.2 `-iname`
按文件名查找,不区分大小写。
```shell
find /tmp -iname "test.txt"
```
### 4.3 `-inum`
按 inode 编号查找。
```shell
find / -inum 123456
```
这个场景在排查硬链接文件时比较有用。
## 5、按属主和属组查找
### 5.1 按用户查找
- `-user`:按用户名查找
- `-uid`:按 UID 查找
示例:
```shell
find /home -user lzc
find /home -uid 1000
```
### 5.2 按组查找
- `-group`:按组名查找
- `-gid`:按 GID 查找
示例:
```shell
find /data -group devops
find /data -gid 1001
```
## 6、按文件类型查找
### 6.1 `-type`
常见类型值:
- `f`:普通文件
- `d`:目录
- `l`:符号链接
- `s`:套接字文件
- `b`:块设备文件
- `c`:字符设备文件
- `p`:管道文件
示例:
```shell
find /etc -type f
find /var -type d
```
## 7、条件组合
`find` 支持逻辑组合条件:
- `-a`AND
- `-o`OR
- `-not`NOT
示例:
```shell
find /data -type f -a -name "*.log"
```
```shell
find /data \( -name "*.log" -o -name "*.txt" \)
```
## 8、按大小查找
### 8.1 `-size`
可以按文件大小查找,常见单位:
- `k`KB
- `M`MB
- `G`GB
示例:
```shell
find /var/log -size +100M
```
表示查找大于 100 MB 的文件。
## 9、按时间查找
时间条件是 `find` 的高频用法之一。
### 9.1 分钟级条件
- `-amin`:按访问时间(分钟)
- `-cmin`:按状态变更时间(分钟)
- `-mmin`:按内容修改时间(分钟)
### 9.2 天级条件
- `-atime`:按访问时间(天)
- `-ctime`:按状态变更时间(天)
- `-mtime`:按内容修改时间(天)
### 9.3 参考文件比较
- `-anewer`:访问时间比指定文件新
- `-cnewer`:状态变更时间比指定文件新
- `-newer`:修改时间比指定文件新
### 9.4 常见示例
查找最近 2 天内修改过的普通文件:
```shell
find /var -type f -mtime -2
```
查找比某个文件更新的文件:
```shell
find /etc -type f -newer /tmp/base.txt
```
查找 2 天内创建或修改的文件,也可以用:
```shell
find /var -type f -newermt "2 days ago"
```
## 10、常见实战场景
### 10.1 查找大日志文件
```shell
find /var/log -type f -size +500M
```
### 10.2 查找空文件
```shell
find /data -type f -size 0
```
### 10.3 查找最近修改的配置文件
```shell
find /etc -type f -mtime -1
```
### 10.4 查找某用户拥有的文件
```shell
find /home -user lzc
```
## 11、小结
- `find` 是 Linux 中最强大的文件查找命令之一
- 它可以按名称、类型、属主、大小、时间等多条件组合搜索
- `-type``-name``-size``-mtime` 是最常用的几类条件
- `-maxdepth``-mindepth` 能帮助控制搜索范围
- 实战中最常见的场景是找日志、大文件、旧文件、异常文件