Linux 服务器运维必备技能
Linux 服务器运维是 IT 基础设施管理的核心,掌握这些技能可以确保系统稳定、安全、高效运行。
系统基础
用户和权限管理
sudo useradd -m -s /bin/bash username sudo passwd username
sudo usermod -aG sudo username sudo usermod -s /bin/zsh username
sudo userdel -r username
sudo chmod 755 /path/to/directory sudo chown user:group /path/to/file sudo chown -R user:group /path/to/directory
sudo visudo
|
系统监控
top htop free -h df -h du -sh /path/*
uptime w who
ps aux ps -ef | grep nginx kill PID killall process_name
|
网络配置
网络基础命令
ip addr show ip route show ping google.com traceroute google.com
netstat -tulpn ss -tulpn lsof -i :80
sudo ufw status sudo ufw enable sudo ufw allow 22/tcp sudo ufw deny 23/tcp
|
Nginx 配置
user www-data; worker_processes auto; pid /run/nginx.pid;
events { worker_connections 1024; }
http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048;
gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript;
server { listen 80; server_name example.com; root /var/www/example.com; index index.html;
location / { try_files $uri $uri/ =404; }
location /api { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control "public, immutable"; } } }
|
安全管理
SSH 安全配置
sudo nano /etc/ssh/sshd_config
Port 2222 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers username MaxAuthTries 3
sudo systemctl restart sshd
|
防火墙配置
sudo ufw default deny incoming sudo ufw default allow outgoing
sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp
sudo ufw allow from 192.168.1.0/24 to any port 22 sudo ufw deny from 203.0.113.0/24
sudo ufw enable sudo ufw status verbose
|
Fail2ban 防护
sudo apt install fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT] bantime = 3600 findtime = 600 maxretry = 3
[sshd] enabled = true port = 2222 logpath = /var/log/auth.log
[nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/error.log
sudo systemctl enable fail2ban sudo systemctl start fail2ban
|
性能优化
系统优化
echo "* soft nofile 65536" >> /etc/security/limits.conf echo "* hard nofile 65536" >> /etc/security/limits.conf
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf echo "vm.swappiness = 10" >> /etc/sysctl.conf sysctl -p
sudo apt autoremove sudo apt autoclean sudo journalctl --vacuum-time=7d
|
数据库优化
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] innodb_buffer_pool_size = 1G innodb_log_file_size = 256M max_connections = 200 query_cache_size = 64M slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log
sudo systemctl restart mysql
|
自动化运维
定时任务
crontab -e
0 2 * * * /usr/local/bin/backup_db.sh
*/15 * * * * /usr/local/bin/check_services.sh
0 3 * * 0 find /var/log -name "*.log" -mtime +7 -delete
crontab -l
sudo tail -f /var/log/cron
|
监控脚本
#!/bin/bash
LOAD=$(uptime | awk -F'load average:' '{ print $2 }' | awk '{ print $1 }' | sed 's/,//') if (( $(echo "$LOAD > 2.0" | bc -l) )); then echo "High load: $LOAD" | mail -s "Server Alert" admin@example.com fi
DISK=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $DISK -gt 80 ]; then echo "Disk usage: $DISK%" | mail -s "Server Alert" admin@example.com fi
MEM=$(free | awk 'NR==2{printf "%.2f", $3*100/$2}') if (( $(echo "$MEM > 80" | bc -l) )); then echo "Memory usage: $MEM%" | mail -s "Server Alert" admin@example.com fi
|
备份脚本
#!/bin/bash
BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d_%H%M%S) DB_NAME="myapp_db"
mkdir -p $BACKUP_DIR
mysqldump -u root -p$MYSQL_ROOT_PASSWORD $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
aws s3 cp $BACKUP_DIR/$DB_NAME_$DATE.sql.gz s3://my-backups/mysql/
echo "Backup completed: $BACKUP_DIR/$DB_NAME_$DATE.sql.gz"
|
日志管理
日志轮转
sudo nano /etc/logrotate.d/nginx
/var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 644 nginx nginx postrotate systemctl reload nginx endscript }
|
日志分析
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
sudo awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
sudo tail -f /var/log/nginx/error.log sudo grep "error" /var/log/nginx/error.log
sudo journalctl -u nginx -f sudo journalctl --since "2024-01-01" --until "2024-12-31"
|
故障排除
常见问题排查
sudo dmesg sudo journalctl -xe
sudo systemctl status nginx sudo systemctl restart nginx
sudo netstat -tulpn | grep :80 sudo ss -tulpn | grep :80
sudo df -h sudo du -sh /var/log
ps aux | grep nginx sudo kill -9 PID
|
性能分析
top -p $(pgrep nginx) sudo mpstat 1 10
free -m cat /proc/meminfo
sudo iftop sudo nethogs
sudo iotop sudo iostat -x 1
|
安全加固
系统安全
sudo apt update && sudo apt upgrade -y
sudo apt install ufw fail2ban rkhunter chkrootkit
sudo rkhunter --check sudo chkrootkit
sudo systemctl disable apache2 sudo systemctl stop apache2
sudo apt install libpam-pwquality echo "minlen=8" >> /etc/security/pwquality.conf
|
[!tip]
- 定期备份重要数据和配置文件
- 使用密钥认证而不是密码认证
- 监控系统日志及时发现异常
- 保持系统和软件包最新版本
参考资料