Linux服务器运维完全指南:从入门到精通的实战手册

Linux服务器运维完全指南:从入门到精通的实战手册

Linux作为服务器操作系统的首选平台,广泛应用于Web服务、数据库、缓存、消息队列等各类生产环境。本文将从基础命令到高级运维技巧,系统梳理Linux服务器运维的核心知识点,帮助运维工程师快速掌握生产环境所需的实战技能。

一、Linux目录结构详解

理解Linux目录结构是运维工作的基础,以下是各核心目录的作用:

目录 用途说明
/bin 存放系统基本命令(二进制可执行文件)
/sbin 存放系统管理命令(超级用户专用)
/etc 系统配置文件目录
/home 普通用户主目录
/root root用户主目录
/lib 系统库文件
/var 可变数据(日志、缓存等)
/tmp 临时文件目录
/usr 用户程序和文件
/opt 可选软件包安装目录
/mnt 临时挂载文件系统
/proc 虚拟文件系统,反映系统运行状态
/dev 设备文件目录

重要子目录说明:

1
2
3
4
5
6
/usr/local/bin    # 本地安装的可执行文件
/usr/local/lib # 本地安装的库文件
/var/log # 日志文件目录
/var/spool # 假脱机数据目录
/etc/sysconfig # 系统配置脚本
/etc/init.d # 系统服务启动脚本(旧版)

二、150个常用Linux命令速查表

2.1 文件和目录操作(12个)

1
2
3
4
5
6
7
8
9
10
11
12
ls       # 列出目录内容
ll # 详细列表(ls -l的别名)
cd # 切换目录
pwd # 显示当前目录
mkdir # 创建目录
rmdir # 删除空目录
touch # 创建空文件或修改时间戳
cp # 复制文件或目录
mv # 移动/重命名文件或目录
rm # 删除文件或目录
ln # 创建链接
find # 查找文件

2.2 查看文件内容(21个)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat      # 查看文件内容(适合小文件)
tac # 倒序查看文件内容
more # 分页查看(只能向下翻)
less # 分页查看(支持上下翻页)
head # 查看文件开头
tail # 查看文件结尾(-f实时监控)
grep # 文本搜索
sed # 流编辑器
awk # 文本处理工具
wc # 统计字数
cut # 截取列
sort # 排序
uniq # 去重
diff # 比较文件差异
vim/vi # 文本编辑器

常用组合示例:

1
2
3
4
5
6
7
8
9
10
11
# 实时查看日志
tail -f /var/log/messages

# 查找包含"error"的行
grep "error" /var/log/syslog

# 统计文件行数
wc -l filename

# 查看文件第10-20行
sed -n '10,20p' filename

2.3 系统信息查看(12个)

1
2
3
4
5
6
7
8
9
10
11
12
uname    # 查看系统信息
hostname # 查看主机名
uptime # 查看系统运行时间
dmesg # 查看内核消息
free # 查看内存使用情况
df # 查看磁盘使用情况
du # 查看目录/文件大小
top # 实时进程监控
ps # 查看进程
netstat # 查看网络连接
ss # 查看socket统计
vmstat # 查看虚拟内存统计

2.4 用户管理(10个)

1
2
3
4
5
6
7
8
9
10
useradd    # 添加用户
usermod # 修改用户
userdel # 删除用户
passwd # 修改密码
chage # 修改密码过期策略
groupadd # 添加用户组
groupmod # 修改用户组
groupdel # 删除用户组
id # 查看用户ID和组ID
su # 切换用户

2.5 网络操作(10个)

1
2
3
4
5
6
7
8
9
10
ifconfig    # 查看/配置网络接口(已废弃,推荐ip)
ip # 网络配置工具
ping # 测试网络连通性
netstat # 查看网络状态
ss # 查看socket连接
traceroute # 追踪路由
wget # 下载文件
curl # 数据传输工具
scp # 远程复制文件
ssh # 远程登录

2.6 压缩与解压(4个)

1
2
3
4
tar     # 打包工具
gzip # gzip压缩
unzip # 解压zip文件
zip # 压缩为zip

常用压缩命令:

1
2
3
4
5
6
7
8
9
10
11
# tar打包并gzip压缩
tar -czvf archive.tar.gz directory/

# 解压tar.gz
tar -xzvf archive.tar.gz

# 压缩为zip
zip -r archive.zip directory/

# 解压zip
unzip archive.zip

