229 lines
3.8 KiB
Markdown
229 lines
3.8 KiB
Markdown
## 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` 能帮助控制搜索范围
|
||
- 实战中最常见的场景是找日志、大文件、旧文件、异常文件
|