现在回到值班任务:需要在 /srv/ops 目录下核对数据库备份文件。
我们先查看 /srv/ops 目录的结构:
crow@opsbox:~/work$ ls /srv/ops
backups
deploy.conf
practice
crow@opsbox:~/work$ ls /srv/ops/backups
2026-06
2026-07
备份文件按月份归档在不同子目录中。如果目录层级很深、文件数量成百上千,逐层手动寻找会非常低效。这时可以使用 find 命令快速定位文件。
使用 find 定位文件
以六月三十日的备份文件为例:
crow@opsbox:~/work$ find /srv/ops/backups -type f -name 'db-2026-06-30.sql'
/srv/ops/backups/2026-06/db-2026-06-30.sql
find 命令的常用参数可以这样理解:
/srv/ops/backups:从该目录开始递归查找;-type f:只查找普通文件,排除目录等其他类型;-name 'db-2026-06-30.sql':按文件名匹配。如果文件名中包含通配符,建议用单引号包裹,避免被 Shell 提前展开。
如果不确定具体日期,只记得是 2026 年 6 月的 SQL 备份,可以使用通配符 *:
crow@opsbox:~/work$ find /srv/ops/backups -type f -name 'db-2026-06-*.sql'
/srv/ops/backups/2026-06/db-2026-06-29.sql
/srv/ops/backups/2026-06/db-2026-06-28.sql
/srv/ops/backups/2026-06/db-2026-06-30.sql
/srv/ops/backups/2026-06/db-2026-06-27.sql
输出顺序可能取决于 find 遍历目录的顺序,不一定按日期排列。
还可以继续添加过滤条件。例如:
-user crow:只查找所有者为crow的文件;-size +10k:只查找大小超过 10 KiB 的文件;-mmin -10:只查找最近 10 分钟内修改过的文件。
如果需要忽略文件名大小写,可以使用 -iname 代替 -name。
预览文件并统计行数
找到备份文件后,正式查看前可以先了解文件规模和开头内容:
crow@opsbox:~/work$ wc -l /srv/ops/backups/2026-06/db-2026-06-30.sql
305 /srv/ops/backups/2026-06/db-2026-06-30.sql
crow@opsbox:~/work$ head -n 3 /srv/ops/backups/2026-06/db-2026-06-30.sql
-- opsbox nightly dump 2026-06-30
-- generated by /usr/local/bin/nightly-backup.sh
CREATE TABLE users (id INT, name TEXT, role TEXT);
常见命令说明:
wc -l:统计文件行数,这里显示共 305 行;head -n 3:查看文件开头的 3 行;tail -n 3:查看文件末尾的 3 行;less /srv/ops/backups/2026-06/db-2026-06-30.sql:逐屏阅读长文件。进入后可以用上下方向键或空格键翻页,输入/关键词检索,按q退出。
使用 grep 提取关键行
当明确知道要找某段文字时,可以使用 grep 直接筛出包含该关键字的行:
crow@opsbox:~/work$ grep -n -F 'user010' /srv/ops/backups/2026-06/db-2026-06-30.sql
13:INSERT INTO users VALUES (4010, 'user010', 'member');
常用参数说明:
-n:显示匹配行在原文件中的行号,方便定位;-F:按固定字符串匹配,不启用正则表达式,适合查找普通文本;-i:忽略英文大小写。

