26-1-13 (复习) 1.什么是内核、什么是shell、什么是Linux、什么是开源? 内核、shell、linux、开源的概念
内核 :是操作系统的核心组件,是硬件与软件的“桥梁”,夜视整个操作系统的基石
Shell :是用户与内核之间的交互界面 ,也可以理解为 “命令解释器”,你之前提到的 Linux Shell 脚本,就是基于它来写的。
开源 :是一种软件的授权模式 ,和 “闭源” 相对,核心是源代码公开 。
2.Linux中命令录入方式 2.1.命令行快捷键 2.1.1.光标移动快捷键 快捷键 作用 Ctrl + A光标跳到命令行开头 Ctrl + E光标跳到命令行结尾 Alt + F光标向右跳一个单词 (按空格分隔的单位) Alt + B光标向左跳一个单词 Ctrl + ←等价于 Alt + B(部分终端支持) Ctrl + →等价于 Alt + F(部分终端支持)
2.1.2.命令编辑快捷键 快捷键 作用 Ctrl + U删除光标左侧的所有字符 (清空到行首) Ctrl + K删除光标右侧的所有字符 (清空到行尾) Ctrl + W删除光标左侧的一个单词 Alt + D删除光标右侧的一个单词 Ctrl + Y粘贴之前用 Ctrl+U/K/W 删除的内容(剪贴板复用) Ctrl + H等同于退格键 (删除光标前一个字符) Ctrl + T交换光标前两个字符 的位置(输错字符时超实用)
2.1.3.历史命令快捷键 快捷键 作用 ↑ / ↓向上 / 向下翻找历史命令(按输入顺序) Ctrl + R搜索历史命令 (输入关键词,会自动匹配最近的命令,按 Ctrl+R 继续找更早的)Ctrl + G退出 Ctrl+R 的搜索模式,回到当前命令行 !!快速执行上一条命令 (比翻箭头更快) !n执行历史命令中第 n 条(history 命令可查看历史列表及序号) !字符执行最近一次以该字符开头 的命令(例:!ls 执行最近的 ls 命令) Alt + .粘贴上一条命令的最后一个参数 (例:上一条是 cp a.txt /home,按后直接出现 /home)
2.1.4.进程控制快捷键 快捷键 作用 Ctrl + C强制终止 当前正在运行的命令(最常用,比如命令卡死时)Ctrl + Z把当前命令挂起 (放到后台暂停),用 fg 命令可恢复到前台 Ctrl + D退出当前 Shell 会话(等价于输入 exit 命令)
2.1.5.终端操作快捷键 快捷键 作用 Ctrl + L清空终端屏幕(等价于输入 clear 命令,不会删除历史命令) Ctrl + Shift + C复制终端中选中的内容(图形化终端模拟器适用) Ctrl + Shift + V粘贴复制的内容到终端(图形化终端模拟器适用)
2.1.6.Linux Bash 命令行快捷键速查表 分类 快捷键 作用 光标移动 Ctrl + A跳到命令行开头 Ctrl + E跳到命令行结尾 Alt + F向右跳一个单词 Alt + B向左跳一个单词 Ctrl + ←向左跳一个单词(部分终端支持) Ctrl + →向右跳一个单词(部分终端支持) 命令编辑 Ctrl + U删除光标左侧所有字符 Ctrl + K删除光标右侧所有字符 Ctrl + W删除光标左侧一个单词 Alt + D删除光标右侧一个单词 Ctrl + Y粘贴之前删除的内容 Ctrl + H等同于退格键 Ctrl + T交换光标前两个字符 历史命令 ↑ / ↓向上 / 向下翻历史命令 Ctrl + R搜索历史命令(按 Ctrl+R 继续找更早的) Ctrl + G退出历史命令搜索模式 !!执行上一条命令 !n执行历史命令列表中第 n 条 !字符执行最近一次以该字符开头的命令 Alt + .粘贴上一条命令的最后一个参数 进程控制 Ctrl + C强制终止当前运行的命令 Ctrl + Z挂起当前命令(后台暂停,fg 可恢复) Ctrl + D退出当前 Shell 会话 终端操作 Ctrl + L清空终端屏幕 Ctrl + Shift + C复制选中内容(图形化终端适用) Ctrl + Shift + V粘贴内容到终端(图形化终端适用)
3.命令行中如何获得帮助 命令 –help
man 命令
4.linux上下文管理 4.1.常见命令表 Linux 下文件管理是系统操作的核心内容,常用命令覆盖文件 / 目录的创建、查看、复制、移动、删除、权限修改 等场景。以下是整理的常用命令表,按功能分类并附关键参数说明:
命令分类 命令 功能说明 常用参数 & 示例 目录操作 pwd显示当前工作目录的绝对路径 无参数示例:pwd → /home/user cd切换工作目录 - cd ~:切换到当前用户家目录- cd ..:切换到上级目录- cd /usr/local:切换到指定绝对路径 ls列出目录下的文件和子目录 - -l:以长格式显示(权限、大小、时间等)- -a:显示隐藏文件(以 . 开头的文件)- -h:人性化显示文件大小(KB/MB/GB)示例:ls -lah mkdir创建新目录 - -p:递归创建多级目录示例:mkdir -p /tmp/test/abc rmdir删除空目录 仅能删除空目录示例:rmdir /tmp/test/abc 文件操作 touch创建空文件或修改文件时间戳 示例:touch newfile.txt → 创建空文件 cp复制文件或目录 - -r:递归复制目录(必选参数)- -f:强制覆盖目标文件示例 1:cp file.txt /tmp/ → 复制文件示例 2:cp -r dir1 /tmp/ → 复制目录 mv移动 / 重命名文件或目录 同一目录下执行是重命名,跨目录是移动示例 1:mv oldname.txt newname.txt → 重命名示例 2:mv file.txt /tmp/ → 移动文件 rm删除文件或目录 - -r:递归删除目录- -f:强制删除,不提示确认危险命令 :rm -rf /(切勿执行!会删除系统所有文件)示例:rm -rf dir1 → 删除目录及所有内容 文件查看 cat查看文件全部内容(适合小文件) - -n:显示行号示例:cat -n /etc/hosts more分页查看大文件(只能向下翻页) 示例:more /var/log/messages → 按空格翻页,q 退出 less分页查看大文件(可上下翻页) 示例:less /var/log/syslog → 按 ↑/↓ 滚动,q 退出 head查看文件前 N 行(默认前 10 行) -n:指定行数示例:head -n 5 file.txt → 查看前 5 行tail查看文件后 N 行(默认后 10 行) - -n:指定行数- -f:实时跟踪文件新增内容(日志监控常用)示例 1:tail -n 20 log.txt → 查看后 20 行示例 2:tail -f /var/log/nginx/access.log → 实时监控日志 权限管理 chmod修改文件 / 目录的权限 两种方式:1. 符号法:chmod u+x file.sh(给所有者加执行权限)2. 数字法:chmod 755 file.sh(r=4,w=2,x=1,7=4+2+1)常用权限:755(用户可读可写可执行,其他只读可执行)、644(用户可读可写,其他只读) chown修改文件 / 目录的所有者和所属组 - -R:递归修改目录权限示例:chown -R user:group /home/user/data 文件查找 find按路径、名称、大小等条件查找文件 - 按名称:find /tmp -name "*.txt" → 查找 tmp 下所有 txt 文件- 按大小:find / -size +100M → 查找系统中大于 100M 的文件- 按类型:find /home -type d → 查找 home 下所有目录 which查找命令的可执行文件路径 示例:which ls → /usr/bin/ls locate快速查找文件(基于数据库索引) 需先更新数据库:updatedb示例:locate passwd → 查找所有含 passwd 的文件 文件链接 ln创建硬链接或软链接 - 软链接(常用):ln -s /path/source /path/link → 类似快捷方式- 硬链接:ln /path/source /path/link → 与源文件共享 inode
4.2.补充说明 隐藏文件 :Linux 中以 . 开头的文件为隐藏文件,需用 ls -a 查看。绝对路径 vs 相对路径绝对路径:从根目录 / 开始,如 /home/user/file.txt 相对路径:相对于当前目录,如 ../file.txt(上级目录的文件) 权限符号含义 :r(读,4)、w(写,2)、x(执行,1),权限分三类:u(所有者)、g(所属组)、o(其他用户)。5.文件批处理 5.1.Linux 文件批处理命令表 批处理命令 / 核心语法 核心用途 批处理示例(场景 + 执行命令) for 循环遍历指定文件 / 目录,执行自定义批处理操作(新手易理解) 场景 :批量将当前目录下所有 .txt 文件重命名为 .bak``bash<br>for f in *.txt; do mv "$f" "${f%.txt}.bak"; done<br>(${f%.txt} 表示去掉文件名后缀 .txt)find + xargs高效查找文件并批量执行命令(适合大量文件) 场景 :批量删除当前目录及子目录下所有 .log 文件```bashfind . -type f -name “*.log”xargs rm -f```(-type f 限定文件,-f 强制删除,避免确认) mv(批量重命名)基础批量重命名 / 移动文件 场景 :批量将 file1.txt、file2.txt 移动到 backup 目录bash<br>mv file*.txt backup/<br>cp(批量复制)批量复制文件到指定目录 / 批量备份文件 场景 :批量复制当前目录下所有 .sh 脚本到 /usr/local/bin``bash<br>cp *.sh /usr/local/bin/<br>rm(批量删除)批量删除指定类型 / 条件的文件(谨慎使用) 场景 :批量删除当前目录下所有空文件(大小为 0)bash<br>rm -f $(find . -type f -size 0)<br>sed(批量替换内容)批量修改多个文件内的文本内容 场景 :批量将所有 .conf 文件中的 old_ip 替换为 192.168.1.1``bash<br>sed -i 's/old_ip/192.168.1.1/g' *.conf<br>(-i 直接修改文件,g 全局替换)rename(专用重命名)更简洁的批量重命名(支持正则) 场景 :批量将所有文件名中的 test 替换为 prod(如 test1.txt → prod1.txt)bash<br>rename 's/test/prod/' *.txt<br>(需先安装:apt install rename/yum install rename)awk(批量处理内容)批量提取 / 筛选文件中的指定数据 场景 :批量提取所有 .csv 文件中第 2 列的内容并保存到 result.txt``bash<br>awk -F ',' '{print $2}' *.csv > result.txt<br>(-F ',' 指定分隔符为逗号)
5.2.正则表达式符号 / 字符类 命令表 正则符号(命令) 用途说明 示例(匹配 / 不匹配) *量词,匹配前面的字符 / 表达式 0 次或多次 (贪婪匹配) a*:匹配空字符、a、aa、aaa;不匹配 b、1(仅针对前导字符a)例:`echo”aaa b”grep -o ‘a*’输出aaa、空、b` 旁的空 ?量词,匹配前面的字符 / 表达式 0 次或 1 次 (非贪婪匹配) a?:匹配空字符、a;不匹配 aa、aaa例:`echo”a aa aaa”grep -o ‘a?’输出a、空、a、a、空、a、a、a、空 [[:alpha:]]匹配任意字母字符 (包含大小写,多语言环境适配) 匹配:a、B、中(中文环境);不匹配:1、!、(空格)例:`echo”Ab123 中!” grep -o ‘[[:alpha:]]’输出A、b、中 ` [[:digit:]]匹配任意数字字符 ,等价于 [0-9] 匹配:0、5、9;不匹配:a、$、(空格)例:`echo”abc123def” grep -o ‘[[:digit:]]’输出1、2、3` [[:lower:]]匹配任意小写字母 ,等价于 [a-z] 匹配:a、z、m;不匹配:A、1、!例:`echo”AbCdEf123” grep -o ‘[[:lower:]]’输出b、d、f` [[:upper:]]匹配任意大写字母 ,等价于 [A-Z] 匹配:A、Z、M;不匹配:a、9、@例:`echo”AbCdEf123” grep -o ‘[[:upper:]]’输出A、C、E` [[:alnum:]]匹配任意字母或数字字符 ,等价于 [a-zA-Z0-9] 匹配:a、B、8;不匹配:!、(空格)、@例:`echo”abc123!@#” grep -o ‘[[:alnum:]]’输出a、b、c、1、2、3` [[:punct:]]匹配任意标点符号 (非字母、数字、空白的可打印字符) 匹配:!、@、#、,、.、:;不匹配:a、5、(空格)例:`echo”abc!123@def” grep -o ‘[[:punct:]]’输出!、@` [[:space:]]匹配任意空白字符 (空格、制表符 \t、换行符 \n 等) 匹配:(空格)、\t(制表符)、\n(换行);不匹配:a、9、!例:`echo”a b\tc\nd” grep -o ‘[[:space:]]’输出 空格、\t、\n`
5.3.补充说明 示例中的 grep -o 是终端常用命令,-o 参数表示 “只输出匹配到的部分”,新手可直接复制命令到终端执行,直观看到效果; 部分字符类(如 [[:alpha:]])在中文 / 多语言系统中可匹配非英文字母(如中文、日文),而 [a-zA-Z] 仅匹配英文字母,这是 POSIX 字符类的优势。 5.4.总结 */? 是量词 ,示例核心看 “前导字符的匹配次数”,而非匹配特定字符;[[:xxx:]] 字符类的示例需区分 “匹配 / 不匹配”,快速掌握字符范围;结合 grep -o 命令可直接验证示例效果,是新手学习正则的高效方式。 6.Linux中的输入和输出 6.1.字符设备是啥? 在 Linux 系统中,字符设备(Character Device) 是一类以字符流(字节流) 为单位进行数据传输的硬件设备,也是 Linux 设备文件的两大核心分类之一(另一类是块设备)。
与块设备的核心区别
特性 字符设备 块设备 访问单位 字节(字符流) 固定大小的块(通常 512B/4KB) 访问方式 串行、顺序访问,不支持随机访问 支持随机访问(可跳转到任意块) 缓冲区 无缓冲或小缓冲 有较大的内存缓冲区(提升读写效率) 文件类型标识 cb典型设备 键盘、鼠标、串口 硬盘、U 盘、SD 卡
6.2.输入与输出 在 Linux 系统中,输入(Input)和输出(Output)的核心原理围绕 “一切皆文件” 思想展开 ,本质是用户程序通过内核提供的接口,对文件描述符进行读写操作 ,内核再作为中介完成用户程序与硬件设备的交互。
Linux 把所有输入输出设备都抽象成文件 ,用户程序无需关心硬件细节,只需通过文件描述符(File Descriptor,FD) 来标识和操作这些 “文件”。
文件描述符
是一个非负整数,内核用它来索引和管理打开的文件(包括硬件设备、普通文件、管道等)。
系统默认分配 3 个标准文件描述符,供所有进程使用:
文件描述符 名称 对应设备 / 用途 缩写 0 标准输入 键盘、管道输入等 stdin 1 标准输出 终端、管道输出等 stdout 2 标准错误 终端(专门输出错误信息) stderr
核心原则
输入 = 从文件描述符 读取数据 (如从 stdin 读键盘输入)
输出 = 向文件描述符 写入数据 (如向 stdout 写终端输出)
本质
Linux 输入输出的本质是 “用户程序 ↔ 内核 ↔ 硬件” 的三层交互模型 :
用户程序:通过 read/write 系统调用发起 IO 请求,只操作文件描述符,不碰硬件。 内核:负责管理文件描述符、缓冲区,以及设备驱动,是 IO 交互的核心中介。 硬件:由驱动程序控制,完成数据的物理输入输出(如键盘接收按键、屏幕显示字符)。 26-1-14 (复习) 1.Rhel9.6安装
选项–>高级–>固件类型 改为BIOS
安装源选择 服务器
虚拟网络配置
2.Rhel9.6配置 2.1.关闭安全配置 1 2 3 4 5 6 7 8 9 10 [root@base ~]# systemctl disable --now firewalld Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service" . Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service" . [root@base ~]# systemctl mask firewalld Created symlink /etc/systemd/system/firewalld.service → /dev/null. [root@base ~]# vim /etc/sysconfig/selinux SELINUX=disabled
2.2.更改网络配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@base ~]# vim /boot/loader/entries/1199b04b0d974659ad491305f98dcfe0-5.14.0-570.12.1.el9_6.x86_64.conf 在quiet 添加 net.ifnames=0 [root@base ~]# cd /etc/NetworkManager/system-connections/ [root@base system-connections]# mv ens160.nmconnection eth0.nmconnection [root@base system-connections]# vim eth0.nmconnection 修改id 与interface-name为 eth0 删除uuid nmcli connection reload nmcli connection up eth0 nmcli networking nmcli networking on nmcli networking show ifconfig
2.3.永久挂载 1 2 3 4 5 6 7 [root@base ~]# mkdir /rhel9 [root@base ~]# mount /dev/cdrom /rhel9/ mount: /rhel9: WARNING: source write-protected, mounted read-only. [root@base ~]# vim /etc/rc.d/rc.local 最后一行添加mount /dev/cdrom /rhel9 [root@base ~]# vim /etc/rc.d/rc.local [root@base ~]# chmod +x /etc/rc.d/rc.local
2.4.源仓库配置 2.4.1.本地仓库源 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@base ~]# cd /etc/yum.repos.d/ [root@base yum.repos.d]# vim rhel.repo [AppStarem] name = AppStream baseurl = file:///rhel9/AppStream gpgcheck = 0 [BaseOS] name = BaseOS baseurl = file:///rhel9/BaseOS gpgcheck = 0 [root@base yum.repos.d]# dnf list httpd
2.4.2.网络源 1 2 3 4 5 6 7 8 https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/ https://mirrors.aliyun.com/epel-archive/9.6-2025-11-11/Everything/x86_64/ [root@base ~]# dnf search docker [root@base ~]# dnf search ansible
2.4.3.自建仓库源 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@base ~]# dnf install httpd -y [root@base ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [root@base ~]# mkdir /var/www/html/software [root@base ~]# dnf install docker-ce --downloadonly --destdir /mnt -y [root@base ~]# mv /mnt/* /var/www/html/software/ [root@base ~]# dnf install createrepo -y [root@base ~]# createrepo -v /var/www/html/software/ [root@base yum.repos.d]# vim software.repo [software] name = software baseurl = http://172.25.254.128/software/ gpgcheck = 0 [root@base ~]# dnf info docker-ce.x86_64
26-1-16 (复习) 1.网络管理 1.1.网络ip配置 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 28 29 30 31 32 33 34 [root@node1 system-connections]# ls /sys/class/net/ | grep eth1 eth1 [root@node1 system-connections]# nmcli connection show NAME UUID TYPE DEVICE eth0 7ba00b1d-8cdd-30da-91ad-bb83ed4f7474 ethernet eth0 lo d97aa458-8557-4dd1-a224-0167b68b3f84 loopback lo [root@node1 ~]# nmcli connection modify eth0 ipv4.addresses 172.25.254.130/24 [root@node1 system-connections]# nmcli connection reload [root@node1 system-connections]# nmcli connection up eth0 [root@node1 ~]# cd /etc/NetworkManager/system-connections/ [root@node1 system-connections]# vim eth1.nmconnection [connection] id =eth1type =ethernetinterface-name=eth1 [ipv4] method=manual address1=172.25.254.100/24 gateway=172.25.254.2 dns=114.114.114.114; [root@node1 system-connections]# chmod 600 eth1.nmconnection ip a s eth1 route -n cat /etc/resolv.conf
1.2.网络脚本
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 #!/bin/bash [ $# -lt 3 ] && { echo "错误:请传入至少3个参数!" echo "用法:vmset.sh <主机名> <网卡名> <IP地址> [nogateway/网关]" echo "用法:vmset.sh haha eth1 172.25.254.100 nogateway" exit 1 } HOSTNAME=$1 IFACE=$2 IP=$3 DEFAULT_GW="172.25.254.2" OPTION=${4:-$DEFAULT_GW } CONNECTION=$(nmcli connection show | awk "/$IFACE / {print \$1}" | grep $IFACE ) [ -n "$CONNECTION " ] && { echo "$IFACE 正在使用!!!" nmcli connection delete $CONNECTION } || { echo "$IFACE 未在使用" } [ "$OPTION " = "nogateway" ] && { cat > /etc/NetworkManager/system-connections/$IFACE .nmconnection <<EOF [connection] id=$IFACE type=ethernet interface-name=$IFACE [ipv4] method=manual address1=$IP/24 dns=8.8.8.8 EOF } || { cat > /etc/NetworkManager/system-connections/$IFACE .nmconnection <<EOF [connection] id=$IFACE type=ethernet interface-name=$IFACE [ipv4] method=manual address1=$IP/24,$OPTION dns=8.8.8.8; EOF } chmod 600 /etc/NetworkManager/system-connections/$IFACE .nmconnectionnmcli connection reload nmcli connection up $IFACE hostnamectl hostname $HOSTNAME cat > /etc/hosts<< EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 $IP $HOSTNAME EOF echo "" echo "=====网卡详细信息====" ip a s $IFACE echo "====路由表====" route -n echo "====主机名====" hostname
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 #!/bin/bash set -euo pipefail if [ $# -lt 3 ]; then echo "错误:请传入至少3个参数!" echo "用法:vmset.sh <网卡名> <主机名> <IP地址> [noroute/网关]" echo "示例:vmset.sh eth1 base 172.25.254.101 noroute(从网卡,无网关)" exit 1 fi IFACE=$1 HOSTNAME=$2 IP=$3 OPTION=${4:-} DEFAULT_GW="172.25.2`:w;54.2" CONN_FILE="/etc/NetworkManager/system-connections/${IFACE} .nmconnection" if ! ip link show "$IFACE " &>/dev/null; then echo "错误:网卡 $IFACE 不存在!请检查网卡名是否正确" exit 1 fi if ! echo "$IP " | grep -E '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' &>/dev/null; then echo "错误:IP地址 $IP 格式非法!请输入正确的IPv4地址" exit 1 fi if [ "$OPTION " = "noroute" ]; then GW="" DNS="" else GW=${OPTION:-$DEFAULT_GW } DNS="8.8.8.8;" fi CONNECTION=$(nmcli connection show | awk -v iface="$IFACE " '$1 == iface {print $1}' ) if [ -n "$CONNECTION " ]; then echo "→ 正在删除网卡 $IFACE 的已有连接:$CONNECTION " nmcli connection delete "$CONNECTION " || { echo "错误:删除连接 $CONNECTION 失败!" exit 1 } fi echo "→ 生成网卡 $IFACE 的配置文件:$CONN_FILE " cat > "$CONN_FILE " <<EOF [connection] id=$IFACE type=ethernet interface-name=$IFACE autoconnect=true # 开机自动激活网卡 [ipv4] method=manual # 配置IP和网关(无网关时仅写IP) address1=$IP/24$( [ -n "$GW" ] && echo ",$GW" || "" ) dns=$DNS ignore-auto-dns=true # 忽略自动分配的DNS EOF chmod 600 "$CONN_FILE " echo "→ 重载NetworkManager配置..." nmcli connection reload echo "→ 激活网卡 $IFACE ..." nmcli connection up "$IFACE " || { echo "错误:激活网卡 $IFACE 失败!请检查配置" exit 1 } echo "→ 设置主机名为:$HOSTNAME " hostnamectl hostname "$HOSTNAME " if ! grep -q "$IP $HOSTNAME " /etc/hosts; then echo "→ 向/etc/hosts添加映射:$IP $HOSTNAME " echo "$IP $HOSTNAME " >> /etc/hosts else echo "→ /etc/hosts已存在映射:$IP $HOSTNAME (无需重复添加)" fi echo -e "\n======= 配置结果验证 =======" echo "网卡 $IFACE 地址:" ip a show "$IFACE " | grep -A2 "inet " echo "当前主机名:$(hostname) " echo "路由表(默认路由,仅主网卡显示):" ip route show default 2>/dev/null || echo "无默认路由(符合noroute配置)" echo "=============================" echo "✅ 配置完成!"
26-1-17 (复习) 1.系统引导过程修复 引导过程
1.1.磁盘损坏修复 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 28 29 30 31 [root@base ~]# fdisk -l Disk /dev/nvme0n1:100 GiB,107374182400 字节,209715200 个扇区 磁盘型号:VMware Virtual NVMe Disk 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xb7f6e5e4 设备 启动 起点 末尾 扇区 大小 Id 类型 /dev/nvme0n1p1 * 2048 2099199 2097152 1G 83 Linux /dev/nvme0n1p2 2099200 209715199 207616000 99G 8e Linux LVM Disk /dev/mapper/rhel_172-root:95.08 GiB,102093553664 字节,199401472 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 Disk /dev/mapper/rhel_172-swap:3.91 GiB,4202692608 字节,8208384 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 [root@base ~]# dd if =/dev/zero of=/dev/nvme0n1 bs=446 count=1 记录了1+0 的读入 记录了1+0 的写出 446字节已复制,0.000239378 s,1.9 MB/s
1.1.1.磁盘引导问题表现 解决方法
1.关机
2.插入可安装系统的设备
3.从此设备启动
1.1.2.磁盘引导修复过程 1 2 3 bash-5.1# chroot /mnt/sysroot bash-5.1# grub2-install /dev/nvme0n1
1.2.引导文件缺失修复 1.2.1.查询引导文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@node2 ~]# ll /boot/grub2/grub.cfg -rw-------. 1 root root 6955 1月 15 21:11 /boot/grub2/grub.cfg [root@node2 ~]# ll /boot/loader/entries/ 总用量 8 -rw-r--r--. 1 root root 500 1月 15 21:11 1199b04b0d974659ad491305f98dcfe0-0-rescue.conf -rw-r--r--. 1 root root 475 1月 15 21:23 1199b04b0d974659ad491305f98dcfe0-5.14.0-570.12.1.el9_6.x86_64.conf [root@node2 ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 devtmpfs 4096 0 4096 0% /dev tmpfs 1855068 0 1855068 0% /dev/shm tmpfs 742028 9220 732808 2% /run /dev/mapper/rhel_172-root 99635200 3278240 96356960 4% / /dev/nvme0n1p1 983040 315524 667516 33% /boot /dev/sr0 12462174 12462174 0 100% /rhel9 tmpfs 371012 0 371012 0% /run/user/0
1.2.2.主引导文件缺失修复 1.2.2.1.删除主引导文件 1 [root@node2 ~]# rm -rf /boot/grub2/grub.cfg
1.2.2.2.问题表现
1.2.2.3.修复过程 1 2 3 4 5 6 7 8 grub> set root=(hd0,msdos1) grub> linux16 /vmlinuz-5.14.0-570.12.1.e19_6.x86_64 ro root=/dev/mapper/rhel_172-root net.ifnames=0 grub>initrd16 /initramfs-5.14.0-570.12.1.e19_6.x86_64.img grub> boot
当手动引导启动系统后,需要修复自动引导文件,否则系统重启后仍然要手动引导
1 2 [root@base ~]# grub2-mkconfig > /boot/grub2/grub.cfg
1.2.3.子引导文件缺失修复 1.2.3.1.删除子引导文件 1 [root@base ~]# rm -fr /boot/loader/entries/*
1.2.3.2.问题表现
1.2.3.3.修复过程 与上面的主引导文件修复过程 一致
进入系统后
1 2 [root@base ~]# kernel-install add $(uname -r) /boot/vmlinuz-5.14.0-570.12.1.el9_6.x86_64 [root@base ~]# ls /boot/loader/entries/
当修复子启动文件后网卡的名称设定参数就丢失了需要重新设定,此参数和系统修复本身无关
1 2 [root@base ~]# grubby --update-kernel ALL --args net.ifnames=0
1.3.内核文件修复 1.3.1.删除内核文件
1.3.2.问题表现
1.3.3.解决方法 (1)打开电源时进入固件
(2)进入BOOT页面,将光驱启动调到最前面
(3)保存后,过程同磁盘修复 一致
(4)进入下方页面
1 2 3 4 bash-5.1# df bash-5.1# mount --bind /run/install/repo/ /mnt/sys/ bash-5.1# chroot /mnt/sysroot/ bash-5.1# rpm -ivh /media/BaseOS/Packages/kernel-core-5.14.0-570.12.1.el9_6.x86_64.rpm --force
2026-1-19 (复习) 1.apache构建web服务器 1 2 3 4 5 6 7 8 9 10 11 12 [root@base ~]# dnf install httpd -y [root@base ~]# systemctl enable --now httpd [root@base ~]# dnf install httpd-manual -y 端口: 80 默认发布目录: /var/www/html 默认发布文件: index.html 主配置文件: /etc/httpd/conf/httpd.conf 子配置文件: /etc/httpd/conf.d/*.conf 管理命令: systemctl enable --now httpd
1.1.主配置文件 1.1.1.更改默认发布文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@node4 ~]# echo "index.html ---> /var/www/html" > /var/www/html/index.html [root@node4 ~]# echo "test.html ---> /var/www/html " > /var/www/html/test.html [root@node4 ~]# curl 172.25.254.130 index.html ---> /var/www/html [root@node4 ~]# vim /etc/httpd/conf/httpd.conf 168 <IfModule dir_module> 169 DirectoryIndex index.html 170 </IfModule> [root@base ~]# systemctl restart httpd [root@node4 ~]# curl 172.25.254.130 test.html ---> /var/www/html
1.1.2.修改默认发布目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@node4 ~]# mkdir /web/html -p [root@node4 ~]# echo "index.html ---> /web/html" > /web/html/index.html [root@node4 ~]# vim /etc/httpd/conf/httpd.conf 124 125 DocumentRoot "/web/html" 126 127 128 129 130 <Directory "/web" > 131 AllowOverride None 132 133 Require all granted 134 </Directory> [root@node4 ~]# systemctl restart httpd [root@node4 ~]# curl 172.25.254.130 index.html ---> /web/html
1.1.3.端口修改 1 2 3 4 5 6 7 8 9 10 [root@node4 ~]# vim /etc/httpd/conf/httpd.conf 47 Listen 80 48 Listen 8000 [root@node4 ~]# systemctl restart httpd [root@node4 ~]# netstat -antlupe | grep httpd tcp6 0 0 :::8000 :::* LISTEN 0 32220 2538/httpd 2538/httpd [root@node4 ~]# curl 172.25.254.130:8000 index.html ---> /var/www/html
1.2.子配置文件 1.2.1.虚拟主机 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [root@node4 ~]# mkdir /etc/httpd/logs/node4_log [root@node4 ~]# mkdir mkdir -p /web/node4/{news,bbs}/html [root@node4 ~]# echo news.node4.com > /web/node4/news/html/index.html [root@node4 ~]# echo bbs.node4.com > /web/node4/bbs/html/index.html [root@node4 ~]# vim /etc/httpd/conf.d/vhosts.conf <Directory "/web" > AllowOverride None Require all granted </Directory> <VirtualHost _default_:80> DocumentRoot "/web/html" CustomLog logs/default.log combined </VirtualHost> <VirtualHost *:80> DocumentRoot "/web/node4/news/html" ServerName news.node4.com CustomLog logs/node4_log/news.log combined </VirtualHost> <VirtualHost *:80> DocumentRoot "/web/node4/bbs/html" ServerName bbs.node4.com CustomLog logs/node4_log/bbs.log combined </VirtualHost> [root@node4 ~]# systemctl restart httpd [root@node4 ~]# vim /etc/hosts 172.25.254.130 node4 www.node4.com bbs.node4.com news.node4.com [root@node4 ~]# curl www.node4.com index.html ---> /web/html [root@node4 ~]# curl news.node4.com news.node4.com [root@node4 ~]# curl bbs.node4.com bbs.node4.com
1.2.2.访问控制 1.2.2.1.基于IP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@node4 ~]# mkdir /web/html/admin [root@node4 ~]# echo admin > /web/html/admin/index.html [root@node4 ~]# curl 172.25.254.130/admin/ admin [root@node4 ~]# vim /etc/httpd/conf.d/vhosts.conf <Directory "/web/html/admin/" > Order Deny,Allow Deny from all Allow from 172.25.254.1 </Directory> [root@node4 ~]# systemctl restart httpd [root@node4 ~]# curl 172.25.254.130/admin/ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN" > <html><head > <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> </body></html>
172.25.254.1进行测试
1.2.2.2.基于用户认证 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [root@node4 ~]# mkdir -p /web/html/auth/ [root@node4 ~]# echo auth > /web/html/auth/index.html [root@node4 ~]# curl 172.25.254.130/auth/ auth [root@node4 ~]# htpasswd -cm /etc/httpd/.htpasswd haha New password: Re-type new password: Adding password for user haha [root@node4 ~]# cat /etc/httpd/.htpasswd haha:$apr1$MKFuKZB6$eTeFSJ4Mhn8TMnueDnARX0 [root@node4 ~]# vim /etc/httpd/conf.d/vhosts.conf <Directory "/web/html/auth/" > AuthUserFile /etc/httpd/.htpasswd AuthType basic AuthName "Please input your username and password" Require valid-user </Directory> [root@node4 ~]# systemctl restart httpd [root@node4 ~]# curl 172.25.254.130/auth/ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN" > <html><head > <title>401 Unauthorized</title> </head><body> <h1>Unauthorized</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html> ## haha用户 [root@node4 ~]# curl 172.25.254.130/auth/ -u haha:haha auth
1.2.3.https 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 28 29 30 31 32 33 34 35 36 37 38 39 [root@node4 ~]# dnf install mod_ssl.x86_64 -y [root@node4 ~]# mkdir -p /etc/httpd/certs [root@node4 ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/httpd/certs/node4.key -x509 -days 365 -out /etc/httpd/certs/node4.crt [root@node4 ~]# ll /etc/httpd/certs/ 总用量 8 -rw-r--r-- 1 root root 1237 1月 19 20:22 node4.crt -rw------- 1 root root 1704 1月 19 20:22 node4.key [root@node4 ~]# mkdir -p /web/node4/login/html [root@node4 ~]# echo login.node4.com > /web/node4/login/html/index.html [root@node4 ~]# vim /etc/httpd/conf.d/vhosts.conf <VirtualHost *:443> DocumentRoot "/web/node4/login/html" ServerName login.node4.com CustomLog logs/node4_log/login.log combined SSLEngine on SSLCertificateFile /etc/httpd/certs/node4.crt SSLCertificateKeyFile /etc/httpd/certs/node4.key </VirtualHost> [root@node4 ~]# systemctl restart httpd [root@node4 ~]# curl -k https://login.node4.com login.node4.com <VirtualHost *:80> ServerName login.node4.com RewriteEngine On RewriteRule ^/(.*)$ https://login.node4.com/$1 </VirtualHost> [root@node4 ~]# systemctl restart httpd [root@node4 ~]# curl -I login.node4.com HTTP/1.1 302 Found Date: Mon, 19 Jan 2026 12:30:48 GMT Server: Apache/2.4.62 (Red Hat Enterprise Linux) OpenSSL/3.2.2 Location: https://login.node4.com/ Content-Type: text/html; charset=iso-8859-1