2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
浏览量:65 次 发布时间:2026-01-21 20:34 作者:明扬工控商城 下载docx
2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
好的,我们继续第十五课。今天学习Linux内核和驱动管理,这是深入理解Linux系统的关键。
第一部分:Linux内核基础
1.1 理解Linux内核
内核是操作系统的心脏,负责:
进程管理和调度
内存管理
设备驱动
文件系统
网络协议栈
安全机制
bash
# 查看当前内核信息
uname -a
# 输出示例:
# Linux ubuntu 5.15.0-84-generic #93-Ubuntu SMP Tue Sep 5 17:16:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
# 分解信息:
# Linux: 内核名称
# ubuntu: 主机名
# 5.15.0-84-generic: 内核版本
# x86_64: 硬件架构
# 查看内核详细信息
cat /proc/version
cat /proc/sys/kernel/version
# 查看内核编译配置
zcat /proc/config.gz 2>/dev/null || sudo modprobe configs && zcat /proc/config.gz
1.2 内核版本命名规则
text
主版本.次版本.修订版本-发布号-附加信息
5 .15 .0 -84 -generic
- 主版本:重大更新
- 次版本:偶数=稳定版,奇数=开发版(旧规则)
- 修订版本:bug修复和安全更新
- 发布号:发行版的补丁号
- 附加信息:如generic、lowlatency等
第二部分:内核模块管理
2.1 什么是内核模块?
内核模块是可以动态加载到内核中的代码,通常用于设备驱动。
bash
# 查看已加载的内核模块
lsmod
# 输出格式:
# Module Size Used by
# nvidia 35307520 455
# i915 2473984 4
# ...
# 查看模块详细信息
modinfo nvidia
# 查找特定模块
lsmod | grep nvidia
# 查看模块依赖关系
modprobe --show-depends nvidia
# 查看/proc/modules(原始数据)
cat /proc/modules
2.2 模块管理命令
bash
# 加载模块
sudo modprobe module_name # 自动处理依赖
sudo insmod /path/to/module.ko # 手动加载(不处理依赖)
# 卸载模块
sudo modprobe -r module_name # 自动处理依赖
sudo rmmod module_name # 手动卸载
# 列出所有可用模块
find /lib/modules/$(uname -r) -name "*.ko" | head -20
# 查看模块参数
sudo modprobe -c | grep module_name
# 带参数加载模块
sudo modprobe module_name param1=value1 param2=value2
# 永久配置模块参数
sudo vim /etc/modprobe.d/module_name.conf
# 添加:options module_name param1=value1 param2=value2
2.3 常用内核模块
bash
# 查看网络相关模块
lsmod | grep -E "(net|eth|wireless|wifi)"
# 查看文件系统模块
lsmod | grep -E "(ext|xfs|btrfs|ntfs|fat)"
# 查看USB相关模块
lsmod | grep -i usb
# 查看显卡驱动
lsmod | grep -E "(nvidia|amdgpu|i915|nouveau)"
# 查看声卡驱动
lsmod | grep -E "(snd|alsa)"
# 查看虚拟化模块
lsmod | grep -E "(kvm|virt|vbox)"
第三部分:内核编译和安装
3.1 准备工作
警告:编译内核有风险,可能导致系统无法启动!建议在虚拟机中练习。
bash
# 1. 安装编译工具
sudo apt update
sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc
# 2. 获取内核源码
# 方法1:从kernel.org获取(最新)
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.131.tar.xz
tar -xf linux-5.15.131.tar.xz
# 方法2:从Ubuntu仓库获取
sudo apt install linux-source
tar -xf /usr/src/linux-source-*.tar.xz
# 3. 准备编译目录
cd linux-5.15.131
cp /boot/config-$(uname -r) .config # 复制当前配置
3.2 内核配置
bash
# 基于当前配置进行新配置
make olddefconfig
# 交互式配置界面
make menuconfig
# 菜单导航:
# [*] 编译进内核
# [M] 编译为模块
# [ ] 不编译
# 常用配置选项:
# General setup -> Local version: 添加自定义标识
# Processor type and features -> 设置CPU优化
# Device Drivers -> 设备驱动配置
# File systems -> 文件系统支持
# Networking support -> 网络协议
# Kernel hacking -> 调试选项
# 保存配置后退出
3.3 编译内核
bash
# 1. 清理之前的编译
make clean # 清理编译生成的文件
make mrproper # 彻底清理(包括配置文件)
# 2. 开始编译(根据CPU核心数设置并行编译)
# 查看CPU核心数
nproc
# 假设有8个核心:
make -j8
# 编译时间较长(30分钟到几小时)
# 可以分步编译:
make -j8 bzImage # 编译内核镜像
make -j8 modules # 编译模块
3.4 安装新内核
bash
# 1. 安装模块
sudo make modules_install
# 模块会被安装到 /lib/modules/新内核版本/
# 2. 安装内核
sudo make install
# 这会:
# - 复制内核镜像到 /boot/vmlinuz-版本
# - 复制System.map到 /boot/System.map-版本
# - 复制.config到 /boot/config-版本
# - 更新initramfs
# - 更新GRUB配置
# 3. 验证安装
ls -l /boot/vmlinuz-*
ls -l /lib/modules/
# 4. 查看GRUB菜单中的内核选项
sudo grep ^menuentry /boot/grub/grub.cfg | cut -d "'" -f2
# 5. 重启系统
sudo reboot
# 6. 启动后验证
uname -r
3.5 编译特定模块
bash
# 只编译某个驱动模块
# 假设要编译e1000网卡驱动
cd linux-5.15.131
# 找到驱动源码位置
find . -name "*e1000*" -type f
# 进入驱动目录
cd drivers/net/ethernet/intel/e1000
# 编译单个模块
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
# 安装模块
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
第四部分:内核参数调优
4.1 理解内核参数
内核参数控制内核的行为和性能特征。
bash
# 查看所有可调参数
sudo sysctl -a | head -20
# 查看特定参数
sudo sysctl kernel.hostname
sudo sysctl net.ipv4.ip_forward
sudo sysctl vm.swappiness
# 运行时修改参数
sudo sysctl -w kernel.hostname="newhostname"
sudo sysctl -w vm.swappiness=10
# 查看参数描述(需要安装kernel-doc)
apropos sysctl | grep vm.swappiness
4.2 常用性能调优参数
bash
# 编辑sysctl配置文件
sudo vim /etc/sysctl.d/99-performance.conf
添加以下内容:
bash
# 内存优化
vm.swappiness = 10 # 减少交换倾向
vm.vfs_cache_pressure = 50 # 调整文件系统缓存压力
vm.dirty_ratio = 40 # 脏页比例阈值
vm.dirty_background_ratio = 10 # 后台脏页比例
vm.overcommit_memory = 1 # 内存分配策略
vm.overcommit_ratio = 80 # 内存超配比例
# 网络优化
net.core.rmem_max = 16777216 # 最大接收缓冲区
net.core.wmem_max = 16777216 # 最大发送缓冲区
net.ipv4.tcp_rmem = 4096 87380 16777216 # TCP接收缓冲区
net.ipv4.tcp_wmem = 4096 65536 16777216 # TCP发送缓冲区
net.ipv4.tcp_congestion_control = cubic # TCP拥塞控制算法
net.ipv4.tcp_slow_start_after_idle = 0 # 禁用慢启动
net.core.netdev_max_backlog = 10000 # 网络设备队列长度
# 文件系统优化
fs.file-max = 2097152 # 最大文件句柄数
fs.inotify.max_user_watches = 524288 # inotify监视数
# 安全优化
kernel.kptr_restrict = 1 # 限制内核指针暴露
kernel.dmesg_restrict = 1 # 限制dmesg访问
kernel.randomize_va_space = 2 # 完全地址空间随机化
bash
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-performance.conf
4.3 内核启动参数
bash
# 查看当前启动参数
cat /proc/cmdline
# 编辑GRUB配置以修改启动参数
sudo vim /etc/default/grub
# 找到GRUB_CMDLINE_LINUX_DEFAULT行,添加参数:
# GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=1,2 transparent_hugepage=never"
# 常用启动参数:
# quiet - 减少启动输出
# splash - 显示启动画面
# nosplash - 不显示启动画面
# noapic - 禁用APIC
# acpi=off - 禁用ACPI
# mem=2G - 限制内存大小
# maxcpus=2 - 限制CPU数量
# isolcpus=1,2 - 隔离CPU核心
# transparent_hugepage=never - 禁用透明大页
# elevator=deadline - I/O调度器
# intel_iommu=on - 启用Intel IOMMU
# amd_iommu=on - 启用AMD IOMMU
# pci=noaer - 禁用PCIe高级错误报告
# 更新GRUB配置
sudo update-grub
sudo reboot
第五部分:设备驱动管理
5.1 硬件识别
bash
# 查看PCI设备
lspci
lspci -v # 详细信息
lspci -vv # 更详细信息
lspci -nn # 显示厂商和设备ID
# 查看USB设备
lsusb
lsusb -v # 详细信息
lsusb -t # 树状结构
# 查看块设备
lsblk
lsblk -f # 显示文件系统
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
# 查看SCSI设备
lsscsi
lsscsi -s # 显示容量
# 查看CPU信息
lscpu
cat /proc/cpuinfo
# 查看内存信息
sudo dmidecode -t memory
5.2 驱动管理实践
bash
# 查看设备使用的驱动
# 对于PCI设备:
lspci -k
# 示例输出:
# 00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
# Subsystem: Dell HD Graphics 630
# Kernel driver in use: i915
# Kernel modules: i915
# 对于USB设备:
lsusb -t
# 查看设备对应的sysfs信息
find /sys/devices -name "*driver*" | xargs ls -la
5.3 驱动问题排查
bash
# 1. 检查驱动是否加载
lsmod | grep driver_name
# 2. 查看内核日志中的驱动信息
dmesg | grep -i driver_name
sudo journalctl -k | grep -i driver_name
# 3. 检查设备是否被识别
lspci -nn | grep -i device_name
lsusb | grep -i device_name
# 4. 检查/sys文件系统中的设备信息
find /sys/ -name "*device_name*" 2>/dev/null
# 5. 查看驱动版本
modinfo driver_name | grep version
# 6. 手动加载驱动并查看输出
sudo modprobe -v driver_name
# 7. 如果驱动有参数,尝试调整
sudo modprobe -r driver_name
sudo modprobe driver_name param=value
第六部分:显卡驱动管理
6.1 NVIDIA驱动安装
bash
# 方法1:使用Ubuntu仓库
sudo apt update
sudo ubuntu-drivers devices # 检测推荐驱动
sudo apt install nvidia-driver-535 # 安装推荐版本
# 方法2:使用NVIDIA官方驱动
# 1. 下载驱动:https://www.nvidia.com/Download/index.aspx
# 2. 禁用Nouveau驱动
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
# 添加:
blacklist nouveau
options nouveau modeset=0
# 3. 更新initramfs
sudo update-initramfs -u
# 4. 重启进入文本模式
sudo systemctl set-default multi-user.target
sudo reboot
# 5. 安装驱动
sudo bash NVIDIA-Linux-x86_64-535.104.run
# 6. 验证安装
nvidia-smi
nvidia-settings
# 7. 恢复图形界面
sudo systemctl set-default graphical.target
sudo reboot
6.2 Intel/AMD显卡驱动
bash
# Intel集成显卡(默认已包含)
# 查看Intel显卡信息
lspci | grep -i vga
sudo intel_gpu_top # 需要安装intel-gpu-tools
# 安装Intel显卡工具
sudo apt install intel-gpu-tools vainfo
# AMD显卡
# 开源驱动(默认)
sudo apt install mesa-utils
glxinfo | grep "OpenGL renderer"
# AMD官方驱动(需要较新内核)
sudo apt install firmware-amd-graphics
# 查看AMD显卡信息
sudo lspci -v | grep -A 10 -i "display\|vga"
sudo dmesg | grep -i amdgpu
第七部分:内核调试和性能分析
7.1 内核日志分析
bash
# 查看内核环形缓冲区
dmesg
dmesg -T # 带时间戳
dmesg -H # 人类可读的时间
dmesg -l err,crit,alert,emerg # 只看错误信息
# 实时监控内核日志
sudo tail -f /var/log/kern.log
# 使用journalctl查看内核日志
sudo journalctl -k # 内核消息
sudo journalctl -k --since "1 hour ago"
sudo journalctl -k -f # 实时跟踪
# 清空内核日志缓冲区
sudo dmesg -C
7.2 性能分析工具
bash
# 安装性能分析工具
sudo apt install linux-tools-common linux-tools-$(uname -r)
# perf工具使用
sudo perf list # 列出所有事件
sudo perf stat ls # 统计命令性能
sudo perf record -a -g sleep 10 # 记录系统性能
sudo perf report # 查看报告
# 生成火焰图
git clone https://github.com/brendangregg/FlameGraph
sudo perf record -F 99 -a -g -- sleep 60
sudo perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg
7.3 内核调试配置
bash
# 启用内核调试信息
# 在menuconfig中配置:
# Kernel hacking ->
# [*] Kernel debugging
# [*] Debug Filesystem
# [*] Magic SysRq key
# 使用SysRq键(紧急情况)
# 启用SysRq:echo 1 > /proc/sys/kernel/sysrq
# Alt+SysRq+h:显示帮助
# Alt+SysRq+t:显示任务状态
# Alt+SysRq+m:显示内存信息
# Alt+SysRq+w:显示不可中断任务
# Alt+SysRq+e:终止所有进程(除了init)
# Alt+SysRq+i:杀死所有进程(除了init)
# Alt+SysRq+s:同步所有文件系统
# Alt+SysRq+u:重新挂载所有文件系统为只读
# Alt+SysRq+b:立即重启
# 内核oops分析
# 当内核崩溃时,查看:
cat /var/log/kern.log | grep -i oops
dmesg | tail -100
第八部分:内核安全和加固
8.1 内核安全模块
bash
# 查看SELinux状态
getenforce
sestatus
# 查看AppArmor状态
sudo aa-status
sudo apparmor_status
# 查看LSM(Linux安全模块)状态
cat /sys/kernel/security/lsm
# 查看内核安全特性
grep -E "(PAX|GRSECURITY|LANDLOCK)" /boot/config-$(uname -r)
8.2 内核安全配置
bash
# 创建安全配置文件
sudo vim /etc/sysctl.d/99-security.conf
添加以下内容:
bash
# 网络安全
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 内核指针保护
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
# 进程限制
kernel.exec-shield = 1
kernel.randomize_va_space = 2
# 审计
kernel.printk = 3 3 3 3
# 强制访问控制
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_fifos = 2
fs.protected_regular = 2
# 用户空间监控
kernel.yama.ptrace_scope = 1
# 模块签名
modules.sig_enforce = 1
bash
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-security.conf
8.3 内核模块签名
bash
# 生成密钥对
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Your Name/"
# 签名模块
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 MOK.priv MOK.der module.ko
# 导入密钥到MOK(Machine Owner Key)
sudo mokutil --import MOK.der
# 重启并按照提示完成导入
# 验证模块签名
modinfo module.ko | grep sig
# 启用模块签名验证
echo 1 | sudo tee /sys/module/module/parameters/sig_enforce
第九部分:实战练习
练习1:编译和安装自定义内核
下载Linux 5.15内核源码
基于当前配置创建.config
修改内核版本标识为"-custom"
禁用不需要的驱动和功能
编译并安装内核
验证新内核正常工作
练习2:驱动问题排查
模拟并解决以下驱动问题:
网卡驱动无法加载
USB设备识别问题
显卡驱动冲突
声卡无声问题
练习3:内核参数优化
为以下场景优化内核参数:
高并发Web服务器
数据库服务器
桌面工作站
虚拟化宿主机
练习4:内核安全加固
启用所有推荐的安全参数
配置模块签名
设置AppArmor策略
禁用不必要的内核功能
第十部分:内核维护脚本
10.1 内核更新脚本
bash
#!/bin/bash
# update_kernel.sh
# 安全更新内核
set -e # 出错时退出
echo "=== 内核更新脚本 ==="
echo "当前内核: $(uname -r)"
echo
# 备份当前内核配置
echo "备份当前内核配置..."
sudo cp /boot/config-$(uname -r) /boot/config-$(uname -r).backup
sudo cp /lib/modules/$(uname -r) /lib/modules/$(uname -r).backup -r
# 更新系统
echo "更新系统包..."
sudo apt update
sudo apt upgrade -y
# 安装新内核(如果有)
echo "检查新内核..."
new_kernels=$(apt list --upgradable 2>/dev/null | grep linux-image | wc -l)
if [ $new_kernels -gt 0 ]; then
echo "发现 $new_kernels 个内核更新"
echo "安装新内核..."
sudo apt install linux-image-generic linux-headers-generic -y
# 清理旧内核(保留最近2个)
echo "清理旧内核..."
sudo apt autoremove --purge -y
echo "新内核安装完成,需要重启"
read -p "是否现在重启? (y/N): " choice
if [[ $choice =~ ^[Yy]$ ]]; then
sudo reboot
fi
else
echo "没有发现内核更新"
fi
echo "脚本完成"
10.2 内核模块监控脚本
bash
#!/bin/bash
# monitor_modules.sh
# 监控内核模块状态
LOG_FILE="/var/log/kernel_modules.log"
ALERT_THRESHOLD=1000 # 模块加载次数阈值
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
check_modules() {
echo "=== 内核模块状态检查 ==="
echo "检查时间: $(date)"
echo
# 1. 检查失败的模块
echo "1. 检查加载失败的模块..."
failed_modules=$(dmesg | grep "failed to load" | tail -10)
if [ -n "$failed_modules" ]; then
log "发现加载失败的模块:"
echo "$failed_modules" | while read line; do
log "$line"
done
echo "$failed_modules"
else
echo " 无加载失败的模块"
fi
echo
# 2. 检查模块使用计数
echo "2. 检查高使用计数的模块..."
lsmod | awk 'NR>1 && $3 > '$ALERT_THRESHOLD' {print $1, $3}' | while read module count; do
echo " 警告: $module 使用计数过高: $count"
log "模块 $module 使用计数过高: $count"
done
echo
# 3. 检查未签名的模块
echo "3. 检查未签名模块..."
find /lib/modules/$(uname -r) -name "*.ko" | while read module; do
if ! modinfo "$module" | grep -q "signature:"; then
echo " 未签名: $module"
log "未签名模块: $module"
fi
done
echo
# 4. 检查可疑模块
echo "4. 检查可疑模块..."
suspicious_patterns=("backdoor" "keylogger" "rootkit" "hack")
for pattern in "${suspicious_patterns[@]}"; do
suspicious=$(lsmod | grep -i "$pattern")
if [ -n "$suspicious" ]; then
echo " 发现可疑模块: $suspicious"
log "可疑模块: $suspicious"
fi
done
}
# 主程序
check_modules
echo "详细日志请查看: $LOG_FILE"
10.3 内核性能分析脚本
bash
#!/bin/bash
# analyze_kernel_perf.sh
# 内核性能分析
REPORT_DIR="/var/log/kernel_perf_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$REPORT_DIR"
echo "=== 内核性能分析 ==="
echo "报告目录: $REPORT_DIR"
echo
# 1. 系统概览
echo "1. 系统概览..."
{
echo "系统信息:"
uname -a
echo
echo "CPU信息:"
lscpu
echo
echo "内存信息:"
free -h
echo
echo "运行时间:"
uptime
echo
} > "$REPORT_DIR/01_system_overview.txt"
# 2. 内核参数
echo "2. 收集内核参数..."
sysctl -a > "$REPORT_DIR/02_sysctl_all.txt" 2>/dev/null
# 3. 中断统计
echo "3. 中断统计..."
cat /proc/interrupts > "$REPORT_DIR/03_interrupts.txt"
# 4. 进程调度
echo "4. 进程调度信息..."
{
echo "调度器:"
cat /sys/block/*/queue/scheduler 2>/dev/null
echo
echo "CPU调度域:"
find /sys/devices/system/cpu/cpu*/cpufreq -type f -name "*" 2>/dev/null | xargs grep . 2>/dev/null || true
} > "$REPORT_DIR/04_scheduler.txt"
# 5. 内存管理
echo "5. 内存管理信息..."
{
echo "页面分配统计:"
grep -E "(pages|alloc|free)" /proc/vmstat
echo
echo "大页信息:"
grep -i huge /proc/meminfo
echo
echo "页面回收:"
grep -E "(pgscan|pgsteal)" /proc/vmstat
} > "$REPORT_DIR/05_memory.txt"
# 6. 文件系统缓存
echo "6. 文件系统缓存..."
{
echo "dentry和inode缓存:"
grep -E "(dentry|inode)" /proc/slabinfo
echo
echo "页面缓存:"
free -h | grep -i cache
} > "$REPORT_DIR/06_fs_cache.txt"
# 7. 网络统计
echo "7. 网络统计..."
{
echo "网络接口统计:"
netstat -i
echo
echo "连接统计:"
ss -s
} > "$REPORT_DIR/07_network.txt"
# 8. 块设备统计
echo "8. 块设备统计..."
iostat -x 1 3 > "$REPORT_DIR/08_block_io.txt" 2>/dev/null
# 9. 使用perf采样
echo "9. 使用perf采样(需要sudo权限)..."
if command -v perf &>/dev/null; then
sudo perf record -a -g -o "$REPORT_DIR/perf.data" sleep 10 2>/dev/null
sudo perf report -i "$REPORT_DIR/perf.data" > "$REPORT_DIR/09_perf_report.txt" 2>/dev/null
fi
echo "分析完成。报告保存在: $REPORT_DIR"
echo "可以查看以下文件:"
find "$REPORT_DIR" -name "*.txt" -type f | sort
今日总结
今天我们深入学习了Linux内核和驱动管理:
内核基础:理解内核架构和版本管理
内核模块:模块的加载、卸载和管理
内核编译:从源码编译和安装自定义内核
内核参数:调优系统性能和安全设置
设备驱动:硬件识别、驱动安装和问题排查
显卡驱动:NVIDIA、Intel、AMD显卡管理
内核调试:日志分析、性能调优和问题诊断
内核安全:安全模块、参数加固和模块签名
实用工具:维护脚本和监控工具
重要原则:
谨慎操作:内核修改可能让系统无法启动
备份优先:重要操作前备份数据和配置
测试环境:先在虚拟机或测试机验证
文档记录:记录所有配置和修改
逐步验证:每次修改后验证系统稳定性
内核管理是Linux系统管理的进阶技能,需要理论知识和实践经验结合。建议在安全的测试环境中多加练习。
有问题吗?完成练习后,我们可以继续第十六课:Linux集群和高可用性。
将本文的Word文档下载到电脑
推荐度: