跳转至

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/nginx 755,日志文件 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.conffs.file-max,同时 systemd service 需加 LimitNOFILE=1000000

Q: 磁盘满了但找不到大文件? A: 可能是被删除但仍被进程占用的文件,用 lsof | grep deleted 查找


最后更新:2025-04