第402集系统管理-Linux系统文件查找
|字数总计:3.8k|阅读时长:16分钟|阅读量:
系统管理 - Linux系统文件查找
1. 文件查找概述
Linux系统中的find命令在查找文件时非常有用而且方便。
它可以根据不同的条件来进行查找文件:例如权限、拥有者、修改日期/时间、文件大小等等。 同时find命令是Linux下必须掌握的。
1.1 find命令基本语法
1
| find [搜索路径] [搜索条件] [处理动作]
|
基本格式:
- 搜索路径: 指定查找的目录,可以是多个目录
- 搜索条件: 指定查找的条件(名称、大小、时间、用户等)
- 处理动作: 对找到的文件执行的操作(默认是-print)
1.2 find命令特点
- 功能强大: 支持多种查找条件
- 递归查找: 默认递归查找子目录
- 精确匹配: 支持精确匹配和模糊匹配
- 组合条件: 支持多个条件组合(AND、OR)
- 执行动作: 可以对找到的文件执行各种操作
2. find名称查找
2.1 基本名称查找
1 2 3 4 5 6 7 8
| touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}
[root@liyanzhao ~]
[root@liyanzhao ~]
|
2.2 通配符查找
1 2 3 4 5
| [root@liyanzhao ~]
[root@liyanzhao ~]
|
2.3 名称查找常用模式
| 模式 |
说明 |
示例 |
"filename" |
精确匹配 |
find /etc -name "passwd" |
"file*" |
以file开头 |
find /etc -name "ifcfg*" |
"*file" |
以file结尾 |
find /etc -name "*.conf" |
"*file*" |
包含file |
find /etc -name "*network*" |
"file?" |
单个字符匹配 |
find /etc -name "file?" |
2.4 名称查找选项
| 选项 |
功能 |
示例 |
-name |
区分大小写匹配 |
find /etc -name "*.conf" |
-iname |
不区分大小写匹配 |
find /etc -iname "*.conf" |
3. find大小查找
3.1 大小查找语法
1
| find [路径] -size [+|-|=]大小
|
大小单位:
c: 字节(默认)
k: KB
M: MB
G: GB
3.2 大小查找示例
1 2 3 4 5 6 7 8
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
3.3 大小查找说明
| 符号 |
说明 |
示例 |
+ |
大于指定大小 |
find /etc -size +5M |
- |
小于指定大小 |
find /etc -size -5M |
| 无符号 |
等于指定大小(近似) |
find /etc -size 5M |
3.4 大小查找实战
1 2 3 4 5 6 7 8 9 10 11
| find /var -size +100M
find /etc -size -1k
find /tmp -size 0
find /var/log -size +500M -ls
|
4. find时间查找
4.1 时间查找类型
| 选项 |
说明 |
时间类型 |
-mtime |
修改时间(内容修改) |
天 |
-ctime |
改变时间(属性改变) |
天 |
-atime |
访问时间 |
天 |
-mmin |
修改时间 |
分钟 |
-cmin |
改变时间 |
分钟 |
-amin |
访问时间 |
分钟 |
4.2 时间查找语法
1
| find [路径] -mtime [+|-|=]天数
|
时间说明:
+n: n天以前(不包含第n天)
-n: n天以内(包含第n天)
n: 正好第n天(不包含当天)
4.3 时间查找示例
1 2 3 4 5 6 7 8 9 10 11
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
4.4 时间查找实战案例
1 2 3 4 5 6 7 8 9 10 11 12
| find /backup/ -iname "*.bak" -mtime +7 -delete find /backup/ -iname "*.bak" -mtime +90 -delete
find /var/log -mtime -1
find /tmp -mmin -30
find /var/cache -atime +7 -delete
|
4.5 时间查找详细说明
| 表达式 |
含义 |
说明 |
-mtime +7 |
7天以前 |
不包含第7天和当天 |
-mtime -7 |
7天以内 |
包含第7天和当天 |
-mtime 7 |
正好第7天 |
不包含当天 |
-mmin +30 |
30分钟以前 |
不包含第30分钟 |
-mmin -30 |
30分钟以内 |
包含第30分钟 |
5. find用户查找
5.1 用户查找选项
| 选项 |
功能 |
示例 |
-user |
查找指定用户的文件 |
find /home -user jack |
-group |
查找指定组的文件 |
find /home -group admin |
-nouser |
查找没有属主的文件 |
find /home -nouser |
-nogroup |
查找没有属组的文件 |
find /home -nogroup |
5.2 用户查找示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
5.3 逻辑运算符
| 运算符 |
说明 |
示例 |
-a 或 空格 |
AND(与) |
find /home -user jack -a -group admin |
-o |
OR(或) |
find /home -user jack -o -group admin |
! 或 -not |
NOT(非) |
find /home ! -user root |
5.4 用户查找实战
1 2 3 4 5 6 7 8 9 10 11
| find /home -user root
find / -nouser -ls
find / -nogroup -ls
find /var/www -user www-data -group www-data
|
6. find类型查找
6.1 文件类型选项
| 选项 |
类型 |
说明 |
示例 |
-type f |
普通文件 |
常规文件 |
find /dev -type f |
-type d |
目录 |
目录文件 |
find /dev -type d |
-type l |
链接文件 |
符号链接 |
find /dev -type l |
-type b |
块设备 |
块设备文件 |
find /dev -type b |
-type c |
字符设备 |
字符设备文件 |
find /dev -type c |
-type s |
套接字 |
Socket文件 |
find /dev -type s |
-type p |
管道文件 |
命名管道 |
find /dev -type p |
6.2 类型查找示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
6.3 类型查找实战
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| find /tmp -type f
find /var -type d
find /usr/bin -type l
find /dev -type b -ls
find /dev -type c -ls
|
7. find权限查找
7.1 权限查找语法
权限模式:
- 精确匹配:
-perm 644 - 权限必须完全匹配
- 至少匹配:
-perm -644 - 权限至少包含指定权限
- 任意匹配:
-perm /644 - 任意位匹配即可
7.2 权限查找示例
1 2 3 4 5 6 7 8 9 10 11
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
7.3 权限查找说明
| 模式 |
说明 |
示例 |
-perm 644 |
精确匹配 |
权限必须正好是644 |
-perm -644 |
至少匹配 |
权限至少包含644(644、755等) |
-perm /644 |
任意匹配 |
任意位匹配即可 |
7.4 特殊权限查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
find /usr -perm -4000 -type f -ls
find /usr -perm -2000 -type f -ls
find /tmp -perm -1000 -type d -ls
|
7.5 权限查找实战
1 2 3 4 5 6 7 8 9 10 11
| find /var -perm -222 -type f -ls
find /tmp -perm -111 -type f -ls
find / -perm -6000 -type f -ls
find /home -perm -077 -type f -ls
|
8. find处理动作
当查找到一个文件后, 需要对文件进行如何处理, 默认动作是 -print
8.1 处理动作选项
| 选项 |
功能 |
说明 |
-print |
打印(默认) |
打印找到的文件路径 |
-ls |
以长格式打印显示 |
类似ls -l的输出 |
-delete |
删除查找到的文件 |
仅能删除空目录 |
-exec |
执行自定义命令 |
标准写法 -exec {} \; |
-ok |
执行自定义命令(交互) |
会提示是否操作 |
8.2 打印动作
1 2 3 4 5 6 7 8
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
8.3 删除动作
1 2 3 4 5 6 7 8 9 10 11
| [root@liyanzhao ~]
[root@liyanzhao ~]
find /tmp -type d -empty -delete
find /var/log -name "*.log" -mtime +7 -delete
|
8.4 执行动作(-exec)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@liyanzhao ~]
find /tmp -name "*.tmp" -exec mv {} /backup/ \;
find /var/www -type f -exec chmod 644 {} \;
find /var/www -type d -exec chmod 755 {} \;
find /var/log -name "*.log" -exec gzip {} \;
|
8.5 交互执行动作(-ok)
1 2 3 4 5 6 7
| [root@liyanzhao ~] < cp ... /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp > ? y < cp ... /etc/sysconfig/network-scripts/ifcfg-eth1 /tmp > ? n
find /tmp -name "*.tmp" -ok rm {} \;
|
8.6 -exec语法说明
1 2 3 4 5 6 7 8 9 10
| find [路径] [条件] -exec command {} \;
find /etc -name "*.conf" -exec ls -l {} \;
|
9. find结合xargs
9.1 find与xargs结合
xargs可以将find查找到的结果一个一个的处理,比-exec更高效。
1 2 3 4 5 6
| [root@liyanzhao ~] [root@liyanzhao ~]
[root@liyanzhao~]
|
9.2 find与xargs对比
| 方式 |
语法 |
特点 |
-exec |
find ... -exec cmd {} \; |
每个文件执行一次命令 |
xargs |
find ... | xargs cmd |
批量处理,更高效 |
9.3 find与xargs示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| find /tmp -name "*.tmp" |xargs rm -f
find /etc -name "*.conf" |xargs -I {} cp {} /backup/
find /var/www -type f |xargs chmod 644
find /etc -name "*.conf" |xargs grep "root"
find /etc -name "*.conf" |xargs wc -l
find /var/log -name "*.log" |xargs gzip
|
9.4 xargs常用选项
| 选项 |
功能 |
示例 |
-I {} |
指定占位符 |
find ... | xargs -I {} cp {} /tmp |
-n |
每次传递的参数个数 |
find ... | xargs -n 2 |
-p |
交互式确认 |
find ... | xargs -p rm |
-t |
显示执行的命令 |
find ... | xargs -t rm |
10. find组合条件
10.1 逻辑运算符
1 2 3 4 5 6 7 8 9 10 11 12
| find /home -user jack -group admin
find /home -user jack -a -group admin
find /home -user jack -o -group admin
find /home ! -user root find /home -not -user root
|
10.2 组合条件示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| find /home -user jack -name "*.conf"
find /var -size +100M -size -1G
find /var/log -name "*.log" -mtime +7
find /usr/bin -user root -type f -perm -111
find /tmp \( -type f -empty \) -o \( -type d -empty \)
|
10.3 优先级控制
1 2 3 4 5 6
| find /home \( -user jack -o -user alice \) -name "*.txt"
find /home -user jack -o -user alice -name "*.txt" find /home \( -user jack -o -user alice \) -name "*.txt"
|
11. find实战案例
11.1 案例1: 清理临时文件
1 2 3 4 5 6 7 8
| find /tmp -type f -mtime +7 -delete
find /tmp -type f -empty -delete
find /tmp -name "*.tmp" -mtime +3 -delete
|
11.2 案例2: 查找大文件
1 2 3 4 5 6 7 8
| find /var -type f -size +100M -ls
find /var -type f -exec ls -lh {} \; |sort -k5 -hr |head -10
find /var/log -type f -size +50M -exec ls -lh {} \;
|
11.3 案例3: 安全审计
1 2 3 4 5 6 7 8 9 10 11
| find /usr -perm -4000 -type f -ls
find /var -perm -002 -type f -ls
find / -nouser -ls
find / -nogroup -ls
|
11.4 案例4: 日志管理
1 2 3 4 5 6 7 8
| find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
find /var/log -name "*.log" -mtime +30 -delete
find /var/log -name "*.log" -mtime +7 |xargs -I {} cp {} /backup/
|
11.5 案例5: 文件备份
1 2 3 4 5 6 7 8
| find /etc -name "*.conf" -exec cp {} /backup/etc/ \;
find /var/www -name "*.php" |xargs tar czf php_backup.tar.gz
find /data -type f -mtime -1 |xargs -I {} rsync -av {} /backup/
|
12. find性能优化
12.1 优化建议
- 限制搜索范围: 尽量指定具体的搜索路径
- 使用索引: 对于经常搜索的目录,考虑使用locate
- 避免深度搜索: 使用
-maxdepth限制搜索深度
- 组合条件顺序: 将选择性高的条件放在前面
12.2 限制搜索深度
1 2 3 4 5 6 7 8
| find . -maxdepth 1 -name "*.txt"
find /var -maxdepth 2 -name "*.log"
find /var -mindepth 2 -maxdepth 4 -name "*.conf"
|
12.3 性能对比
1 2 3 4 5 6 7 8
| find / -name "*.conf"
find /etc -name "*.conf"
find /etc -maxdepth 2 -name "*.conf"
|
13. 命令总结
13.1 find查找条件
| 条件类型 |
选项 |
示例 |
| 名称 |
-name, -iname |
find /etc -name "*.conf" |
| 大小 |
-size |
find /var -size +100M |
| 时间 |
-mtime, -mmin |
find /tmp -mtime +7 |
| 用户 |
-user, -group |
find /home -user jack |
| 类型 |
-type |
find /dev -type f |
| 权限 |
-perm |
find /usr -perm -4000 |
13.2 find处理动作
| 动作 |
选项 |
示例 |
| 打印 |
-print, -ls |
find /etc -name "*.conf" -ls |
| 删除 |
-delete |
find /tmp -name "*.tmp" -delete |
| 执行 |
-exec |
find /etc -name "*.conf" -exec cp {} /tmp \; |
| 交互 |
-ok |
find /tmp -name "*.tmp" -ok rm {} \; |
13.3 find常用组合
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| find /tmp -name "*.tmp" -mtime +7 -delete
find /etc -name "*.conf" -exec cp {} /backup/ \;
find /var/log -name "*.log" -mtime +7 |xargs gzip
find /etc -name "*.conf" |wc -l
find /var -size +100M -ls
|