三、系统监控与性能分析

3.1 CPU监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看CPU信息
cat /proc/cpuinfo

# 查看物理CPU个数
grep "physical id" /proc/cpuinfo | sort -u | wc -l

# 查看逻辑CPU个数
grep "processor" /proc/cpuinfo | wc -l

# 实时CPU监控
top
htop

# 查看CPU负载
uptime

load average解读:

1
2
load average: 0.52, 0.58, 0.59
1分钟 5分钟 15分钟
  • 数值 < CPU核心数:系统负载正常
  • 数值 > CPU核心数:系统负载较高
  • 数值 >> CPU核心数:系统过载

3.2 内存监控

1
2
3
4
5
6
7
8
9
# 查看内存使用情况
free -h
free -m

# 查看内存详细信息
cat /proc/meminfo

# 查看进程内存使用
ps aux --sort=-%mem | head -20

3.3 磁盘监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看磁盘空间
df -h

# 查看目录大小
du -sh /var/log

# 查看当前目录下各子目录大小
du -h --max-depth=1

# 查找大文件
find / -type f -size +100M

# 查看磁盘I/O
iostat -x 1

3.4 网络监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看网络接口信息
ip addr

# 查看路由表
ip route

# 查看网络连接
netstat -tlnp
ss -tlnp

# 查看网络带宽
iftop
nload

# 查看TCP连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

TCP连接状态说明:

状态 说明
ESTABLISHED 已建立连接
SYN_SENT 正在尝试建立连接
SYN_RECV 收到连接请求
FIN_WAIT1 等待对方关闭连接
FIN_WAIT2 等待对方关闭连接
TIME_WAIT 等待足够时间确保对方收到关闭确认
CLOSE_WAIT 等待本地用户关闭连接
LISTEN 监听状态

四、用户与权限管理

4.1 文件权限基础

Linux文件权限由10个字符表示:

1
2
3
4
5
6
7
-rwxr-xr-x  1 user group  4096 Jan 20 10:00 filename
│└┬┘└┬┘└┬┘
│ │ │ │
│ │ │ └─ 其他用户权限
│ │ └─ 所属组权限
│ └─ 文件所有者权限
└─ 文件类型(-普通文件,d目录,l链接)

权限数值表示:

权限 数值 说明
r 4 读权限
w 2 写权限
x 1 执行权限
- 0 无权限

常用chmod命令:

1
2
3
4
5
6
7
8
9
10
11
# 设置755权限(所有者全权限,组和其他读+执行)
chmod 755 filename

# 递归设置目录权限
chmod -R 755 directory/

# 给所有用户添加执行权限
chmod +x script.sh

# 给组添加写权限
chmod g+w filename

4.2 用户管理实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建用户并指定主目录
useradd -d /home/username -m username

# 设置密码
passwd username

# 将用户添加到sudo组
usermod -aG wheel username

# 删除用户及主目录
userdel -r username

# 修改用户shell
usermod -s /bin/bash username

# 查看用户所属组
groups username

# 切换用户
su - username

4.3 特殊权限

1
2
3
4
5
6
7
8
9
10
11
# SUID权限(执行时以所有者权限运行)
chmod u+s filename

# SGID权限(目录内新建文件继承组)
chmod g+s directory/

# Sticky权限(只允许文件所有者删除)
chmod +t directory/

# 设置777并保留特殊权限
chmod 7777 filename

五、Shell脚本编程

5.1 脚本基础结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# 脚本说明
# Author: admin
#date: 2026-01-25

# 变量定义
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
LOG_FILE="/var/log/backup.log"

# 函数定义
function backup_data() {
echo "开始备份数据..."
tar -czvf ${BACKUP_DIR}/data_${DATE}.tar.gz /data
echo "备份完成"
}

# 主程序
backup_data >> ${LOG_FILE} 2>&1

5.2 实用运维脚本

日志清理脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

LOG_DIR="/var/log"
DAYS=30

# 查找并删除30天前的日志
find ${LOG_DIR} -name "*.log" -mtime +${DAYS} -type f -delete

# 清空当前日志(保留文件)
find ${LOG_DIR} -name "*.log" -type f | while read file; do
echo "" > ${file}
done

echo "$(date): 日志清理完成" >> /var/log/cleanup.log

系统监控脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

# CPU使用率检查
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "${CPU_USAGE} > 80" | bc -l) )); then
echo "警告:CPU使用率超过80%,当前值:${CPU_USAGE}%"
fi

