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