工具箱:Linux 命令速查表——服务器上 90% 的活靠这 60 个命令
玩 Linux 到了今天,我发现一个真相:真正天天敲的命令,其实就那么几十个。刚学那会儿(L1–L15 那会)每个命令都觉得新鲜,现在回头一看,终端里翻来覆去的就是同一套东西。
今天这篇不讲新概念,纯纯的工具文:把我服务器上最高频的命令按场景整理出来,每个都配一条真实输出和一句人话解读。建议收藏,下次 SSH 上去忘了参数直接翻。
文件和目录:每天都在敲
ls -lah
drwxr-xr-x 5 root root 4.0K Oct 14 09:20 .
drwxr-xr-x 23 root root 4.0K Oct 13 22:10 ..
-rw-r--r-- 1 root root 220 Oct 13 22:10 compose.yaml
drwxr-x--- 2 root root 4.0K Oct 14 08:15 backup
-lah 三个字母记住:l 看详情,a 看隐藏文件(比如 .env),h 把字节换算成 K/M,别人才看得懂。裸 ls 在服务器上基本不用。
du -sh * | sort -rh | head -10
2.1G halo-data
318M uptime-kuma-data
45M caddy-data
磁盘告警响了,第一件事就是这条:当前目录下谁最占地方,倒序排前十。du -sh 看大小,sort -rh 按人类可读的大小倒序——注意 sort 必须加 h,不然 2.1G 会被当成字符串排在 45M 前面,坑过我一次。
find /opt -name "*.log" -mtime +7 -delete
find 是真·瑞士军刀。这条意思是:在 /opt 下找 7 天前修改过的 .log 文件并删除。拆开看:-name 按名字,-mtime +7 按修改时间(+7 是"7 天以前"),-delete 执行删除。先跑不带 -delete 的版本确认名单,确认无误再加删除,这是保命习惯。
ln -s /opt/halo/data backup-link
软链接,相当于快捷方式。备份脚本里常用:链接指向最新备份目录,恢复的时候不用记日期。
文本查看:别再 cat 大文件了
tail -n 3 -f /var/log/backup-root-riji.log
2026-10-14 03:10:02 开始备份 /opt/halo ...
2026-10-14 03:10:41 备份完成:/backup/halo-2026-10-14.tar.gz (1.8G)
每天凌晨的备份日志长这样,tail -f 挂着看,心里踏实。
grep -c "Failed password" /var/log/auth.log
127
-c 只计数不打印。auth.log 里一天 127 次 SSH 爆破尝试——这就是为什么 L19 要讲 SSH 加固,Fail2Ban 那篇也不是白写的。数字不会骗人。
磁盘和内存:空间不够先查这三个
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 40G 12G 26G 31% /
df -h 看分区用了多少。Use% 长期 80% 以上就要动手了:清日志、清 Docker(见下文)、扩容,三选一。
free -h
total used free shared buff/cache available
Mem: 939Mi 412Mi 98Mi 12Mi 428Mi 389Mi
Swap: 0B 0B 0B
看内存重点看 available 那一列,不是 free。Linux 会把空闲内存拿去做缓存(buff/cache),available 才是应用真正能用的。939Mi 的小鸡跑 halo + caddy + kuma,available 还有 389Mi,够用。
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 8 3 2.84GB 1.92GB (67%)
Containers 4 4 132MB 0B
Docker 用户专属:镜像占了 2.84G,其中 1.92G 是悬空、可回收的。一条命令清掉:
docker image prune -a
-a 连"没被容器用但有 tag"的也清。跑之前确认没有哪个 compose 文件引用了旧 tag,不然下次 up 要重新拉。
进程和端口:谁在跑、谁占了端口
ps aux | grep -v grep | grep halo
root 1234 2.1 8.4 1234560 81234 ? Sl Oct13 12:34 java -jar app.jar
管道后面那俩 grep 是固定搭配:grep -v grep 把 grep 自己这行过滤掉,不然结果里永远多一条。ps aux 的列从左到右:用户、PID、CPU%、内存%、……命令。想杀进程先拿 PID:
kill 1234 # 先温柔地发 TERM 信号
kill -9 1234 # 不行再 -9,相当于拔电源,别上来就用
ss -tlnp | grep 443
LISTEN 0 4096 0.0.0.0:443 0.0.0.0:* users:(("caddy",pid=567,fd=9))
ss -tlnp 看监听中的 TCP 端口:-t TCP,-l 只看监听,-n 不解析域名(快),-p 显示是哪个进程。443 被 caddy 占着——正常。某天 caddy 起不来报"address already in use",就是这条命令找凶手。
htop # 没有就 apt install htop
top 的漂亮版本,CPU 内存谁吃得多一目了然,F9 能直接杀进程。服务器必装。
网络排查:从 L5 那篇提炼的最简版
ping -c 4 8.8.8.8
curl -sI https://halo.nya.je | head -n 1
HTTP/2 200
curl -sI 只拿响应头,第一行 HTTP/2 200 就够了——网站活着。写进监控脚本或者手动巡检都好用,比打开浏览器快。
traceroute halo.nya.je
mtr -c 10 halo.nya.je # 更直观,装:apt install mtr-tiny
网站慢、SSH 卡,先 mtr 看看是哪一跳丢包。是 VPS 商线路问题还是你本地网络问题,一目了然,提工单也有证据。
dig +short halo.nya.je A
3.15.231.19
+short 只要答案不要废话。换 DNS、迁服务器之后,验证解析生效没生效就靠它。
权限和用户:L6 的精华三行
chmod 600 ~/.ssh/id_ed25519
chmod 755 /opt/halo
chown -R www-data:www-data /var/www
记住两个数字就行:600 是"只有我能读写"(密钥、token 文件专用),755 是"我能改、别人能看能进"(目录常用)。-R 递归,小心别对 / 用。
id chris
uid=1000(chris) gid=1000(chris) groups=1000(chris),27(sudo)
查用户在哪些组,sudo 组里有没有他——sudo 免密还是输密码、出问题先看这个。
压缩解压:就记 tar 这一套
tar -czf backup-2026-10-14.tar.gz /opt/halo # 打包压缩
tar -tzf backup-2026-10-14.tar.gz | head # 看包里有啥,不解压
tar -xzf backup-2026-10-14.tar.gz -C /restore # 解到指定目录
参数死记:c 创建、x 解开、t 查看、z 走 gzip、f 后面跟文件名。unzip 另算,那是 zip 格式的:unzip file.zip -d /目标目录。
L15 备份那篇的 nightly 脚本,核心就是第一条。每天凌晨 3 点 10 分,cron 准时跑,我的博客数据就靠这一行活着。
系统信息:出问题先报家门
uname -a && cat /etc/os-release | head -n 2
Linux ip-172-26-12-143 6.1.0-...-cloud-amd64 ... x86_64 GNU/Linux
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
论坛求助、给 AI 贴报错,第一句话先报这个。Debian 13 和 Ubuntu 22 的包名、服务名经常不一样,不报系统版本别人没法帮你。
uptime
09:41:00 up 21 days, 3:12, 1 user, load average: 0.08, 0.05, 0.01
up 21 days 说明机器稳,load average 三个数字都远小于 CPU 核数,空闲得很。load 持续高于核数才需要紧张。
journalctl -u halo --since "1 hour ago" | tail -n 20
systemd 时代查服务日志就这一条,比满世界找 log 文件快。L16 讲 systemd 的时候提过,实战里这是我敲得最多的 journalctl 姿势。
Docker 加餐:compose 时代三件套
docker compose up -d # 后台启动
docker compose logs -f --tail 50 # 追日志,只看最后 50 行
docker compose down && docker compose up -d # 重建(改了 compose 文件之后)
docker exec -it halo sh
进容器里看一眼。Alpine 系镜像没有 bash,只有 sh——docker exec 进不去先换 sh 试试,别跟 bash 死磕。