1. 为什么每个RH124学习者都绕不开命令行这一章
RH124(Red Hat System Administration I)是红帽认证体系里最基础也是最重要的一门课,专门面向刚接触Linux系统管理的初学者。很多人觉得第二章"访问命令行"太简单——无非就是打开终端敲几个命令而已,但实际带过几次学员之后我发现,恰恰是这一章没吃透的人,到了后面学文件权限、进程管理、存储配置时会反复卡壳。原因很简单:整个Linux系统管理的内核就是命令行,图形界面只是外壳,你不把壳底下的交互逻辑搞清楚,后面所有操作都像在沙地上盖楼。
这一章解决的核心问题有三个:第一,命令行到底是什么、它和图形界面有什么本质区别;第二,如何在Linux系统里打开一个可用的命令行环境;第三,怎样高效地执行命令、查看历史、编辑命令行,让操作从"能敲"变成"会敲"。对于准备考RHCSA(红帽认证系统管理员)的人来说,这一章是后续所有章节的地基;对于只是工作中偶尔需要碰Linux的运维、开发、测试人员来说,这一章能帮你摆脱"只会用鼠标点"的困境,真正进入Linux的思维方式。
我见过不少人跳过这一章直接去学文件操作,结果连命令行的基本编辑快捷键都不知道,敲错一个字符就整行重输,效率低得让人着急。所以这篇文章我不打算照本宣科地复述教材目录,而是把命令行访问这件事拆开揉碎,结合我自己在真实环境里的使用习惯和踩坑经验,讲清楚概念背后的逻辑,再给你一套可以立刻上手练习的路径。
2. 图形界面与命令行:不是同一件事的两种做法
2.1 终端、Shell、命令行到底分别指什么
初学者最容易混淆的就是这三个词:终端、Shell、命令行。教材上可能分开讲,但很多人看完了还是搞不清自己打开的那个黑窗口到底叫什么。用大白话说:终端是一个程序,它的职责是给你提供一个可以输入文字、显示输出的窗口界面;Shell是运行在终端里面的解释器,它读取你输入的命令,负责调用操作系统去执行;而命令行这个词,通常指的是"你在Shell里输入命令这种交互方式"。
在红帽的图形化桌面环境(GNOME)里,你通过"Activities"或者右键桌面选择"Open Terminal"打开的那个窗口,就是一个终端模拟器,默认跑的是Bash这个Shell。如果你在文本界面按Ctrl+Alt+F2切换到tty终端,那里面同样是终端加Shell,只是没有图形外壳,速度更快,资源占用更少。
RHEL(Red Hat Enterprise Linux)的默认Shell从很早以前就是Bash(Bourne Again Shell),它在兼容传统Bourne Shell语法的基础上增加了历史记录、命令补全、作业控制这些现代特性。你在RH124第二章里学的所有命令交互技巧,绝大多数都是Bash提供的,不是Linux内核自带的。理解这一层区别很重要,因为如果你以后切到别的工作环境,比如Solaris的默认Shell可能是ksh,AIX环境里有人用csh,你会发现历史命令的回看方式和补全行为都不一样,那时候你就知道问题出在Shell而不是系统上。
2.2 为什么系统管理要强调命令行而非图形工具
这里必须说清楚一个很多新手不愿接受的事实:红帽官方支持的服务器默认安装,往往根本不安装图形桌面。你考RHCSA时,题目要求在什么环境下操作,基本就是SSH远程命令行环境。原因很实际:
- 服务器追求稳定和资源效率,图形桌面会占用大量内存和CPU,还要处理显卡驱动这类跟业务毫无关系的复杂性。
- 图形界面里的同一个操作,不同菜单层级、不同对话框位置会随版本变化,而命令行接口在十年间几乎保持不变。你今天学的命令,放到五年前的老系统上照样能用。
- 命令行天然适合脚本化和自动化。你手动执行的每一条命令,都可以写进脚本重复执行,图形界面做不到这一点。
打个比方:图形界面像自动挡汽车,好上手但你不能精细控制换挡时机;命令行像手动挡,学习曲线陡一点,但一旦熟练,你能精确控制每一个操作。服务器管理员的工作,本质上是稳定、高效、可重复地管理系统,这跟手动挡的掌控感是一路的。
2.3 RHEL里的虚拟终端与图形终端的区别
在RHEL上,你至少有三种途径进入命令行环境,它们各自的适用场景不同:
第一种是图形桌面里的终端模拟器(GNOME Terminal),适合日常学习、试验命令的场景,可以方便地复制粘贴,还能开多个标签页。第二种是按Ctrl+Alt+F3到F6切入的纯文本虚拟终端,系统默认提供多个tty,当你图形桌面卡死或者想在一个干净环境里操作时很有用,按Ctrl+Alt+F2可以回到图形登录界面(不同RHEL版本对应的tty编号可能不同,实际操作时按Ctrl+Alt+F1到F6逐个试一下就行)。第三种是远程SSH登录,这是生产环境里最常用的方式,你管理一台服务器时,通常不会坐在它面前,而是通过网络用SSH连进去。
我个人建议初学者在练习第二章内容时,优先在GNOME Terminal里操作,因为你可以随时查资料、复制命令、对比输出,效率高很多。等基本命令熟练后,再去纯虚拟终端和SSH环境里感受一下没有鼠标辅助的操作节奏,这才算真正把"命令行访问"这条路走通了。
3. Shell提示符与命令结构的底层逻辑
3.1 提示符里藏着哪些信息
打开终端后,你会看到类似下面这样一行提示符:
[student@localhost ~]$这个提示符不是随便画的,每个部分都有含义。方括号里第一段student是当前登录用户名,@后面跟着的是主机名,就是这台机器在网络里的名字。接下来~表示当前所在目录,~是当前用户主目录(home directory)的简写。最后的$表示当前是一个普通用户身份的Shell,如果你是root用户,通常这里的符号会变成#。
我自己刚学的时候总觉得提示符太吵,想过把它改简单一点,后来发现它在排查问题时非常有用。比如你同时开了好几个终端连到不同服务器,每台机器的主机名都显示在提示符里,就能避免在错误的机器上执行命令。还有一次我远程帮同事排查问题,他在自己终端里敲命令,截图发过来我一眼就看到提示符是#不是$,立刻判断出他用了root身份操作,这在我们公司安全规范里是不允许的,很快就定位到问题的根源是权限过大导致的误操作。
RH124教材里这一小节还会提到echo $PS1这个命令,PS1就是控制提示符格式的环境变量。你如果好奇提示符各部分是怎么拼出来的,执行这个命令能看到它的定义,里面那些\u代表用户名、\h代表主机名、\w代表当前工作目录,这些转义符号你可能一辈子都用不上,但理解提示符本身是Shell输出的信息,而不是系统固定画在上面的,这个思路对后面理解命令行的工作方式很有帮助。
3.2 命令、选项、参数的组合规律
在Shell里输入的每一条命令,可以拆分成三个部分:命令本身、选项、参数。例如:
ls -l /home/studentls是命令名,它告诉Shell要执行的操作是列出目录内容;-l是选项(也叫开关),它修改命令的默认行为,这里表示用长格式显示详细信息;/home/student是参数,它告诉命令操作的对象是谁。
这个"命令-选项-参数"的结构是Linux命令行最核心的语法骨架,几乎所有命令都遵循这个规律。理解这个结构之后,你面对一个陌生命令时就知道该从哪里入手:先查命令是干什么的,再看有哪些选项能改变行为,最后搞清楚要给它什么参数。
需要注意的细节是,选项有短选项和长选项之分,短选项是一个连字符加单个字母,比如-l;长选项是两个连字符加一个完整的单词,比如--all。很多命令支持合写短选项,比如ls -a -l可以写成ls -al,但长选项不能这么合并。RHEL的很多命令是GNU项目提供的,它们普遍接受在选项后面加--help来查看简短的帮助信息,这一点在你面对不熟悉的命令时是救命稻草。
关于选项和参数的顺序,大多数情况是先选项后参数,实际上GNU风格命令通常接受选项放在参数后面,但为了规范、可读和可移植性,我建议你始终遵循先命令、再选项、最后参数的顺序。还有一点:有些选项需要附加参数值,比如ls --color=auto里的=auto就表示这个选项的值,注意这种情况下等号两边不要加空格。
3.3 空命令与命令查找路径
在Shell里输入一个命令并按回车,Shell不是直接去执行这个命令,而是要经历一个查找过程。它会按照PATH环境变量里定义的目录顺序,逐个去这些目录里找有没有跟你输入名字匹配的可执行文件。找到就执行,找不到就会报错:
bash: command not found...这个报错是初学者最常撞见的坑之一。很多时候你明明确定系统装了某个工具,却提示command not found,原因不外乎三种:一是命令没真正安装,二是当前用户的PATH里不包含该命令所在目录,三是命令名称记错了。
举个例子,如果你执行ifconfig提示找不到,RHEL较新版本默认已经不安装这个传统工具了,你需要用ip命令,或者手动安装net-tools软件包。学会手动排查PATH的方法是基本功,执行echo $PATH可以看到当前的搜索路径列表,目录之间用冒号分隔。你可以尝试把某个命令的完整路径写出来执行,比如/usr/bin/ls,这绕过了PATH查找直接运行,能帮你验证"命令存在但PATH里找不到"这个情况。
RH124在这一章不会深入讲PATH的配置,但你得先知道有这回事,否则后面装软件、写脚本时,一个简单的command not found就会让你卡住半天。
4. 执行与编辑命令行的实操技巧
4.1 基本命令执行流程和输出流
在Shell里输入命令后,Shell会启动一个子进程来运行这个命令,命令产生的输出通常直接打印到终端屏幕上。这个过程看起来简单,但有几个关键操作值得多说一句。
命令执行期间,你的终端会被这个命令"独占",有些命令(比如ping或者top)会持续运行不退出,直到你按Ctrl+C强制中断。这里有个容易让新手慌乱的点:命令一直在滚动输出,不知道如何让它停下来。记住几个基本控制键:Ctrl+C发送中断信号终止前台命令;Ctrl+D发送EOF(文件结束标志),常用于退出一些交互式程序,比如在空行状态下按Ctrl+D会退出当前Shell会话。
分号(;)可以用来在同一行里顺序执行多条命令,不管前一条成功还是失败,后一条都会执行。比如:
echo "start"; date; echo "end"如果你希望前一条命令成功之后才执行后一条,可以用&&:
mkdir /tmp/test && cd /tmp/test && pwd这个技巧在写自动化任务时特别有用,它保证了每一步都建立在前一步成功的基础上,不会在一个半失败的状态下继续执行。
4.2 历史命令回看与复用
Bash会自动把你在Shell里输入过的命令保存到历史列表中,默认存到用户主目录下的.bash_history文件里。用上下方向键可以在当前会话中翻看前后命令,但是有个细节需要注意:方向键只能浏览当前会话的历史,如果你想搜索很久以前执行过的一条命令,方向键翻起来非常痛苦。
这时候用Ctrl+R进入反向搜索模式是最快的。按Ctrl+R后输入几个关键字,Bash会从历史记录里匹配最近一条包含这些关键字的命令,找到后按回车就可以直接执行,如果想继续往前匹配更早的记录,再按一次Ctrl+R即可。
history命令能列出本会话的全部历史记录,每条命令前面有个编号。你可以用!加编号来重复执行某条命令,比如!42会重新执行第42条命令。如果想重复执行上一条命令,不需要敲编号,直接输入!!(两个感叹号)即可。这里要提醒一下初学者:!这种快捷方式确实快,但在交互式Shell里手动输入时要格外小心,按下回车前确认一下要执行的到底是哪条命令,我见过有人用!!在错误目录里重复执行了删除操作,后果很严重。
还有一个使用习惯值得培养:当你发现一条命令的执行结果正是你需要的,执行history并记下编号,或者直接用!编号复用,比你重新完整输入一遍更安全也更高效。毕竟历史命令是已经验证过的,重敲一遍还可能打错字符。
4.3 Tab补全:效率提升的第一大利器
命令行操作效率的差距,很大程度上来自是否熟练使用Tab补全。你在输入命令名、文件名、目录名时,不必敲完整,按一次Tab键,Bash会尝试自动补全。如果有多个候选,再按一次Tab会列出所有可能。
只按一次Tab和按两次Tab的行为不同,这个需要自己多试几次才能形成肌肉记忆。比如你想查看/etc/systemd/system/timers.target.wants这个路径,全名输入不仅慢还容易打错,用Tab逐个补全目录名,几秒钟就能完成。按两次Tab列表显示候选,实际上是在告诉你"你给的信息不够唯一",你还需要再输入几个字符让候选范围缩小。
Tab补全不仅是省时间的工具,更是一种变相的"路径验证"。如果你在补全某个文件时发现Tab无响应,大概率是你的路径拼错了,或者权限不够看不全目录内容。我平时排错时经常用这个特点:想不起来一个命令的准确名字时,输入前缀再按两次Tab,系统会列出所有可能的命令,这比硬背命令列表高效得多。
4.4 命令行编辑快捷键速查
很多从Windows转过来的用户,在终端里习惯性地按Ctrl+C去复制,结果直接把正在运行的命令中断了,这是Linux新手最经典的误会之一。在Bash里,Ctrl+C是发送中断信号,复制粘贴需要用鼠标右键或者Ctrl+Shift+C/Ctrl+Shift+V。
除了复制粘贴,掌握一批命令行编辑快捷键能极大提升操作效率。这里列一组最常用的:
- Ctrl+A:把光标移动到行首
- Ctrl+E:把光标移动到行尾
- Ctrl+U:删除从光标位置到行首的内容
- Ctrl+K:删除从光标位置到行尾的内容
- Ctrl+W:删除光标前面的一个单词
- Ctrl+L:清屏,相当于输入
clear命令
这套快捷键的用处举例:你输入了一条很长的命令,执行后想稍微修改其中某个参数再执行,不需要从头重打,按方向键上翻出上一条,然后用Ctrl+A跳到行首,Ctrl+E跳到行尾,Ctrl+W删除某个单词,改完后回车执行,整个过程一气呵成。
这里还要特别提一下,Bash默认使用的编辑模式是Emacs风格的键位,所以Ctrl+A、Ctrl+E这些组合才能生效。如果你更熟悉vi编辑风格,可以执行set -o vi切换到vi键位模式,但一般不建议新手这么折腾,等Emacs键位用到自然再说。
5. 超级用户身份与命令行的安全使用习惯
5.1 普通用户与root用户的本质差异
Linux系统的权限模型里,root用户(超级用户)拥有系统上的几乎所有权限,可以修改任何文件、安装任何软件、管理任何服务、删除任何数据。而普通用户的权限被限制在自己主目录和系统明确授权的位置。RH124这一章初步介绍这个区别,主要是为了让你理解为什么有些命令敲下去会提示Permission denied。
远程管理服务器时直接使用root账号登录是非常危险的做法。万一敲错命令、在错误的目录里操作,或者被他人盗用账号,后果是整个系统级别的灾难。红帽官方推荐的实践是:日常用普通用户操作,碰到需要特权的管理任务时,临时用su -切换到root,或者使用sudo命令按需提权。
5.2 sudo命令的使用逻辑与常见误区
sudo的设计思路很巧妙:普通用户不需要知道root的密码,而是通过自己的密码(或者甚至不需要密码,取决于配置)获得执行某条管理命令的临时权限。这个权限的授予与回收,完全由/etc/sudoers文件控制。
在RHEL中,安装系统时创建的第一个用户默认属于wheel组,这个组的用户被授权可以使用sudo。执行方式很简单:
sudo useradd testuser系统会提示输入当前用户的密码(不是root密码),验证通过后这条命令以root权限执行。
初学者刚开始用sudo时最常见的困惑是"为什么同一个命令输了两遍"或者"为什么刚输入过密码又要输"。sudo默认有个时间窗口,通常几分钟内再次执行sudo不会重复要求输密码,但如果过了窗口期或者打开了一个新终端,就会再次提示。这是正常行为,不用怀疑系统坏了。
另外一个容易犯的错误是把sudo加在不该加的地方。比如查看一个需要权限才能读取的文件,正确做法是sudo cat /etc/shadow,但有些人会写成cat /etc/shadow | sudo less,后者虽然管道后面的less以root运行,但cat却以普通用户执行,读取仍然会失败。理解sudo的作用对象是"整条命令"而不是"管道里的后半段",能帮你避免这类看起来很怪的问题。
5.3 用su命令切换身份的场景
su命令用来切换用户身份。执行su -表示切换为root用户,同时启动一个全新的登录Shell,环境变量也一并切换为root的环境;执行su root是不带-的切换,它只切换用户身份,但保留当前环境变量,在某些场景下会出现PATH不一致等诡异现象。
一般来说,建议使用su -而不是su,因为前者得到的root环境更干净、更可预期。不过在现代RHEL系统管理实践中,su -主要用于个别临时需要root Shell的场景,日常管理任务尽量用sudo按需授权更好。从RH124的学习角度来说,你只需要掌握两者的区别和基本用法,等学到用户和权限管理的章节还会深挖。
安全习惯上还有一个细节:一般情况下不要用su -切到root后做一堆操作,用完记得执行exit退回普通用户身份。我自己见过不少同事把终端留在root Shell里就离开座位,这是很大的安全漏洞。
5.4 系统提示符中身份标识的现实意义
回到前面提到的提示符$和#的区别:普通用户是$,root是#。这个符号在终端里看着不起眼,但它时刻提醒你当前的身份。养成执行敏感命令前扫一眼提示符的习惯,是命令行环节非常值得培养的一个安全素养。
如果你需要经常在两三台服务器之间切换,为了让提示符更醒目,可以像我一样在自己的~/.bashrc文件里加一点颜色配置,让root的提示符变成显眼的红色。修改Shell配置文件这件事在这一章可能还没到,但你可以先记住:提示符不是死板的,它是可以通过PS1变量自定义的。学习命令行不只是背命令,还包括理解你每天面对的每一个输出元素背后是什么。
6. 在受限环境中使用命令行的排错思路
6.1 图形终端打不开或黑屏怎么办
RHEL的图形终端用久了可能会出现会话卡死、黑屏等情况。很多人第一反应是重启机器,其实大部分问题都可以通过切换到虚拟终端来解决。
按Ctrl+Alt+F2(有些版本是F3、F4)切到纯文本虚拟终端,输入用户名密码登录,先用ps或top找到卡死的进程,杀掉之后按Ctrl+Alt+F1(或图形会话对应的tty编号)切回图形环境,往往就恢复了。如果只是图形桌面服务本身出了问题,你可以在虚拟终端里执行systemctl restart gdm来重启显示管理器,这比整机重启快得多,也不影响SSH连接里的其他服务。
这套操作在RH124第二章虽说不算重点,但它非常实用。命令行不是只在终端窗口里存在,当你图形环境崩溃时,命令行反而成了拯救系统的唯一入口。
6.2 SSH连接时提示认证失败或连接被拒
生产环境中你需要在命令行里登录远程主机,最常用的就是SSH。如果你在练习时用ssh 用户名@主机地址登录另一台虚拟机,可能遇到的报错集中在三类:
第一类是Connection refused,说明目标主机的sshd服务没有启动,或者防火墙阻止了22号端口。先在目标主机上确认服务状态,执行systemctl status sshd来查看,并确认firewalld有没有放行ssh服务。
第二类是Permission denied (publickey,password),说明认证环节出了问题。最常见原因是密码错误,或者目标主机上的/etc/ssh/sshd_config禁用了密码认证,只允许密钥登录。排查思路是先在另一台机器上用ssh -v开启调试输出,看认证过程卡在了哪一步。
第三类是Host key verification failed,通常发生在目标主机的系统重装或SSH密钥变了之后,本机的known_hosts里还保留着旧记录。解决办法是用ssh-keygen -R 目标主机地址删除旧的主机密钥记录,然后重新连接。这个报错让很多新手一头霧水,因为字面意思跟密码完全没有关系,但理解了SSH的主机密钥验证机制后就很顺理成章了。
6.3 粘贴命令时格式错乱引发的坑
在图形终端或SSH客户端里粘贴长命令时,有时会出现命令被截断、自动执行、格式错乱等情况。尤其是从网页或PDF文档中复制命令时,可能带入不可见的特殊字符或行尾空格,导致Shell报错。
如果粘贴后发现命令行为很奇怪,可以先用方向键上翻到这条命令,用Ctrl+A跳到行首,再配合Ctrl+E和左右方向键仔细检查一遍,看命令有没有被拆成多行。命令行的"所见即所得"能力很强,但前提是你得会编辑已有命令,这也是我为什么在前面反复强调命令行编辑快捷键的原因。
更稳妥的做法是多行命令手敲一遍,至少把关键部分敲出来用Tab补全,既加深记忆又避免带入杂字符。命令是从网上抄的没关系,但你得知道它每一段是什么意思,如果连这段命令是干什么的都讲不清楚,建议别急着执行。
7. 中文环境下的显示乱码与输入问题处理
7.1 终端乱码常见场景及解决办法
不少人在RHEL图形终端里执行某个命令,输出的中文变成了乱码。这通常不是系统坏了,而是字符编码不匹配。Linux系统的习惯是UTF-8编码,大多数现代终端默认也是UTF-8,正常情况下显示中文没有问题。如果出现乱码,先检查两点:当前系统的locale设置是否包含UTF-8与中文支持,可以通过locale命令查看;终端模拟器的字符编码设置是否改成了别的编码。
在纯文本虚拟终端里显示中文有时会乱码,是因为那个环境里的中文字体或locale可能没有配置全,但它的职责本来就不是显示图形界面文字。服务器日常使用大部分都是用英文界面,中文字符乱码有时候并不影响理解命令输出,比如日志里的时间戳和错误代码都是ASCII字符。如果你确需在终端里正常显示中文,检查安装的中文字体包和locale支持即可。
7.2 输入中文与命令行的兼容习惯
命令行输入中文的情况相对少见,因为命令名、文件名、参数都是英文字符,你使用的中文输入法在终端里一般不会起作用,或者在输入命令时不小心把输入法切到了中文状态,导致输入的引号、括号变成了全角字符。
全角字符是命令行排错里一个隐蔽的坑。比如你复制一个URL或路径过来,如果里面的斜杠或引号变成了全角版本的符号,Shell会在解析时给出奇怪的报错。这种问题肉眼几乎看不出来,排查起来又很费时间。我的经验是:如果一条命令莫名其妙报错,但看起来语法完全正确,先用方向键上翻重新检查每一个引号和括号是不是半角字符——也就是英文输入状态下的符号,必要时把可疑部分删掉重新手敲。
7.3 man帮助信息乱码时的查看技巧
命令的手册页(man page)是命令行学习最重要的资料。在RHEL终端里输入man ls如果发现排版和显示异常,或中文翻译版本里出现乱码,通常是因为man使用的分页器在当前终端环境里没有正确设置。
最简单的解决办法是按q退出man,执行export MANOPT=--no-hyphenation这类调整,不过一般情况下默认设置就够用了。在CJK(中日韩)环境下偶尔会遇到宽度计算问题导致表格错位,可以尝试把终端的字符编码固定为UTF-8,或者在纯英文locale下查看帮助信息。这一节我想传达的核心思想是:man page是学习命令的最佳资料,如果遇到显示问题不要放弃用man,先解决显示问题,这本身也是一种命令行排错能力的练习。
8. 从第二章延伸出的日常练习路径与习惯养成
8.1 每天十分钟的刻意练习计划
命令行操作是一项肌肉记忆技能,光看不练等于没学。读完RH124第二章,你可以给自己设计一个每天十分钟的小练习:
第一天在终端里反复执行ls、cd、pwd的组合,刻意使用Tab补全和方向键查找历史,而不是每次都完整输入;第二天练习用Ctrl+A跳到行首、Ctrl+E跳到行尾,尝试用Ctrl+U和Ctrl+K删改一条长命令;第三天用history | grep 关键词搜索历史记录,并用!编号复跑命令。
这个方法看起来笨,但效果很好。两三天后你就不再需要刻意去想快捷键了,手会自己找到方向键的位置。等到学习后面章节时,你输入命令的流畅度会明显高于那些跳过这一章直接学文件操作的人。
8.2 构建自己的命令速查笔记
学习命令行最大的障碍不是命令多,而是没有任何一条命令能靠一次性记忆掌握。我建议你从这一章开始建立自己的速查笔记,不是把教材抄一遍,而是记录自己踩过的坑和解决过程。
比如今天你发现Tab补全在某个目录下没反应,排查后确认是权限问题,那就记一条"无权限目录下Tab失灵,先用ls确认可见内容";明天你发现SSH连接另一台机器提示Host key verification failed,搞明白原因后记一条对应的解决办法。隔一段时间回头看,这本笔记就是你最宝贵的实操经验积累,比任何一本通用手册都更适合你。
8.3 从命令行连接到更广阔的系统管理世界
第二章只是命令行访问的入门,它帮你打开的是一扇通向系统管理深层知识的大门。理解了Shell提示符、命令结构、历史命令和快捷键,你就具备了"用命令行思维来处理问题"的基础。接下来文件系统、权限管理、文本处理、进程管理、服务管理,所有内容都在这套交互方式上展开。
如果这一章学完你仍然觉得不熟练,不用着急,这是正常的。我记得自己刚开始接触Linux时,第一次在无图形界面的服务器上操作,光是搞清楚"光标怎么移动"就折腾了半天。但恰恰是那段笨拙期让我意识到:命令行不是靠背出来的,而是在一次次敲错、修正、再敲的过程中长在手上的。你在这上面花的时间,会在后面的学习和工作中加倍赚回来。
9. 再分享一个命令行环境的实用经验:多标签页与屏幕复用工具
图形终端里很多人习惯开多个标签页,一个窗口敲命令,另一个窗口看日志,再一个窗口写配置文件。这个做法入门够用,但等你需要管理多台服务器时,标签页会变得越来越乱。
我个人的推荐是learn一下tmux或screen这类终端复用工具。它们允许你在一个SSH会话里开多个窗口和面板,断开连接后任务还在后台继续跑,重新连接时能恢复到之前的状态。这对需要长时间执行任务、但又可能断网断连的场景非常实用。
RH124第二章不会讲tmux,什么时候适合自学呢?我的判断是:当你在SSH里执行一个长时间任务,却发现关掉终端连接就会把任务也带走时,就该去了解tmux了。它本质上是"命令行里的窗口管理器",解决的是命令行会话的持久化和管理问题。等你学完RH124整本书、进入生产环境工作后会发现,tmux加Vim加Shell,是很多系统管理员每天的实际工作台。好用的工具不在多,能帮你解决问题最关键。
从第二章这里出发,保持"每敲一条命令都想知道为什么"的习惯,你会慢慢发现命令行世界其实并不神秘,它只是把系统管理的操控权交到了你手里而已。