linux命令分享-find命令

简介

find 命令是 Linux 系统中用于查找文件的强大工具。它可以根据文件名、文件类型、文件大小、文件权限、修改时间等多种条件进行查找,并支持对匹配到的文件执行各种操作。

命令格式

find [查找路径] [查找条件] [动作]
  • 查找路径: 指定要查找文件的目录,可以是多个目录,用空格分隔。如果省略 查找路径,则默认为当前目录。
  • 查找条件: 用于指定查找文件的条件,可以是多个条件,用 -and-or 连接。
  • 动作: 用于对匹配到的文件执行的操作,常见操作包括:
    • -print: 显示匹配到的文件路径
    • -delete: 删除匹配到的文件
    • -exec: 对匹配到的文件执行命令

常用参数

  • -name: 按照文件名查找文件,支持通配符
  • -type: 按照文件类型查找文件,常见类型包括:
    • f: 普通文件
    • d: 目录
    • l: 符号链接
    • s: 套接字
    • p: 管道
    • c: 字符设备
    • b: 块设备
  • -size: 按照文件大小查找文件,支持单位换算,例如:
    • 100k: 查找大小为 100KB 的文件
    • 10M: 查找大小为 10MB 的文件
    • 1G: 查找大小为 1GB 的文件
  • -time: 按照文件修改时间查找文件,支持单位换算,例如:
    • -mtime +7: 查找在过去 7 天内修改过的文件
    • -atime -30: 查找在过去 30 天内未访问过的文件
    • -ctime +1: 查找在 1 天前创建的文件
  • -perm: 按照文件权限查找文件,例如:
    • -perm 644: 查找权限为 644 的文件
    • -perm u=rwx,g=rx,o=: 查找用户具有读写执行权限、组具有读执行权限、其他用户无权限的文件
  • -user: 按照文件属主查找文件,例如:
    • -user root: 查找属主为 root 的文件
    • -user zhangsan: 查找属主为 zhangsan 的文件
  • -group: 按照文件所属组查找文件,例如:
    • -group staff: 查找所属组为 staff 的文件
    • -group root: 查找所属组为 root 的文件
  • -depth: 指定查找深度,例如:
    • -maxdepth 2: 只查找当前目录及其子目录中的文件,不查找子目录的子目录
    • -mindepth 3: 从第三层目录开始查找文件

命令用法

1. 查找当前目录下所有文件

find .

2. 查找当前目录及其子目录中所有名为 test.txt 的文件

find . -name test.txt

3. 查找当前目录及其子目录中所有大小为 100KB 的文件

find . -size 100k

4. 查找当前目录及其子目录中所有在过去 7 天内修改过的文件

find . -mtime +7

5. 查找当前目录及其子目录中所有权限为 644 的文件

find . -perm 644

6. 查找当前目录及其子目录中所有属主为 root 的文件

find . -user root

7. 查找当前目录及其子目录中所有所属组为 staff 的文件

find . -group staff

8. 只查找当前目录中的文件,不查找子目录中的文件

find . -maxdepth 1

9. 从第三层目录开始查找文件

find . -mindepth 3

10. 删除当前目录及其子目录中所有名为 test.txt 的文件

find . -name test.txt -delete

11. 将当前目录及其子目录中所有名为 test.txt 的文件的内容输出到 test.out 文件中

find . -name test.txt -exec cat {} > test.out \;

12. 在当前目录及其子目录中查找所有文件,并对每个文件执行 ls -l 命令

find . -exec ls -l {} \;

运维案例

案例一:查找系统中所有空文件

步骤

  1. 使用以下命令查找系统中所有空文件:
find / -type f -empty

结果

该命令将输出系统中所有空文件的路径。

案例二:查找系统中所有属主为 root 且权限为 644 的文件

步骤

  1. 使用以下命令查找系统中所有属主为 root 且权限为 644 的文件:
find / -user root -perm 644

结果

该命令将输出系统中所有属主为 root 且权限为 644 的文件的路径。

案例三:删除系统中所有名为 *.bak 的备份文件

步骤

  1. 使用以下命令删除系统中所有名为 *.bak 的备份文件:
find / -name "*.bak" -delete

结果

该命令将删除系统中所有名为 *.bak 的备份文件。

注意事项

  • 使用 find 命令时,请谨慎使用 -delete 等可执行动作,以免误删重要文件。
  • 建议在使用 find 命令之前先备份重要文件。

脚本案例

清理日志目录并定时压缩日志的 Shell 脚本

脚本说明

该脚本用于清理日志目录 /var/log 中 7 天之前的日志压缩文件,并对 3 天之前的日志文件进行压缩。脚本会每天凌晨 3 点自动执行。

脚本内容

#!/bin/bash

# 设置日志目录
log_dir="/var/log"

# 设置保留天数
keep_days=7

# 计算几天前的日期
expire_date=$(date -d "-${keep_days} days")

# 清理过期日志压缩文件
find $log_dir -type f -name "*.gz" -mtime +${keep_days} -exec rm -rf {} \;

# 压缩 3 天前的日志文件
find $log_dir -type f -name "*.log" -mtime +${keep_days} -mtime -$((keep_days - 3)) -exec gzip -f {} \;

# 设置定时任务
crontab -l | {
  echo "0 3 * * * $0"
} | crontab -

脚本用法

  1. 将上述脚本保存为 clean_log.sh 文件。
  2. 修改脚本中的 log_dir 变量为您的日志目录路径。
  3. 赋予脚本可执行权限:
chmod +x clean_log.sh
  1. 运行脚本:
./clean_log.sh

定时任务

该脚本已设置了定时任务,每天凌晨 3 点自动执行。您也可以根据需要修改定时任务的时间。

注意事项

  • 请确保您有足够的权限执行该脚本。
  • 脚本会删除 7 天之前的日志压缩文件,请谨慎使用。
  • 脚本会压缩 3 天之前的日志文件,请确保您有足够的存储空间。

其他说明

  • 您可以根据需要修改脚本中的 keep_days 变量,以更改保留天数。
  • 您可以添加其他操作到脚本中,例如发送清理日志的通知邮件。

总结

find 命令是 Linux 系统中用于查找文件的强大工具,可以根据多种条件进行查找,并支持对匹配到的文件执行各种操作。掌握了 find 命令的使用方法,可以帮助运维人员快速定位和处理文件相关的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

私有运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值