01 · Linux 系统运维¶
适用系统:Ubuntu 24.04 LTS(生产环境标准) 官方文档:https://ubuntu.com/server/docs · https://www.kernel.org/doc/html/latest/
1. 文件系统 & 权限¶
核心概念¶
Linux 一切皆文件。权限由 user/group/other 三组 rwx 控制,inode 存储元数据。
常用命令¶
# 权限管理
chmod 755 /path/to/file # rwxr-xr-x
chmod -R 644 /var/www/html/ # 递归设置
chown -R www-data:www-data /var/www/
setfacl -m u:deploy:rwx /app/ # ACL 精细权限
# 文件操作
find /var/log -name "*.log" -mtime +30 -delete # 清理30天前日志
du -sh /var/lib/docker/* # 查看 Docker 占用
df -hT # 查看磁盘使用(含文件系统类型)
lsof +D /path # 查看目录被哪些进程占用
iGaming 场景¶
- 日志目录权限:
/var/log/nginx755,日志文件 644 - 应用部署目录建议用独立
deploy用户,不用 root
2. 进程管理¶
常用命令¶
# 实时监控
htop # 推荐,比 top 更直观
ps aux --sort=-%cpu | head -20 # CPU 占用前 20
ps aux --sort=-%mem | head -20 # 内存占用前 20
# 进程控制
kill -9 <PID> # 强制终止
pkill -f "node server.js" # 按名称终止
nice -n 10 command # 低优先级运行
renice -n -5 -p <PID> # 提高运行中进程优先级
# 后台运行
nohup command > /var/log/cmd.log 2>&1 &
screen -S myapp # screen 会话(服务器上常用)
tmux new -s myapp # tmux(推荐,比 screen 强)
systemd 服务管理(重点)¶
# 服务操作
systemctl start|stop|restart|reload nginx
systemctl enable nginx # 开机自启
systemctl status nginx -l # 查看详细状态
systemctl list-units --type=service --state=running
# 查看日志
journalctl -u nginx -f # 实时跟踪
journalctl -u nginx --since "1 hour ago"
journalctl -p err -b # 本次启动的错误
# 编写自定义 service(示例)
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=deploy
WorkingDirectory=/app
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
官方文档:https://www.freedesktop.org/software/systemd/man/systemd.service.html
3. 网络工具¶
# 端口 & 连接状态
ss -tlnp # 查看监听端口(替代 netstat)
ss -s # 连接统计汇总
netstat -an | grep ESTABLISHED | wc -l # 当前连接数
# 流量分析
tcpdump -i eth0 -n port 80 -w /tmp/capture.pcap
tcpdump -r /tmp/capture.pcap -A # 读取并显示内容
iftop -i eth0 # 实时带宽监控(需安装)
# 连通性测试
ping -c 4 8.8.8.8
traceroute -n 8.8.8.8 # 路由追踪
mtr --report 8.8.8.8 # 持续路由追踪(推荐)
curl -v -o /dev/null https://api.example.com # HTTP 详细调试
curl -w "\n%{time_connect} %{time_total}\n" https://example.com
# DNS 诊断
dig @8.8.8.8 example.com A # 指定 DNS 服务器查询
dig example.com +trace # 追踪完整解析链路
nslookup example.com 1.1.1.1
4. 存储管理¶
# 磁盘状态
lsblk -f # 查看所有块设备和文件系统
fdisk -l # 分区信息
iostat -xz 1 # 磁盘 I/O 实时统计
# LVM(生产环境常用)
pvcreate /dev/sdb
vgcreate data_vg /dev/sdb
lvcreate -L 100G -n data_lv data_vg
mkfs.ext4 /dev/data_vg/data_lv
mount /dev/data_vg/data_lv /data
# 扩容 LVM(不停机)
lvextend -L +50G /dev/data_vg/data_lv
resize2fs /dev/data_vg/data_lv # ext4
xfs_growfs /data # xfs
5. 性能分析 & 调优¶
内核参数(高并发场景必须调整)¶
# /etc/sysctl.conf 或 /etc/sysctl.d/99-custom.conf
# 网络连接数(博彩平台高并发必须)
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535
# TIME_WAIT 优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 文件描述符
fs.file-max = 1000000
# 应用生效
sysctl -p
# /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
性能诊断工具¶
# CPU
top / htop
perf top # 函数级 CPU 热点
mpstat -P ALL 1 # 每核 CPU 使用率
# 内存
free -h
vmstat 1 10 # 虚拟内存统计
/proc/meminfo # 详细内存信息
# I/O
iotop -ao # 哪个进程在大量读写
iostat -xz 2 # 设备 I/O 统计
dstat # 综合资源监控
# 综合诊断
strace -p <PID> # 系统调用跟踪
lsof -p <PID> # 进程打开的文件
/proc/<PID>/fd # 进程文件描述符
6. 日志管理¶
# 常用日志位置
/var/log/syslog # 系统日志
/var/log/auth.log # 认证/SSH 日志
/var/log/nginx/ # Nginx 日志
/var/log/apt/ # 包管理日志
# logrotate 配置示例(/etc/logrotate.d/myapp)
/var/log/myapp/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
systemctl reload myapp
endscript
}
# 实时日志分析
tail -f /var/log/nginx/access.log | grep " 5[0-9][0-9] " # 5xx 错误
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn # 状态码统计
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 # Top IP
7. 用户 & SSH 安全加固¶
# SSH 安全配置(/etc/ssh/sshd_config)
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
# fail2ban 防暴力破解
apt install fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600
findtime = 600
常用脚本模板¶
系统健康检查脚本¶
#!/bin/bash
# health_check.sh
echo "=== CPU Usage ==="
mpstat 1 1 | tail -1
echo "=== Memory ==="
free -h
echo "=== Disk ==="
df -hT | grep -v tmpfs
echo "=== Load Average ==="
uptime
echo "=== Top 5 Processes by CPU ==="
ps aux --sort=-%cpu | head -6
echo "=== Open Connections ==="
ss -s | grep "TCP:"
echo "=== Failed Services ==="
systemctl --failed
官方文档 & 学习资源¶
| 资源 | 链接 | 说明 |
|---|---|---|
| Ubuntu Server 官方文档 | https://ubuntu.com/server/docs | 最权威参考 |
| systemd 文档 | https://www.freedesktop.org/software/systemd/man/ | service 编写必读 |
| Linux 性能分析(Brendan Gregg) | https://www.brendangregg.com/linuxperf.html | 性能调优圣经 |
| 鸟哥的 Linux 私房菜 | https://linux.vbird.org/linux_basic/ | 中文入门最佳 |
| The Linux Command Line | https://linuxcommand.org/tlcl.php | 免费电子书 |
| Linux Journey(交互练习) | https://linuxjourney.com/ | 适合入门 |
| man pages 在线版 | https://man7.org/linux/man-pages/ | 命令手册查阅 |
常见问题 & 坑¶
Q: 服务器负载高但 CPU 不高?
A: 检查 I/O wait,iostat -xz 1 看磁盘是否满负载,或者 D 状态进程过多(等待 I/O)
Q: 大量 TIME_WAIT 连接?
A: 调整 net.ipv4.tcp_tw_reuse = 1,并检查是否 HTTP keep-alive 没有正确配置
Q: 文件描述符不够(Too many open files)?
A: 修改 /etc/security/limits.conf 和 /etc/sysctl.conf 的 fs.file-max,同时 systemd service 需加 LimitNOFILE=1000000
Q: 磁盘满了但找不到大文件?
A: 可能是被删除但仍被进程占用的文件,用 lsof | grep deleted 查找
最后更新:2025-04