名称: linux系统管理 描述: 管理Linux系统,涵盖systemd服务、进程管理、文件系统、网络、性能调优和故障排除。在部署应用程序、优化服务器性能、诊断生产问题或管理Linux服务器上的用户和安全时使用。
Linux 系统管理
全面的Linux系统管理,用于管理服务器、部署应用程序和在现代云原生环境中排除生产问题。
目的
此技能教授DevOps工程师、SREs、后端开发者和平台工程师的基础和中级Linux管理。专注于基于systemd的发行版(Ubuntu、RHEL、Debian、Fedora),涵盖服务管理、进程监控、文件系统操作、用户管理、性能调优、日志分析和网络配置。
现代基础设施即使采用容器化也需要扎实的Linux基础。容器主机运行Linux,Kubernetes节点需要优化,排除生产问题需要理解systemd、进程和日志。
未涵盖内容:
- 高级网络(BGP、OSPF)- 参见
网络架构技能 - 深度安全加固(合规、渗透测试)- 参见
安全加固技能 - 大规模配置管理(Ansible、Puppet)- 参见
配置管理技能 - 容器编排 - 参见
Kubernetes操作技能
何时使用此技能
在部署自定义应用程序、排除缓慢系统、调查服务故障、优化工作负载、管理用户、配置SSH、监控磁盘空间、调度任务、诊断网络问题或应用性能调优时使用。
快速入门
基本命令
服务管理:
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl status nginx # 检查状态
systemctl enable nginx # 启用启动时启动
journalctl -u nginx -f # 跟随服务日志
进程监控:
top # 交互式进程监控器
htop # 增强型进程监控器
ps aux | grep process_name # 查找特定进程
kill -15 PID # 优雅关闭 (SIGTERM)
kill -9 PID # 强制杀死 (SIGKILL)
磁盘使用:
df -h # 文件系统使用情况
du -sh /path/to/dir # 目录大小
ncdu /path # 交互式磁盘分析器
日志分析:
journalctl -f # 跟随所有日志
journalctl -u service -f # 跟随服务日志
journalctl --since "1 hour ago" # 按时间过滤
journalctl -p err # 仅显示错误
用户管理:
useradd -m -s /bin/bash username # 创建用户并附带主目录
passwd username # 设置密码
usermod -aG sudo username # 添加到sudo组
userdel -r username # 删除用户和主目录
核心概念
Systemd 架构
Systemd是标准的初始化系统和服务管理器。Systemd单元定义服务、定时器、目标和其他系统资源。
单元文件位置(优先级顺序):
/etc/systemd/system/- 自定义单元(最高优先级)/run/systemd/system/- 运行时单元(临时)/lib/systemd/system/- 系统提供的单元(请勿修改)
关键单元类型: .service (服务), .timer (定时任务), .target (单元组), .socket (套接字激活)
基本systemctl命令:
systemctl daemon-reload # 更改后重新加载单元文件
systemctl list-units --type=service
systemctl list-timers # 显示所有定时器
systemctl cat nginx.service # 显示单元文件内容
systemctl edit nginx.service # 创建覆盖文件
详细systemd参考,请参见references/systemd-guide.md。
进程管理
进程是运行的程序,具有唯一的PID。理解进程状态、信号和资源使用对于故障排除至关重要。
进程状态: R (运行中), S (睡眠中), D (不可中断睡眠/I/O), Z (僵尸), T (停止)
常见信号: SIGTERM (15) 优雅关闭, SIGKILL (9) 强制杀死, SIGHUP (1) 重新加载配置
进程优先级:
nice -n 10 command # 以较低优先级启动
renice -n 5 -p PID # 更改运行中进程的优先级
文件系统层次结构
关键目录:/ (根目录), /etc/ (配置), /var/ (可变数据), /opt/ (可选软件), /usr/ (用户程序), /home/ (用户目录), /tmp/ (临时), /boot/ (引导加载程序)
文件系统类型快速参考:
- ext4 - 通用用途(默认)
- XFS - 大文件、数据库(RHEL默认)
- Btrfs - 快照、写时复制
- ZFS - 企业级、数据完整性、NAS
文件系统管理详情包括LVM和RAID,请参见references/filesystem-management.md。
包管理
Ubuntu/Debian (apt):
apt update && apt upgrade # 更新系统
apt install package # 安装包
apt remove package # 移除包
apt search keyword # 搜索包
RHEL/CentOS/Fedora (dnf):
dnf update # 更新所有包
dnf install package # 安装包
dnf remove package # 移除包
dnf search keyword # 搜索包
对于系统服务使用原生包管理器;对于桌面应用和跨发行版兼容性使用snap/flatpak。
决策框架
故障排除性能问题
调查工作流:
-
识别瓶颈:
top # 快速概览 uptime # 负载平均值 -
CPU问题(使用率>80%):
top # 按Shift+P按CPU排序 ps aux --sort=-%cpu | head -
内存问题(交换空间使用):
free -h # 内存使用情况 top # 按Shift+M按内存排序 -
磁盘I/O问题(高wa%):
iostat -x 1 # 磁盘统计 iotop # 按进程I/O -
网络问题:
ss -tunap # 活动连接 iftop # 带宽监控器
全面故障排除,请参见references/troubleshooting-guide.md。
文件系统选择
快速决策:
- 默认/通用 → ext4
- 数据库服务器 → XFS
- 大文件存储 → XFS或ZFS
- NAS/文件服务器 → ZFS
- 需要快照 → Btrfs或ZFS
常见工作流
创建Systemd服务
步骤1:创建单元文件
sudo nano /etc/systemd/system/myapp.service
步骤2:单元文件内容
[Unit]
Description=我的Web应用
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
Environment="PORT=8080"
ExecStart=/opt/myapp/bin/server
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
StandardOutput=journal
# 安全加固
PrivateTmp=true
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/lib/myapp
[Install]
WantedBy=multi-user.target
步骤3:部署和启动
sudo useradd -r -s /bin/false myapp
sudo mkdir -p /var/lib/myapp
sudo chown myapp:myapp /var/lib/myapp
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
sudo systemctl status myapp.service
完整示例,请参见examples/systemd-units/。
Systemd定时器(Cron替代)
创建服务和定时器单元以调度任务。定时器单元指定OnCalendar=计划和Persistent=true用于错过作业。服务单元为Type=oneshot。完整示例请参见examples/systemd-units/backup.timer和backup.service。
SSH加固
生成SSH密钥:
ssh-keygen -t ed25519 -C "admin@example.com"
ssh-copy-id admin@server
加固sshd_config:
sudo nano /etc/ssh/sshd_config
关键设置:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers admin deploy
X11Forwarding no
Port 2222 # 可选
应用更改:
sudo sshd -t # 测试
sudo systemctl restart sshd # 应用(保留备份会话!)
完整SSH配置,请参见examples/configs/sshd_config.hardened和references/security-hardening.md。
性能调优
在/etc/sysctl.d/99-custom.conf中配置sysctl参数以进行网络调优(TCP缓冲区、BBR拥塞控制)、内存管理(交换性、缓存压力)和文件描述符。在/etc/security/limits.conf中设置ulimits以处理nofile和nproc。配置I/O调度器和CPU调控器。全面调优,请参见references/performance-tuning.md和examples/configs/中的模板。
日志调查
使用systemctl status myapp和journalctl -u myapp调查问题。通过时间--since、严重性-p err或使用grep搜索模式过滤日志。使用top、df -h、free -h关联系统指标。使用journalctl -k | grep -i oom检查OOM杀死。详细工作流,请参见references/troubleshooting-guide.md。
基本命令
接口管理:
ip addr show # 显示所有接口
ip link set eth0 up # 启动接口
ip addr add 192.168.1.100/24 dev eth0
路由:
ip route show # 显示路由表
ip route get 8.8.8.8 # 显示到IP的路由
ip route add 10.0.0.0/24 via 192.168.1.1
套接字统计:
ss -tunap # 所有TCP/UDP连接
ss -tlnp # 监听TCP端口
ss -ulnp # 监听UDP端口
ss -tnp state established # 已建立连接
防火墙配置
Ubuntu (ufw):
sudo ufw status
sudo ufw enable
sudo ufw allow 22/tcp # 允许SSH
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow from 192.168.1.0/24 # 允许来自子网
sudo ufw default deny incoming
RHEL/CentOS (firewalld):
firewall-cmd --state
firewall-cmd --list-all
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
完整网络配置包括netplan、NetworkManager和DNS,请参见references/network-configuration.md。
定时任务
Cron语法
crontab -e # 编辑用户crontab
# 格式: 分钟 小时 日 月 周 命令
0 2 * * * /usr/local/bin/backup.sh # 每天凌晨2点
*/5 * * * * /usr/local/bin/check-health.sh # 每5分钟
0 3 * * 0 /usr/local/bin/weekly-cleanup.sh # 每周日凌晨3点
@reboot /usr/local/bin/startup-script.sh # 启动时运行
Systemd定时器日历语法
OnCalendar=daily # 每天午夜
OnCalendar=*-*-* 02:00:00 # 每天凌晨2点
OnCalendar=Mon *-*-* 09:00:00 # 每周一上午9点
OnCalendar=*-*-01 00:00:00 # 每月1日
OnBootSec=5min # 启动后5分钟
基本工具
进程监控
top,htop- 实时进程监控器ps- 报告进程状态pgrep/pkill- 按名称查找/杀死
日志分析
journalctl- 查询systemd日志grep- 搜索文本模式tail -f- 跟随日志文件
磁盘管理
df- 磁盘空间使用情况du- 目录空间使用情况lsblk- 列出块设备ncdu- 交互式磁盘分析器
网络工具
ip- 网络配置ss- 套接字统计ping- 测试连接性dig/nslookup- DNS查询tcpdump- 数据包捕获
系统监控
- Netdata - 实时Web仪表板
- Prometheus + Grafana - 指标收集
- ELK Stack - 集中式日志记录
与其他技能集成
Kubernetes操作
Linux管理是Kubernetes节点管理的基础。节点优化(sysctl调优)、kubelet作为systemd服务、通过journald的容器日志、资源限制的cgroups。
示例:
# /etc/sysctl.d/99-kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
Kubernetes特定操作,请参见kubernetes-operations技能。
配置管理
Linux管理提供知识;配置管理自动化它。Ansible playbook自动化systemd服务创建和系统调优。
大规模自动化,请参见configuration-management技能。
安全加固
此技能涵盖SSH和防火墙基础。高级安全(MFA、证书、CIS基准、合规),请参见security-hardening技能。
CI/CD管道
CI/CD管道使用这些技能部署到Linux服务器。使用systemctl进行部署和journalctl进行监控。
部署自动化,请参见building-ci-pipelines技能。
参考资料
详细指南
references/systemd-guide.md- 全面的systemd参考(单元文件、依赖、目标)references/performance-tuning.md- 完整的sysctl、ulimits、cgroups、I/O调度器指南references/filesystem-management.md- LVM、RAID、文件系统类型、权限references/network-configuration.md- ip/ss命令、netplan、NetworkManager、DNS、防火墙references/security-hardening.md- SSH加固、防火墙、SELinux/AppArmor基础references/troubleshooting-guide.md- 常见问题、诊断工作流、解决方案
示例
examples/systemd-units/- 服务、定时器和目标单元文件examples/scripts/- 备份、健康检查和维护脚本examples/configs/- sshd_config、sysctl.conf、logrotate示例
发行版特定注释
Ubuntu/Debian
包管理器:apt, 网络:netplan, 防火墙:ufw, 仓库:/etc/apt/sources.list
RHEL/CentOS/Fedora
包管理器:dnf, 网络:NetworkManager, 防火墙:firewalld, 仓库:/etc/yum.repos.d/, SELinux默认启用
Arch Linux
包管理器:pacman, 网络:NetworkManager, 滚动发布, AUR用于社区包
附加资源
官方文档:
- systemd: https://systemd.io/
- Linux内核: https://kernel.org/doc/
相关技能:
kubernetes-operations- Linux上的容器编排configuration-management- 大规模自动化Linux管理security-hardening- 高级安全和合规building-ci-pipelines- 通过CI/CD部署performance-engineering- 深度性能分析