Linux 常用命令大全:从服务器排障到日常开发
本文目录
这份手册按排障问题组织,不要求背命令。先采集只读信息,再形成假设,最后才做最小变更。示例以常见 GNU/Linux 为主;macOS 使用 BSD 工具,systemd、GNU 参数和文件路径并非处处相同。执行前查看目标机器的 man page 和发行版文档。
先建立安全的排障顺序
- 确认当前主机、账号、目录、发行版和时间,避免在错误机器上操作。
- 先做只读检查:服务状态、日志、端口、磁盘和近期变更。
- 一次只改一个变量;有影响的变更先备份原配置并记录回滚办法。
- 执行后马上验证服务、接口和日志,并记录时间、命令和结果。
- 生产环境遵守变更窗口和最小权限;不要把个人电脑的命令直接复制到生产。
hostname
id
pwd
date -Is 2>/dev/null || date
cat /etc/os-release 2>/dev/null
uname -a
文件、目录与文本
pwd
ls -lah
cd /path/to/project
mkdir -p logs/backups
cp -a old-path new-path
mv old-name new-name
stat app.log
file archive.bin
du -sh ./* 2>/dev/null
find . -type f -name "*.log" -mtime +7 -print
先检查目标和磁盘空间,再做复制或移动。不要把 rm -rf、find -delete 或覆盖式重定向当成日常清理手段;误删前没有可恢复备份时,命令再熟也救不回来。
看文本和日志时限制输出范围,避免一次打印超大文件:
sed -n "1,120p" config.yml
less +G app.log
tail -n 200 app.log
tail -F app.log
grep -n "ERROR" app.log | tail -n 50
rg -n --glob "!node_modules/**" "timeout|ECONNRESET" ./logs
grep 几乎总是可用;rg 通常要单独安装。follow 日志后用 Ctrl-C 结束。日志可能包含令牌、邮箱、IP 或用户数据,分享前必须脱敏。
权限与身份
id
groups
namei -l /path/to/file
stat -c "%A %U:%G %n" /path/to/file
chmod 640 app.conf
chmod 750 deploy.sh
目录权限中的 x 表示可遍历;文件权限中的 x 表示可执行。普通非秘密文件常见 644,只有所有者可读写的密钥文件常见 600,受控脚本目录可使用 750。实际权限按服务账号和共享方式设计。不要用 chmod -R 777 修权限,也不要在不确认目标和所有者时递归 chown。
进程与端口
ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 15
top
ps -p 1234 -o pid,ppid,user,etime,cmd
ss -lntp
ss -tan state established
lsof -i :3000
kill -TERM 1234
先核对 PID、命令、启动目录、服务管理器和端口绑定地址。kill -TERM 请求程序优雅退出;只有确认进程卡死且了解数据风险后,才考虑强制终止。端口被占用不等于应该杀进程。
网络与 DNS
ip -br addr
ip route
getent hosts example.com
dig example.com
curl -sS -D - -o /dev/null --max-time 10 https://example.com/health
curl -sS --max-time 5 http://127.0.0.1:3000/health
按层定位:本机链路和路由、DNS 解析、TCP 建连、TLS 握手、HTTP 状态码、应用响应。ping 被禁不代表 HTTPS 不通;curl 的 -k 会跳过证书校验,不应用来掩盖证书故障。dig、ss、iproute2 在精简容器里可能不存在,先确认工具和网络命名空间。
服务、日志与启动管理
systemctl status nginx
systemctl is-enabled nginx
journalctl -u nginx --since "30 minutes ago" --no-pager
journalctl -u nginx -p warning..alert --since today --no-pager
先看 Active、最近退出原因和主进程,再按服务名及时间窗过滤日志。restart、enable 是有副作用的操作,只有明确目标和变更窗口后再执行。容器、OpenRC、SysV init 或 macOS 可能使用不同管理器;macOS 服务通常由 launchd 管理。
磁盘、内存与资源
df -hT
df -ih
du -xhd1 /var 2>/dev/null | sort -h
free -h
uptime
vmstat 1 5
df 检查挂载点空间,df -i 检查 inode;空间未满但 inode 耗尽时仍无法创建文件。du 的结果可能受权限、挂载和容器命名空间影响。先找到增长目录,再确认文件归属与是否持久;不要直接清理数据库文件、上传目录、容器卷或应用日志。
软件包与归档
# Debian / Ubuntu / Kali
sudo apt update
apt show package-name
sudo apt install package-name
# RHEL / Fedora 系常见写法
dnf info package-name
sudo dnf install package-name
# 先列出归档内容,不解压
tar -tzf backup.tar.gz | head -n 30
tar -czf logs.tar.gz ./logs
apt update 更新仓库索引,不是升级系统。升级前检查将安装、删除和替换的包;多个 apt/dpkg 操作不能并行。不要混用 Debian、Ubuntu 和 Kali 的第三方仓库。未知归档先看清单,且不要以 root 解压到共享目录。
SSH 与文件传输
ssh -v user@example-host
ssh-keygen -lf ~/.ssh/id_ed25519.pub
scp ./report.txt user@example-host:/tmp/report.txt
rsync -avn ./dist/ user@example-host:/srv/site/
rsync 的 -n 是预演;核对文件列表和目标后,再考虑真正同步。源路径尾部斜杠会影响目录内容落点。公钥可以分发,私钥不能上传到服务器、聊天、博客、公开 dotfiles 或截图。首次连接应核对主机指纹,不要用关闭主机密钥检查的参数规避告警。
服务器故障的一条排查链
- 从客户端请求开始,记录域名、路径、时间和状态码;检查证书有效期与域名匹配。
- 在服务器本机请求反向代理和应用健康端点,区分入口层、网关和业务服务。
- 查看服务管理器、PID、监听端口和服务日志,确定哪个进程真实持有端口。
- 再检查数据库、缓存、DNS、外部依赖和连接池;不要在日志里打印连接串。
- 检查磁盘块、inode、内存、负载和最近发布,把症状与变更时间对齐。
- 先恢复服务,再做根因修复;修复前备份配置或数据并准备回滚。
高风险操作检查
- rm、find -delete、重定向覆盖、DROP/TRUNCATE 都可能不可逆;先打印目标、备份并确认范围。
- chmod/chown 的递归选项可能破坏系统或项目权限;先对单一目标验证。
- systemctl restart、apt full-upgrade、防火墙变更和主机重启会影响业务,不能因命令常见就直接执行。
- shell 历史、进程参数、终端录屏和调试 trace 可能泄露密码或 token;不要把秘密作为命令行参数。
- Linux 与 macOS 的同名工具经常有不同参数;先看 man,不要盲贴网上命令。
官方参考
- Linux man-pages:优先查询目标系统对应版本的手册。
- GNU Coreutils 手册:文件、权限和文本处理命令。
- Debian Reference:软件包管理:apt、dpkg、升级与恢复。
- systemd journalctl 手册:日志过滤语法。
- OpenBSD ssh-keygen 手册:密钥生成、查看和格式操作。
Live Notes
留言提交后会先进入审核,审核通过后对其他读者公开。