# 内存使用率检查
MEM_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')
if (( $(echo "${MEM_USAGE} > 90" | bc -l) )); then
echo "警告:内存使用率超过90%,当前值:${MEM_USAGE}%"
fi

# 磁盘使用率检查
df -h | awk 'NR>1 {
if (int($5) > 80)
print "警告:分区 " $6 " 使用率超过80%,当前值:" $5
}'

自动备份脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

BACKUP_DIR="/backup/mysql"
MYSQL_USER="backup"
MYSQL_PASS="password"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 备份所有数据库
mysql -u${MYSQL_USER} -p${MYSQL_PASS} -e "show databases;" | grep -v Database | \
while read db; do
mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} --single-transaction ${db} > \
${BACKUP_DIR}/${db}_${DATE}.sql
done

# 压缩备份文件
cd ${BACKUP_DIR}
tar -czvf backup_${DATE}.tar.gz *.sql
rm -f *.sql

# 删除7天前的备份
find ${BACKUP_DIR} -name "backup_*.tar.gz" -mtime +${KEEP_DAYS} -delete

echo "$(date): MySQL备份完成" >> /var/log/backup.log

六、网络配置与安全

6.1 网络配置

配置静态IP(CentOS 7):

1
2
# 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
1
2
3
4
5
6
7
8
9
10
11
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"

IPADDR="192.168.1.100"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="114.114.114.114"

重启网络服务:

1
2
3
4
5
6
# CentOS 7
systemctl restart network

# CentOS 8 / RHEL 8
nmcli connection reload
nmcli connection up eth0

6.2 防火墙配置

iptables基础命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看规则
iptables -L -n

# 允许SSH访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 默认拒绝
iptables -P INPUT DROP
iptables -P FORWARD DROP

# 保存规则
service iptables save

firewalld(CentOS 7+):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看状态
firewall-cmd --state

# 查看开放的端口
firewall-cmd --list-ports

# 开放端口
firewall-cmd --permanent --add-port=8080/tcp

# 开放服务
firewall-cmd --permanent --add-service=http

# 重新加载
firewall-cmd --reload

# 查看区域配置
firewall-cmd --list-all

6.3 SSH安全配置

1
2
# 编辑SSH配置文件
vi /etc/ssh/sshd_config

推荐配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 修改默认端口
Port 2222

# 禁止root登录
PermitRootLogin no

# 使用密钥认证
PubkeyAuthentication yes
PasswordAuthentication no

# 限制登录用户
AllowUsers user1 user2

# 空闲超时断开
ClientAliveInterval 300
ClientAliveCountMax 2

生成SSH密钥:

1
2
3
4
5
6
7
8
# 生成密钥对
ssh-keygen -t rsa -b 4096

# 复制公钥到服务器
ssh-copy-id -p 2222 user@server

# 或者手动添加
# 将公钥内容追加到 ~/.ssh/authorized_keys

七、常见问题处理

7.1 磁盘空间不足

1
2
3
4
5
6
7
8
9
10
11
# 快速定位大文件
find / -type f -size +500M -exec ls -lh {} \;

# 清理yum缓存
yum clean all

# 清理日志
find /var/log -type f -name "*.log" -mtime +30 -delete

# 查看inode使用情况
df -i

7.2 内存不足

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看内存使用
free -m

# 释放缓存(谨慎使用)
echo 3 > /proc/sys/vm/drop_caches

# 查看swap使用
swapon -s

# 创建临时swap
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

7.3 高负载排查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看高CPU进程
top -c

# 查看进程树
pstree -p

# 查看进程打开的文件
lsof -p PID

# 追踪系统调用
strace -p PID

# 查看IO等待
iostat -x 1

八、总结

Linux运维是一项需要持续学习和实践的技能。本文涵盖了从基础命令到高级运维的各个方面,建议读者:

  1. 建立命令速查手册:将常用命令整理成文档,随时查阅
  2. 编写自动化脚本:将重复性工作脚本化,提高效率
  3. 重视监控告警:建立完善的监控体系,提前发现问题
  4. 定期备份数据:制定备份策略,确保数据安全
  5. 保持系统更新:及时更新系统补丁,修复安全漏洞

随着容器化和云原生技术的发展,Linux运维也在向DevOps方向演进。建议在学习传统运维技能的同时,也要关注Docker、Kubernetes等新技术的发展。