1. 引言
Linux 运维是服务器管理、系统维护和故障排查的核心技能。无论是管理单台服务器还是维护大规模集群,掌握 Linux 运维基础都是必备能力。运维的本质,是保证系统的稳定、高效与安全。
本文将系统性地介绍 Linux 运维的基础知识,包括常用命令、用户与权限管理、磁盘与文件系统、网络配置、进程管理、日志管理、系统监控以及常见故障排查,帮助你建立完整的运维知识体系。
2. Linux 运维知识体系概览
在深入细节之前,先了解 Linux 运维的整体知识框架:
#mermaid-svg-gL4Cj0XsDKzOVqJs{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gL4Cj0XsDKzOVqJs .error-icon{fill:#552222;}#mermaid-svg-gL4Cj0XsDKzOVqJs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gL4Cj0XsDKzOVqJs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .marker.cross{stroke:#333333;}#mermaid-svg-gL4Cj0XsDKzOVqJs svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gL4Cj0XsDKzOVqJs p{margin:0;}#mermaid-svg-gL4Cj0XsDKzOVqJs .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .cluster-label text{fill:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .cluster-label span{color:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .cluster-label span p{background-color:transparent;}#mermaid-svg-gL4Cj0XsDKzOVqJs .label text,#mermaid-svg-gL4Cj0XsDKzOVqJs span{fill:#333;color:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .node rect,#mermaid-svg-gL4Cj0XsDKzOVqJs .node circle,#mermaid-svg-gL4Cj0XsDKzOVqJs .node ellipse,#mermaid-svg-gL4Cj0XsDKzOVqJs .node polygon,#mermaid-svg-gL4Cj0XsDKzOVqJs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .rough-node .label text,#mermaid-svg-gL4Cj0XsDKzOVqJs .node .label text,#mermaid-svg-gL4Cj0XsDKzOVqJs .image-shape .label,#mermaid-svg-gL4Cj0XsDKzOVqJs .icon-shape .label{text-anchor:middle;}#mermaid-svg-gL4Cj0XsDKzOVqJs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .rough-node .label,#mermaid-svg-gL4Cj0XsDKzOVqJs .node .label,#mermaid-svg-gL4Cj0XsDKzOVqJs .image-shape .label,#mermaid-svg-gL4Cj0XsDKzOVqJs .icon-shape .label{text-align:center;}#mermaid-svg-gL4Cj0XsDKzOVqJs .node.clickable{cursor:pointer;}#mermaid-svg-gL4Cj0XsDKzOVqJs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .arrowheadPath{fill:#333333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gL4Cj0XsDKzOVqJs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gL4Cj0XsDKzOVqJs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gL4Cj0XsDKzOVqJs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gL4Cj0XsDKzOVqJs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .cluster text{fill:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs .cluster span{color:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gL4Cj0XsDKzOVqJs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gL4Cj0XsDKzOVqJs rect.text{fill:none;stroke-width:0;}#mermaid-svg-gL4Cj0XsDKzOVqJs .icon-shape,#mermaid-svg-gL4Cj0XsDKzOVqJs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gL4Cj0XsDKzOVqJs .icon-shape p,#mermaid-svg-gL4Cj0XsDKzOVqJs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gL4Cj0XsDKzOVqJs .icon-shape .label rect,#mermaid-svg-gL4Cj0XsDKzOVqJs .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gL4Cj0XsDKzOVqJs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gL4Cj0XsDKzOVqJs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gL4Cj0XsDKzOVqJs :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Linux 运维基础
命令行与常用命令
用户与权限管理
磁盘与文件系统
网络配置与管理
进程与服务管理
日志与监控
故障排查与优化
文件操作、文本处理、查找
用户、组、权限、sudo
分区、挂载、LVM、RAID
IP、路由、防火墙、DNS
systemd、进程、计划任务
日志分析、性能监控
CPU/内存/磁盘/网络排查
3. 常用命令基础
3.1 文件与目录操作
bash
# 查看当前目录
pwd
# 切换目录
cd /etc
# 列出文件(-l 详细,-a 含隐藏文件,-h 人类可读)
ls -lah
# 创建/删除目录
mkdir -p /data/logs
rmdir /empty_dir
# 复制/移动/删除文件
cp -r /source /dest
mv /old /new
rm -rf /tmp/old_dir # 谨慎使用
# 创建空文件或更新文件时间戳
touch /tmp/test.txt
3.2 文本处理三剑客
grep ------ 文本搜索
bash
# 在文件中搜索关键字
grep "error" /var/log/messages
# 递归搜索目录
grep -r "timeout" /etc/
# 忽略大小写,显示行号
grep -in "warning" /var/log/app.log
sed ------ 流编辑器
bash
# 替换文本(将 old 替换为 new)
sed -i 's/old/new/g' /etc/config.conf
# 删除匹配行
sed -i '/^#/d' /etc/config.conf
# 打印指定行
sed -n '10,20p' /var/log/app.log
awk ------ 文本分析
bash
# 打印第 1 和第 3 列
awk '{print $1, $3}' /etc/passwd
# 按分隔符分割(默认空格,可指定 -F)
awk -F: '{print $1}' /etc/passwd
# 条件过滤
awk '$3 > 100 {print $1}' /proc/meminfo
3.3 查找文件
bash
# 按名称查找
find / -name "nginx.conf"
# 按类型查找(f 文件,d 目录)
find /data -type f -name "*.log"
# 按大小查找(大于 100MB)
find / -size +100M
# 按修改时间查找(7 天内修改)
find /data -mtime -7
3.4 压缩与解压
bash
# tar 打包 + gzip 压缩
tar -czvf backup.tar.gz /data
# 解压
tar -xzvf backup.tar.gz
# 查看压缩包内容
tar -tzvf backup.tar.gz
# zip 压缩/解压
zip -r backup.zip /data
unzip backup.zip
4. 用户与权限管理
4.1 用户与组管理
bash
# 创建用户
useradd -m -s /bin/bash zhangsan
# 设置/修改密码
passwd zhangsan
# 创建用户组
groupadd devops
# 将用户加入组
usermod -aG devops zhangsan
# 删除用户
userdel -r zhangsan
4.2 文件权限
Linux 权限分为读(r=4)、写(w=2)、执行(x=1),针对所有者、所属组、其他用户三组:
bash
# 查看权限
ls -l /etc/passwd
# -rw-r--r-- 1 root root 1234 Jan 1 00:00 /etc/passwd
# 修改权限(chmod)
chmod 755 script.sh # 所有者 rwx,组 rx,其他 rx
chmod u+x script.sh # 给所有者加执行权限
chmod -R 644 /data/files # 递归修改
# 修改所有者/所属组(chown)
chown zhangsan:devops /data/app
chown -R zhangsan:devops /data/app
4.3 sudo 权限管理
bash
# 编辑 sudoers 文件(用 visudo 校验语法)
visudo
# 给用户授予所有权限
# zhangsan ALL=(ALL) ALL
# 给组授予特定命令权限
# %devops ALL=(ALL) /usr/bin/systemctl, /usr/bin/reboot
# 查看当前用户 sudo 权限
sudo -l
4.4 特殊权限与 ACL
bash
# SUID:以文件所有者身份执行(如 /usr/bin/passwd)
chmod u+s /path/to/binary
# SGID:目录内新建文件继承组
chmod g+s /data/shared
# 粘滞位:仅所有者可删除(如 /tmp)
chmod +t /tmp
# ACL 精细权限
setfacl -m u:zhangsan:rwx /data/project
getfacl /data/project
5. 磁盘与文件系统管理
5.1 查看磁盘与分区
bash
# 查看磁盘分区
lsblk
fdisk -l
# 查看文件系统使用情况
df -h
# 查看目录占用空间
du -sh /var/log/
du -sh /data/*
5.2 分区与格式化
bash
# 交互式分区工具
fdisk /dev/sdb
# 格式化文件系统
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb2
5.3 挂载与卸载
bash
# 临时挂载
mount /dev/sdb1 /data
# 开机自动挂载(编辑 /etc/fstab)
# /dev/sdb1 /data ext4 defaults 0 0
# 卸载
umount /data
# 查看挂载信息
mount | grep /data
5.4 LVM 逻辑卷管理
bash
# 创建物理卷
pvcreate /dev/sdb1 /dev/sdc1
# 创建卷组
vgcreate vg_data /dev/sdb1 /dev/sdc1
# 创建逻辑卷
lvcreate -L 100G -n lv_data vg_data
# 格式化并挂载
mkfs.ext4 /dev/vg_data/lv_data
mount /dev/vg_data/lv_data /data
# 扩展逻辑卷(在线扩容)
lvextend -L +50G /dev/vg_data/lv_data
resize2fs /dev/vg_data/lv_data
5.5 RAID 磁盘阵列
bash
# 查看 RAID 状态
cat /proc/mdstat
# 创建 RAID 1(镜像)
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 查看 RAID 详情
mdadm --detail /dev/md0
6. 网络配置与管理
6.1 查看网络状态
bash
# 查看 IP 地址
ip addr show
ifconfig
# 查看路由
ip route
route -n
# 查看网络连接
ss -tulnp
netstat -tulnp
# 测试连通性
ping -c 4 baidu.com
6.2 配置静态 IP(CentOS/RHEL)
bash
# 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 关键配置项
# BOOTPROTO=static
# IPADDR=192.168.1.100
# NETMASK=255.255.255.0
# GATEWAY=192.168.1.1
# DNS1=8.8.8.8
# 重启网络服务
systemctl restart network
6.3 配置静态 IP(Ubuntu/Debian)
bash
# 编辑 netplan 配置
vi /etc/netplan/01-netcfg.yaml
# 示例配置
# network:
# version: 2
# ethernets:
# eth0:
# addresses: [192.168.1.100/24]
# gateway4: 192.168.1.1
# nameservers:
# addresses: [8.8.8.8]
# 应用配置
netplan apply
6.4 防火墙管理
bash
# firewalld(CentOS 7+)
systemctl start firewalld
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
firewall-cmd --list-all
# iptables(传统方式)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
service iptables save
# ufw(Ubuntu)
ufw allow 22/tcp
ufw allow 80/tcp
ufw enable
6.5 DNS 与主机名
bash
# 查看/设置主机名
hostname
hostnamectl set-hostname web-server
# 配置 DNS
vi /etc/resolv.conf
# nameserver 8.8.8.8
# nameserver 114.114.114.114
# 本地域名解析
vi /etc/hosts
# 192.168.1.10 db-server
7. 进程与服务管理
7.1 进程查看与管理
bash
# 查看进程
ps -ef
ps aux
# 动态查看进程(类似 top)
htop
# 按关键字查找进程
pgrep -f nginx
ps aux | grep nginx
# 结束进程
kill PID
kill -9 PID # 强制结束
pkill -f nginx # 按名称结束
7.2 systemd 服务管理
bash
# 启动/停止/重启服务
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
# 设置开机自启
systemctl enable nginx
systemctl disable nginx
# 查看服务状态
systemctl status nginx
# 查看所有服务
systemctl list-units --type=service
# 重新加载配置
systemctl daemon-reload
7.3 计划任务
bash
# 编辑当前用户的 crontab
crontab -e
# 示例:每天凌晨 2 点备份
# 0 2 * * * /opt/backup.sh
# 示例:每 5 分钟执行一次
# */5 * * * * /opt/check.sh
# 查看/删除计划任务
crontab -l
crontab -r
# 系统级计划任务
vi /etc/crontab
7.4 后台运行与日志
bash
# 后台运行命令
nohup command > /var/log/app.log 2>&1 &
# 查看后台任务
jobs
bg
fg
# 使用 screen/tmux 保持会话
screen -S mysession
tmux new -s mysession
8. 日志管理与系统监控
8.1 日志体系
bash
# 系统日志
/var/log/messages # CentOS/RHEL 系统日志
/var/log/syslog # Ubuntu 系统日志
/var/log/secure # 安全认证日志
/var/log/cron # 计划任务日志
/var/log/dmesg # 内核日志
# 应用日志
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mysql/error.log
8.2 日志查看与分析
bash
# 实时查看日志
tail -f /var/log/app.log
# 查看最后 100 行
tail -100 /var/log/app.log
# 按关键字过滤
grep "ERROR" /var/log/app.log | tail -50
# 统计错误出现次数
grep -c "ERROR" /var/log/app.log
# 日志轮转配置
vi /etc/logrotate.d/app
# /var/log/app.log {
# daily
# rotate 7
# compress
# missingok
# notifempty
# }
8.3 系统性能监控
bash
# CPU 与内存
top
vmstat 1
# 磁盘 IO
iostat -x 1
# 内存详情
free -h
# 网络流量
sar -n DEV 1
iftop
# 系统负载
uptime
cat /proc/loadavg
8.4 监控工具
bash
# 安装监控工具
yum install -y sysstat # CentOS
apt install -y sysstat # Ubuntu
# 收集历史性能数据
sar -u 1 5 # CPU
sar -r 1 5 # 内存
sar -b 1 5 # IO
sar -n DEV 1 5 # 网络
9. 常见故障排查
9.1 CPU 使用率过高
bash
# 定位高 CPU 进程
top -o %CPU
# 查看进程线程
top -H -p PID
# 分析进程热点
perf top -p PID
9.2 内存不足
bash
# 查看内存使用
free -h
# 查看内存占用最高的进程
ps aux --sort=-%mem | head -10
# 查看 swap 使用
vmstat 1
cat /proc/meminfo | grep -E "Swap|Mem"
9.3 磁盘空间不足
bash
# 查看磁盘使用率
df -h
# 定位大文件
du -sh /* 2>/dev/null | sort -rh | head -10
find / -size +1G -type f 2>/dev/null
# 清理日志与临时文件
find /var/log -name "*.log" -mtime +7 -delete
rm -rf /tmp/*
9.4 网络连接异常
bash
# 查看网络连接状态
ss -s
netstat -an | grep -E "TIME_WAIT|ESTABLISHED"
# 查看端口占用
ss -tlnp | grep 8080
lsof -i :8080
# 测试端口连通性
telnet 192.168.1.10 3306
nc -zv 192.168.1.10 3306
9.5 服务无法启动
bash
# 查看服务状态与错误
systemctl status nginx
journalctl -u nginx -n 50
# 检查配置文件语法
nginx -t
apachectl configtest
# 查看端口是否被占用
ss -tlnp | grep 80
10. 安全加固基础
10.1 SSH 安全
bash
# 修改 SSH 配置
vi /etc/ssh/sshd_config
# 关键配置
# Port 2222 # 修改默认端口
# PermitRootLogin no # 禁止 root 直接登录
# PasswordAuthentication no # 禁用密码登录,使用密钥
# MaxAuthTries 3 # 限制认证尝试次数
# 重启 SSH 服务
systemctl restart sshd
10.2 用户与密码策略
bash
# 设置密码策略
vi /etc/login.defs
# PASS_MAX_DAYS 90
# PASS_MIN_DAYS 7
# PASS_MIN_LEN 12
# 锁定/解锁用户
passwd -l zhangsan
passwd -u zhangsan
# 查看登录记录
last
lastb
10.3 系统更新与补丁
bash
# CentOS/RHEL
yum update -y
yum install -y yum-cron # 自动更新
# Ubuntu/Debian
apt update && apt upgrade -y
11. 实战案例:一次完整的服务器初始化
11.1 场景
新采购一台 CentOS 服务器,需要完成基础运维配置。
11.2 初始化步骤
第一步:系统基础配置
bash
# 设置主机名
hostnamectl set-hostname web-server-01
# 配置时区
timedatectl set-timezone Asia/Shanghai
# 同步时间
yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
第二步:创建运维用户
bash
# 创建用户并加入 sudo 组
useradd