菜单

Administrator
发布于 2026-10-15 / 1 阅读
0
0

工具箱:Linux 命令速查表——服务器上 90% 的活靠这 60 个命令

工具箱: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 大文件了

命令

场景

备注

cat file

小文件一次看完

大文件别用,会刷屏

less file

大文件分页看

/关键词 搜索,q 退出

head -n 20 file

看文件头 20 行

日志看开头用它

tail -n 50 -f app.log

实时追日志

-f 跟踪新写入,Ctrl+C 退出

grep -rn "error" /var/log/

递归搜关键词

-r 递归,-n 显示行号

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 死磕。

小结

场景

核心命令

一句话记忆

看目录

ls -lah

l 详情 a 隐藏 h 好读

找大文件

du -sh * → sort -rh → head

磁盘告警第一反应

找文件

find 路径 -name "*.log" -mtime +7

先查名单再 -delete

追日志

tail -n 50 -f

-f 跟踪,Ctrl+C 退出

搜内容

grep -rn "关键词" 路径

-r 递归 -n 行号

看磁盘

df -h

Use% 过 80 动手

看内存

free -h

看 available 列

查进程

ps aux → grep xxx

记得 grep -v grep

查端口

ss -tlnp

-p 揪出占端口的进程

测网站

curl -sI 网址

第一行 200 就是活着

查 DNS

dig +short 域名 A

只要答案不要废话

改权限

chmod 600 / 755

密钥 600,目录 755

打包

tar -czf / -xzf / -tzf

c 建 x 解 t 看

查日志

journalctl -u 服务名 --since

systemd 时代标配

容器

docker compose up -d / logs -f

改配置后 down 再 up


评论