Linux进阶命令与系统管理完整教程(含详细步骤)
前言
本教程面向已经掌握Linux基础命令的用户,提供包含完整操作步骤的进阶系统管理指南。
一、系统管理与监控
1.1 进程管理
ps - 查看进程状态
ps aux # 查看所有进程详细信息
ps -ef # 查看完整格式的进程列表
ps aux | grep nginx # 查找特定进程
top/htop - 实时系统监控
top # 实时显示系统进程和资源使用
# 安装htop(如果未安装)
sudo apt update && sudo apt install htop
htop # 增强版top
kill - 终止进程
# 先查找进程PID
ps aux | grep nginx
# 然后终止进程
kill 1234 # 正常终止进程
kill -9 1234 # 强制终止进程
二、网络配置与管理
2.1 SSH安全配置(完整步骤)
修改SSH端口(详细步骤)
# 1. 备份原始配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# 2. 使用vim编辑配置文件
sudo vim /etc/ssh/sshd_config
# 在vim中的操作:
# 按 i 进入插入模式
# 找到 #Port 22 这一行,取消注释并修改端口号
# 改为:Port 2222
# 添加:PermitRootLogin no
# 添加:PasswordAuthentication no
# 按 ESC 退出插入模式
# 输入 :wq 保存并退出
# 3. 重启SSH服务
sudo systemctl restart ssh
# 4. 检查新端口是否监听
sudo netstat -tulpn | grep 2222
# 5. 测试新端口连接(在另一个终端)
ssh -p 2222 username@server_ip
# 6. 如果测试成功,关闭旧端口
# 再次编辑配置文件,注释掉 Port 22
sudo vim /etc/ssh/sshd_config
# 找到 Port 22,改为 #Port 22
sudo systemctl restart ssh
配置SSH密钥登录
# 1. 在客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 2. 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 username@server_ip
# 或者手动复制:
cat ~/.ssh/id_rsa.pub
# 然后在服务器上:
mkdir -p ~/.ssh
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2.2 防火墙配置(完整步骤)
ufw防火墙配置
# 1. 查看防火墙状态
sudo ufw status
# 2. 允许SSH新端口
sudo ufw allow 2222
# 3. 允许HTTP和HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 4. 删除旧SSH端口(如果不再需要)
sudo ufw delete allow 22
# 5. 启用防火墙
sudo ufw enable
# 6. 确认规则
sudo ufw status numbered
iptables配置(详细步骤)
# 1. 查看当前规则
sudo iptables -L
# 2. 清空现有规则(谨慎操作)
sudo iptables -F
# 3. 设置默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 4. 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 5. 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 6. 允许SSH新端口
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 7. 允许HTTP和HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 8. 保存规则(不同系统方法不同)
# Debian/Ubuntu:
sudo iptables-save > /etc/iptables/rules.v4
# CentOS/RHEL:
sudo service iptables save
三、文件系统与权限管理
3.1 磁盘分区和挂载(完整流程)
# 1. 查看磁盘信息
sudo fdisk -l
# 2. 对新磁盘分区(以/dev/sdb为例)
sudo fdisk /dev/sdb
# 在fdisk中的操作:
# 输入 n 创建新分区
# 输入 p 选择主分区
# 输入 1 分区号
# 按回车使用默认起始扇区
# 按回车使用默认结束扇区(使用整个磁盘)
# 输入 w 保存并退出
# 3. 格式化分区
sudo mkfs.ext4 /dev/sdb1
# 4. 创建挂载点
sudo mkdir /mnt/newdisk
# 5. 临时挂载
sudo mount /dev/sdb1 /mnt/newdisk
# 6. 设置开机自动挂载
sudo vim /etc/fstab
# 在fstab中添加:
# /dev/sdb1 /mnt/newdisk ext4 defaults 0 2
# 7. 测试自动挂载
sudo mount -a
# 8. 检查挂载状态
df -h
3.2 权限管理实战
# 1. 创建测试目录和文件
mkdir -p /tmp/test_dir
echo "test content" > /tmp/test_dir/test_file.txt
# 2. 查看当前权限
ls -la /tmp/test_dir/
# 3. 修改文件权限(数字方式)
chmod 755 /tmp/test_dir/test_file.txt
# 4. 修改文件权限(符号方式)
chmod u=rwx,g=rx,o=rx /tmp/test_dir/test_file.txt
# 5. 修改所有者和组
sudo chown root:root /tmp/test_dir/test_file.txt
# 6. 设置特殊权限
chmod +s /tmp/test_dir/test_file.txt # 设置SUID
chmod +t /tmp/test_dir/ # 设置粘滞位
四、软件包管理实战
4.1 APT包管理完整流程
# 1. 更新软件包列表
sudo apt update
# 2. 升级已安装的软件包
sudo apt upgrade
# 3. 安装新软件包(以nginx为例)
sudo apt install nginx
# 4. 查看软件包信息
apt show nginx
# 5. 搜索软件包
apt search "web server"
# 6. 删除软件包
sudo apt remove nginx
# 7. 彻底删除(包括配置文件)
sudo apt purge nginx
# 8. 清理无用包
sudo apt autoremove
sudo apt autoclean
4.2 源码编译安装Nginx(完整流程)
# 1. 安装编译依赖
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
# 2. 下载Nginx源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 3. 配置编译选项
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module
# 4. 编译和安装
make
sudo make install
# 5. 创建系统服务
sudo vim /etc/systemd/system/nginx.service
# 添加以下内容:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 6. 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
# 7. 检查服务状态
sudo systemctl status nginx
五、Shell脚本编程实战
5.1 系统监控脚本(完整示例)
#!/bin/bash
# 文件名:system_monitor.sh
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> /var/log/system_monitor.log
}
# 检查磁盘空间
check_disk() {
usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $usage -gt 90 ]; then
echo -e "${RED}警告: 根分区使用率 ${usage}%${NC}"
log "磁盘使用率过高: ${usage}%"
return 1
else
echo -e "${GREEN}磁盘使用率: ${usage}%${NC}"
return 0
fi
}
# 检查内存使用
check_memory() {
total=$(free -m | awk 'NR==2{print $2}')
used=$(free -m | awk 'NR==2{print $3}')
usage=$((used * 100 / total))
if [ $usage -gt 80 ]; then
echo -e "${RED}警告: 内存使用率 ${usage}%${NC}"
log "内存使用率过高: ${usage}%"
return 1
else
echo -e "${GREEN}内存使用率: ${usage}%${NC}"
return 0
fi
}
# 检查服务状态
check_service() {
service=$1
if systemctl is-active --quiet $service; then
echo -e "${GREEN}服务 $service 运行正常${NC}"
else
echo -e "${RED}警告: 服务 $service 未运行${NC}"
log "服务 $service 未运行"
systemctl restart $service
log "已尝试重启服务 $service"
fi
}
# 主函数
main() {
echo "=== 系统监控报告 ==="
echo "时间: $(date)"
echo "主机名: $(hostname)"
echo ""
check_disk
check_memory
echo ""
# 检查关键服务
check_service ssh
check_service nginx
check_service mysql
echo ""
echo "=== 监控完成 ==="
}
# 执行主函数
main
5.2 使用脚本
# 1. 创建脚本文件
sudo vim /usr/local/bin/system_monitor.sh
# 2. 添加执行权限
sudo chmod +x /usr/local/bin/system_monitor.sh
# 3. 测试运行
sudo /usr/local/bin/system_monitor.sh
# 4. 设置定时任务
sudo crontab -e
# 添加:*/10 * * * * /usr/local/bin/system_monitor.sh
六、故障排查完整流程
6.1 网站无法访问排查
# 1. 检查本地网络
ping 8.8.8.8
ping google.com
# 2. 检查DNS解析
nslookup yourdomain.com
dig yourdomain.com
# 3. 检查服务状态
sudo systemctl status nginx
sudo systemctl status php-fpm
# 4. 检查端口监听
sudo netstat -tulpn | grep :80
sudo ss -tulpn | grep :80
# 5. 检查防火墙
sudo ufw status
sudo iptables -L
# 6. 查看服务日志
sudo tail -f /var/log/nginx/error.log
sudo journalctl -u nginx -f
# 7. 检查配置文件语法
sudo nginx -t
# 8. 检查文件权限
ls -la /var/www/html/
6.2 数据库连接问题排查
# 1. 检查MySQL服务状态
sudo systemctl status mysql
# 2. 检查端口监听
sudo netstat -tulpn | grep :3306
# 3. 尝试本地连接
mysql -u root -p
# 4. 检查用户权限
mysql -u root -p -e "SELECT user, host FROM mysql.user;"
# 5. 检查MySQL配置
sudo cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep bind-address
# 6. 查看MySQL错误日志
sudo tail -f /var/log/mysql/error.log
# 7. 检查磁盘空间
df -h /var/lib/mysql
七、安全加固完整指南
7.1 系统安全扫描
# 1. 安装lynis
sudo apt update && sudo apt install lynis
# 2. 运行系统审计
sudo lynis audit system
# 3. 查看审计报告
sudo cat /var/log/lynis-report.dat
# 4. 检查可疑文件
sudo find / -name "*.sh" -type f -exec ls -la {} \;
sudo find / -perm -4000 -type f 2>/dev/null
# 5. 检查计划任务
sudo crontab -l
sudo ls -la /etc/cron.*/
# 6. 检查系统用户
sudo cat /etc/passwd | grep -E "(nologin|false)"
sudo last
7.2 Fail2ban安装配置
# 1. 安装Fail2ban
sudo apt update && sudo apt install fail2ban
# 2. 创建本地配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 3. 配置SSH保护
sudo vim /etc/fail2ban/jail.local
# 修改以下内容:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
# 4. 重启Fail2ban
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
# 5. 检查状态
sudo fail2ban-client status
sudo fail2ban-client status sshd