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 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 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 grep "error" /var/log/syslog wc -l filename 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 vmstat
2.4 用户管理(10个) 1 2 3 4 5 6 7 8 9 10 useradd usermod userdel passwd chage groupadd groupmod groupdel id su
2.5 网络操作(10个) 1 2 3 4 5 6 7 8 9 10 ifconfig ip ping netstat ss traceroute wget curl scp ssh
2.6 压缩与解压(4个)
常用压缩命令:
1 2 3 4 5 6 7 8 9 10 11 tar -czvf archive.tar.gz directory/ tar -xzvf archive.tar.gz zip -r archive.zip directory/ unzip archive.zip
三、系统监控与性能分析 3.1 CPU监控 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat /proc/cpuinfogrep "physical id" /proc/cpuinfo | sort -u | wc -l grep "processor" /proc/cpuinfo | wc -l top htop 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/meminfops aux --sort =-%mem | head -20
3.3 磁盘监控 1 2 3 4 5 6 7 8 9 10 11 12 13 14 df -hdu -sh /var/logdu -h --max-depth=1find / -type f -size +100M 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 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 chmod 755 filenamechmod -R 755 directory/chmod +x script.shchmod 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 usermod -aG wheel username userdel -r username usermod -s /bin/bash username groups usernamesu - username
4.3 特殊权限 1 2 3 4 5 6 7 8 9 10 11 chmod u+s filenamechmod g+s directory/chmod +t directory/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 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 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_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 *.sqlfind ${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 systemctl restart network 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 iptables -A INPUT -p tcp --dport 22 -j ACCEPT 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 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
七、常见问题处理 7.1 磁盘空间不足 1 2 3 4 5 6 7 8 9 10 11 find / -type f -size +500M -exec ls -lh {} \; yum clean all find /var/log -type f -name "*.log" -mtime +30 -delete 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_cachesswapon -s fallocate -l 1G /swapfile chmod 600 /swapfilemkswap /swapfile swapon /swapfile
7.3 高负载排查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 top -c pstree -p lsof -p PID strace -p PID iostat -x 1
八、总结 Linux运维是一项需要持续学习和实践的技能。本文涵盖了从基础命令到高级运维的各个方面,建议读者:
建立命令速查手册 :将常用命令整理成文档,随时查阅
编写自动化脚本 :将重复性工作脚本化,提高效率
重视监控告警 :建立完善的监控体系,提前发现问题
定期备份数据 :制定备份策略,确保数据安全
保持系统更新 :及时更新系统补丁,修复安全漏洞
随着容器化和云原生技术的发展,Linux运维也在向DevOps方向演进。建议在学习传统运维技能的同时,也要关注Docker、Kubernetes等新技术的发展。