开始系统学习Linux(1):RHEL、SSH、Shell 目录前言初识红帽认识工作环境ShellLinux 访问方式初步使用 shell远程登录认识命令提示符简单命令写在最后前言Linux 在我的生活中可以说是最熟悉的陌生人一方面因为工作或学习而熟悉基本的命令及应用另一方面大部分都是以实用为主的现学现用所以并无体系。最近整理技术栈时打算把它作为基础内容重新系统化的过一遍以拿下红帽 RHCE 为验收以写博客输出为过程。我打算做一个连载系列记录我的学习笔记本篇则是正式开始之前的杂谈做一些基本梳理。初识红帽Red Hat红帽是一家以开源软件和企业级 Linux 解决方案为核心业务的软件公司也是 Linux 企业级发行版领域的重要厂商。旗下有多款开源产品。比如企业级 Linux 发行版 RHEL、开源分布式存储 Ceph、开源自动化工具 Ansible。RHEL 全称 Red Hat Enterprise Linux 红帽企业级 Linux 操作系统。Linux 是一个开源的操作系统内核。内核软件包组成一个操作系统也就是我们所说的 Linux 发行版。RHEL 即 Linux 的一个发行版由 Linux 内核红帽软件包组成。Linux 发行版生态非常庞大其中 Debian 系和 Red Hat 系是企业服务器领域常见的两类发行版生态。不同发行版生态在软件包格式和包管理工具等方面存在差异例如 Debian 系通常使用 .deb 软件包和 aptRHEL 系通常使用 .rpm 软件包并通过 dnf 等工具进行软件包管理。Linux 由于其开源、长时间运行稳定等特性更多用于企业服务器领域虽然有面向个人终端 PC 的发行版比如 Ubuntu但主流还是将 Linux 部署在服务器、嵌入式等领域。操作系统本质是一套软件跑在硬件之上作为软件运行的介质连接软件和硬件。操作系统的作用有启动时初始化、内存和网络管理、文件系统管理、识别硬件资源等最重要的就是为跑在上面的软件分配硬件资源这是操作系统的核心功能。认识工作环境ShellShell 经常会和终端、命令行、bash、cmd 这些概念所混淆事实上它们处于不同层次想要弄清楚它们之间的关系需要先认识人与计算机交互的两种模式GUI 和 CLI 。GUI 即 Graphical User Interface 图形化界面用户通过桌面环境与图标、菜单、按钮等图形元素交互从而操作计算机启动程序、呈现多媒体数据信息。CLI 即 Command Line Interface 命令行界面是一种通过输入文本命令与计算机系统进行交互的方式。终端或控制台则是这种交互方式常见的承载环境。其中GUI 交互方式通常通过桌面环境来实现比如 Windows 的 Windows 桌面、Linux 的 GNOME 或 KDE 桌面环境这些图形化的桌面提供了一系列交互按键与图标给用户用户通过点击即可启动程序、浏览数据信息。GUI 交互方式是我们最常用的交互方式。而 CLI 交互方式则通常通过终端与 shell 实现而终端和 shell 又由具体的软件实现。终端terminal负责提供字符输入输出环境为用户呈现字符界面在这里接收用户的命令输入并展示执行的结果。终端在不同的操作系统上通常由不同的具体软件实现比如 Windows 上的 TerminalLinux 上的 GNOME Terminal。shell 负责解析用户输入的命令、执行 shell 内建命令或启动相应的外部程序和建立标准输入、标准输出、标准错误。bash、cmd、powershell 都是具体的 shell 即 shell 的软件实现不同的 shell 通常有着不同的语法和解释特性。注意 shell 并不负责提供输入输出接口换言之是终端负责接收用户的输入并将输入送给 shell 进行解析和执行。具体而言用户通过键盘向终端输入命令终端接收到用户的字符输入并将之交给 shellshell 解析命令后会根据命令的语法和重定向、管道等操作为启动的进程建立和组织标准输入、标准输出和标准错误。例如命令行参数会作为参数传递给程序而程序的标准输入、标准输出和标准错误则可以连接到终端、文件或其他进程。举一个具体的例子打开 win、搜索 Terminal找到 Windows 上的终端点击打开打开后它默认的选项卡是 Windows PowerShell即提供一个输入输出界面与 Windows PowerShell 这个 shell 交互点击选项卡右侧的加号或者小下三角可以打开多个终端每一个选项卡表示你正在对哪个 shell 做输入并展示输出。这个就是所谓的终端负责提供输入输出界面并将用户输入交给 shell。shell 则负责解析命令并建立标准输入、标准输出、标准错误通道。这个怎么理解呢简单来说命令本身是可执行程序shell 解析命令后在环境变量中找到这个命令可执行程序所在的路径然后启动该程序CPU 执行该可执行程序的二进制机器指令执行完成后输出到 shell 指定的位置。当然内建命令由 cmd 自己实现不用去环境变量里找可执行程序路径这里描述的是外部程序实现的命令比如在 Windows Terminal 中向 cmd 这个 shell 键入命令ipconfigTerminal 接收到用户输入此命令交给 cmdcmd 发现这不是一个内建命令是一个外部程序因此 cmd 会在 PATH 这个环境变量的值中记录的地址尝试搜索该命令代表的程序并最终在 C:\Windows\System32\ipconfig.exe 这个路径找到了此应用程序接下来建立标准输入标准输出由于没有使用重定向符ipconfig.exe 的标准输出默认连接到当前终端因此输出会显示在 Terminal 窗口中接下来 cmd 启动该应用程序由 CPU 执行 ipconfig.exe 的机器指令并最终把执行结果返回到终端页面于是我们在 Terminal 里看到了执行命令的结果。如果我们传给 shell 的命令中有重定向符那么 shell 就会在解析命令的时候建立标准输出到你指定的位置ipconfig D:\ip.txt这一次在 Terminal 终端上见不到 ipconfig 命令的输出了因为我们重定向到了一个文件里执行结果会被输出到该文件中。同理 Linux 系统接下来展示的是在 RHEL9 虚拟机上打开 GNOME Terminal向 bash 这个 shell 输入指令并要求 shell 建立重定向输出到指定位置。ifconfig /tmp/ip.txt总结GUI 和 CLI 是两种常见的人机交互方式。GUI 通常通过桌面环境等图形界面实现CLI 则通常通过终端环境和 Shell 实现。Terminal 负责提供字符输入输出环境Shell 负责解析用户输入的命令并执行内建命令或启动相应程序。Bash、cmd.exe、PowerShell 都是具体的 Shell。Shell 启动的程序由 CPU 执行其机器指令并通过系统调用请求内核提供文件、网络、设备等系统资源。Linux 访问方式Linux 操作系统是软件软件要跑在硬件上所以要么真的组装一台物理机然后安装 Linux 操作系统要么使用虚拟机在已有的物理机上虚拟出来一套硬件然后安装 Linux 操作系统。无论如何Linux 系统常见访问方式主要有以下这几种IO设备直连这是最传统的方式在机房的机柜上有一台装载了 Linux 操作系统的服务器它的背板上向外暴露了几个线缆接口通过将 IO 设备键盘、鼠标、显示屏带到机柜面前连接上这些接口随后就可以看到该服务器的图形化界面或者命令行界面显示在显示屏上。虚拟机控制台在学习或个人实验环境下通常使用这种方式访问 Linux 系统使用类似 VMware 的虚拟化软件创建一个虚拟机并安装 Linux 操作系统随后在 VMware 的页面里启动虚拟机进入使用。从使用体验上看它类似于直接操作一台物理机虚拟机软件提供虚拟的显示器、键盘和鼠标用户可以直接进入 Linux 的 GUI 或 CLI。网络远程访问这是目前最实用的方式由于云计算的兴起目前大部分中小型企业的业务模式都是将业务部署在租用的数据中心的云服务器上作为运维管理人员总不可能一有问题就专门抱着键盘去一趟数据中心的机房因此通常会采用远程管理的方式。具体而言则是本地通过在终端执行 SSH 命令或者使用基于 SSH 协议的远程软件比如 Xshell 获得远程服务器的 Shell 会话。在终端中用户输入的命令会通过加密连接传输到远程服务器主机并由服务器的 Shell 执行结果也会适时的通过加密传输返回到本地终端中。初步使用 shell远程登录接下来通过演示一台 RHEL9 虚拟机来初步使用 shell。首先在 VMware 选项卡中启动虚拟机。该虚拟机的网络使用 NAT 模式应用 VMnet8 这张虚拟网卡本次实验宿主机 IP 地址 192.168.200.1RHEL9 虚拟机 IP 地址 192.168.200.129。我们首先演示在 Windows 的 cmd 直接使用 SSH 命令连接。命令如下ssh root192.168.200.129输入该命令后键入 root 用户密码即可以 root 用户身份登录 RHEL9 虚拟机并执行命令。该命令拆解如下ssh命令程序名 root登录的身份即用户名 分隔符分开登录的用户名以及目标主机IP地址 192.168.200.129登录的操作系统所在的物理机或虚拟机的IP地址接下来演示使用 Xshell 远程软件登录 RHEL9 。打开 Xshell 在弹出的窗口单击左上角新建来创建一个新的会话。其中名称用于在 Xshell 内标记该会话主机是该会话目标主机的 IP 地址。点击连接开始验证登录凭证。为了测试方便我们就用 root 身份登陆了。接下来即可在 Xshell 提供的命令行页面中远程执行命令。当然 Xshell 也可以当作类似 cmd 的终端使用CTRLD 断开当前会话输入刚刚在 cmd 中输入的 SSH 命令依旧会进入身份验证通过后完成远程登录。最后还是简单解释一下以上我们的实验中使用了 Windows Terminal 和 Xshell 这两种终端而在宿主机的 shell 中执行的命令只有 SSH 命令在下面的实验中我们会在获得到的虚拟机 shell 会话中输入命令此时解析该命令的 shell 就不是宿主机的 shell而是 REHL9 虚拟机的 bash shell。我们的行为概括为宿主机启动终端键入 SSH 命令在宿主机的 cmd shell 中解析命令并执行拉起 SSH 进程建立网络连接连接的两端进程分别是宿主机的 ssh 和虚拟机的 sshd接下来我在宿主机终端中输入的命令会由该网络连接送到虚拟机由虚拟机的 bash shell 执行再通过网络连接送回到宿主机终端显示。在这个通信中宿主机的 Shell 负责执行 SSH 客户端SSH 客户端与远程 sshd 建立 SSH 会话登录后用户输入的命令由远程 RHEL 9 上的 Bash 解析和执行命令输出再通过 SSH 会话返回终端显示。认识命令提示符无论是直接呼出终端还是远程登录进入 shell 登录后都会看到这个或者这个指示你可以在后面写入命令的部分叫做命令提示符它拆解如下[rootmyRHEL9 ~]# [testmyRHEL9 ~]$ ———————————————————————————————————————————————————————————————————————————————————— root/test当前登录的用户的用户名 分隔符隔开用户名和主机名 myRHEL9当前登录到的主机的主机名这里采用简短显示即只显示主机名的一部分。比如你的主机名叫做 test.example.com 那么这里显示的就只有 test第一个.之前的字符。 ~当前工作目录的显示结果这里的~是家目录的缩写代表当前登录用户的家目录。 #/$分隔符键入的命令显示在其之后同时它也提示用户权限。在 RHEL 默认 Bash 提示符中root 用户通常显示 #普通用户通常显示 $简单命令认识了 shell 上显示的内容接下来通过完成以下示例来初步使用 Linux 命令。示例一检查当前系统的时间和日期使用 date 命令和 cal 命令显示当前系统的时间和日期。[rootmyRHEL9 ~]# date Tue Aug 25 06:02:03 PM CST 2026 [rootmyRHEL9 ~]# cal August 2026 Su Mo Tu We Th Fr Sa 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示例二创建 test1 用户使用 useradd 命令创建一个用户id 命令用于查看该用户的 uid、gid因此也可通过 id 一个用户名看是否有正常执行结果来检查该用户是否存在于系统中。[rootmyRHEL9 ~]# useradd test1 [rootmyRHEL9 ~]# id test1 uid1001(test1) gid1001(test1) groups1001(test1)示例三使用 root 用户给 test1 用户设置密码使之能够 SSH 远程登录本次实验使用 SSH 密码认证远程登录在配置文件的默认配置下不支持无密码验证登录用户新创建的 test1 用户尚未设置密码因此无法使用账密登录需要先使用 passwd 为其设置密码。passwd 指令用于修改用户密码当后面不加用户名时表示修改当前登录用户的密码。当后面加用户名时表示修改指定用户的密码。[rootmyRHEL9 ~]# passwd test1 Changing password for user test1. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [rootmyRHEL9 ~]#接下来在 Windows 的 cmd 中使用 SSH 命令测试使用密码登录。C:\Users\20335ssh test1192.168.200.129 test1192.168.200.129s password: Register this system with Red Hat Insights: insights-client --register Create an account or view all your systems at https://red.ht/insights-dashboard [test1myRHEL9 ~]$示例四使用 test1 用户登录修改自己的密码当前我们是以 root 用户身份登录切换用户使用 su 指令密码修改则使用 passwd 指令。以下是使用这两个指令时需要注意的对于 su root 使用 su 切换到其他用户时不需要验证目标用户密码非 root 用户使用 su 切换到其他用户时通常需要验证目标用户密码对于 passwd passwd 指令后面可以接参数指定修改密码的用户但只有超级管理员或具有相应权限的用户才可以指定修改其他用户的密码。普通用户无权修改其他用户的密码。passwd 指令修改密码时超级管理员无需验证原密码普通用户需要验证原密码再修改。passwd 指令修改密码时超级管理员可以无视安全密码策略设置密码普通用户需要遵守。比如设置一个过于简单的密码 123 它既不符合长度也不符合安全策略超级管理员可以无视警告设置普通用户则会被拒绝并要求重新设置。#root用户切普通用户不用验证密码 [rootmyRHEL9 ~]# su - test1 #普通用户不允许指定修改密码的对象哪怕是自己 [test1myRHEL9 ~]$ passwd test1 passwd: Only root can specify a user name. #普通用户修改密码需要验证原密码且遵守密码策略不遵守则无法完成密码修改 [test1myRHEL9 ~]$ passwd Changing password for user test1. Current password: New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word passwd: Authentication token manipulation error #遵守密码策略设置密码则可完成密码修改 [test1myRHEL9 ~]$ passwd Changing password for user test1. Current password: New password: Retype new password: passwd: all authentication tokens updated successfully. #普通用户切其他用户需要验证密码 [test1myRHEL9 ~]$ su - root Password: #超级管理员可以修改其他用户密码并且无需验证原密码无需遵守密码策略 [rootmyRHEL9 ~]# passwd test1 Changing password for user test1. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.写在最后以上我们完成了 Linux 的基本介绍以及一些简单的命令使用接下来我会开始连载 RHCE 的复习笔记。