Linux进阶命令与系统管理

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