Linux 命令最容易变成一堆临时复制记录:今天查磁盘分区,明天 grep 日志,后天 scp 一个 jar 包,再过几个月就忘了每条命令当时解决的是什么问题。
我更愿意把这类命令按场景整理,而不是按命令名堆在一起。因为真正排障时,脑子里想的不是“我要用哪个命令”,而是“我要确认磁盘、日志、网络还是远程文件”。
先把命令分成几个场景
一个够用的 Linux 运维备忘可以先分成五类:
- 日志查看:
tail、grep、awk。 - 磁盘分区:
fdisk -l、blkid、mount。 - 文件传输:
scp、rsync。 - 远程登录:
ssh、ssh-copy-id、authorized_keys。 - 定时任务:传统 cron 和 Quartz cron 的差异。
这样整理以后,下一次遇到问题,就能先定位场景,再找命令。
日志排查先控制范围
线上查日志时,不建议一上来就全量 cat 或无范围搜索。更稳的是先控制行数,再根据关键字逐步缩小。
tail -n 5000 /path/to/service.log | grep 'start to upload'
如果需要看匹配行前后上下文,可以用:
tail -n 10000 service.log | grep -A 2 -B 2 '关键字'
这里的 -A 2 表示 after,显示匹配行之后两行;-B 2 表示 before,显示匹配行之前两行。日志量很大时,先用 tail 限制范围,再用 grep 查关键字,会比直接扫全文件更可控。
awk 适合处理结构化的命令输出。比如想看 fdisk 输出里每一行到底被空格分成几列,可以先用:
sudo fdisk -l --bytes /dev/sdb | grep '^/dev' | awk '{print NF}'
NF 表示当前行字段数量。遇到空格数量不固定的命令输出时,先看字段数,再决定取哪一列,能少踩很多坑。
fdisk 适合看分区,不要随手写盘
fdisk -l 常用于查看磁盘和分区信息:
sudo fdisk -l
sudo fdisk -l --bytes /dev/sdb
只读查看问题不大,但进入 fdisk /dev/sdb 后就要谨慎了。删除分区、创建 GPT 分区表、写入分区表都可能破坏数据。真正操作前至少确认三件事:
- 设备名是不是目标磁盘,不要把
/dev/sdb和/dev/sdc看错。 - 重要数据是否已经备份。
- 本次是只读查看,还是确实要重新分区和格式化。
如果要把一块盘重新做 GPT 分区,大致流程是:
sudo fdisk /dev/sdb
进入交互后再执行查看、删除、创建 GPT、创建分区和写入。退出后通常还要格式化:
sudo mkfs.ext4 /dev/sdb1
然后创建挂载目录并挂载:
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data
如果希望开机自动挂载,再写 /etc/fstab。这里更推荐使用 UUID,不要只依赖 /dev/sdb1 这种可能变化的设备名。
blkid /dev/sdb1
拿到 UUID 后再写入 fstab,并用 mount -a 验证配置是否正确。
分区类型和文件系统不是一回事
新手很容易把 fdisk 里看到的 Linux、83、GPT 和 ext4 混在一起。
可以简单这样理解:
- GPT 或 MBR 是分区表类型。
83或Linux filesystem是分区类型标识。- ext4、xfs、btrfs 才是具体文件系统。
mount关心的是文件系统能否被挂载。
所以在 fdisk 里看到某个分区显示为 Linux,并不等于它一定已经格式化成 ext4。要看文件系统,更适合用:
blkid /dev/sdb1
lsblk -f
如果 mount 失败,不要只盯着 fdisk。要同时看文件系统类型、挂载点是否存在、权限、dmesg 报错和 /etc/fstab 配置。
SSH 免密登录按权限一步步排
SSH 免密登录本质上是把本机公钥放到远程服务器的 ~/.ssh/authorized_keys 里。
本机生成密钥:
ssh-keygen -t rsa -b 4096
复制公钥到服务器:
ssh-copy-id [email protected]
如果不能用 ssh-copy-id,也可以手动追加公钥。远程服务器上目录和文件权限要注意:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
排查免密失败时,先看这些点:
- 本机用的是哪把私钥。
- 远程用户是否正确。
- 公钥是否真的写入对应用户的
authorized_keys。 .ssh和authorized_keys权限是否过宽。sshd_config是否允许公钥认证。
如果要在公开文章里记录命令,服务器地址、用户名、密钥路径都应写成占位,不要直接暴露真实公网 IP、真实用户名或私钥路径。
scp 适合少量文件,批量同步用 rsync
临时传一个 jar 包或配置文件,scp 很方便:
scp app.jar [email protected]:/opt/app/
如果是大量文件、断点续传或目录同步,rsync 更合适:
rsync -av --progress ./dist/ [email protected]:/opt/app/dist/
选择时可以这样判断:
- 单个文件、一次性传输:用
scp。 - 大目录、频繁同步、希望跳过未变化文件:用
rsync。 - 生产发布:最好交给部署脚本或 CI,不要长期靠手工 scp。
cron 和 Quartz cron 不要混用
传统 Linux cron 通常是 5 位:
*/10 * * * *
它表示每 10 分钟执行一次。
Quartz Scheduler 常见是 6 位或 7 位,例如:
0 */10 * * * ?
这里第一位是秒,表示每小时的第 0、10、20、30、40、50 分钟执行。两套表达式长得像,但字段含义不同,直接复制很容易错。
记录定时任务时最好顺手写一句人话解释,例如“每 10 分钟执行一次”,不要只留表达式。
最后沉淀成排障清单
Linux 命令备忘最有价值的不是命令本身,而是排障顺序。
我会给自己留这样一份清单:
- 查日志:先限制范围,再查关键字,再看上下文。
- 查磁盘:先
lsblk -f和blkid,再看fdisk -l。 - 改分区:先备份、确认设备名,再进入写盘操作。
- 挂载失败:看文件系统、挂载点、权限、
fstab和dmesg。 - SSH 失败:看用户、公钥、权限、私钥和服务端配置。
- 传文件:少量用
scp,批量和重复同步用rsync。 - 定时任务:区分 Linux cron 和 Quartz cron,并写明自然语言解释。
这类笔记整理到最后,应该从“命令收藏夹”变成“排障路线图”。下一次真出问题时,能少一点临场搜索,多一点稳稳地往下查。




