公司动态
命令行入门:终端、Shell 和文件操作基础
命令行入门终端、Shell 和文件操作基础开头RHCE 培训进到第二周了开始讲命令行的工作原理。第一周还在敲cd、ls这周突然跳到终端和 Shell 的区别、Linux 一切皆文件这些偏概念的东西。培训讲师讲终端的时候指了下屏幕上的黑窗口讲 Shell 的时候又指了下同一个黑窗口我当时就纳闷了——这不是同一个东西吗为什么两个名字后来问了旁边人才知道终端Terminal就是那个黑乎乎的窗口界面负责让你能输入和看输出。而 Shell 是藏在后台的解释器真正执行命令的是它。打个比方终端是食堂打饭的窗口Shell 是窗口后面的厨师。你对着窗口点菜窗口告诉厨师厨师做好端出来。窗口不负责做菜厨师才是干活的。环境照旧虚拟机VMware Workstation 17 ProRHEL 9RHCE90 课程环境远程连接MobaXterm分屏和右键粘贴功能很方便个人折腾WSL2 Ubuntu 22.04第 2 章 访问命令行1. 终端和 Shell 是什么关系先说结论终端负责输入输出界面Shell 负责解释执行命令。常见的 Shell 有这几种Shell说明bash最主流CentOS / Ubuntu 默认学它就够了shBourne Shell比较古老的 Shell考试可能会提到zshbash 的美化增强版macOS 默认fish对新手友好有语法高亮和自动补全但教学环境少见csh / tcshC 语言风格的 Shell偶尔会提到在终端里输入echo $SHELL可以看到自己用的是哪个 Shellcat /etc/shells可以看系统装了哪些 Shell。我最初以为终端就是 Shell讲师问常见的 Shell 有哪些我答了Windows Terminal、MobaXterm、FinalShell——这些都是终端软件不是 Shell。被纠正了才分清这两个概念。2. CLI 和 GUICLI命令行界面就是敲命令操作GUI图形用户界面就是点鼠标操作。CLIGUI操作方式敲命令点鼠标资源占用低高批量处理一行命令处理大量文件难以批量远程管理SSH 即可需要远程桌面对于初学者来说用 CLI 学 Linux 一个很现实的原因服务器默认不装桌面。你买一台云服务器SSH 连上去就是黑框框没有桌面可以点。而且很多操作用 CLI 确实更方便——比如批量改 1000 个文件名GUI 上改到什么时候去。3. 查看文件内容的命令catfile.txt# 查看整个文件适合短文件lessfile.txt# 分页查看空格翻页q 退出morefile.txt# 也是分页但只能往下翻head-n5file.txt# 只看前 5 行tail-n10file.txt# 只看后 10 行tail-ffile.txt# 实时追踪文件更新看日志用我第一次用cat打开了一个几万行的配置文件终端疯狂刷屏完全翻不到头最后只能关掉重开。后来才知道长文件用less短文件用cat。命令适合场景翻页实时更新cat小文件❌❌less大文件✅ 双向❌more大文件基本被 less 替代✅ 单向❌head只看开头❌❌tail只看结尾 / 监控日志❌✅-f第 3 章 从命令行管理文件1. “Linux 一切皆文件”这句话我听了好几遍才理解。在 Linux 里很多东西都被抽象成了文件普通文件.txt、.log→ 是文件目录 → 是一种特殊文件记录了下级内容的清单键盘输入 → 是文件/dev/stdin屏幕输出 → 是文件/dev/stdout硬盘 → 是文件/dev/sda网络连接 → 也是文件socket好处是可以用同一套方式操作不同类型的东西。比如往屏幕对应的文件里写就是在屏幕上显示从键盘对应的文件里读就是在读输入。Linux 文件系统是一个倒置的树形结构最顶层是/根目录下面分出各种子目录。2. 重要目录及其用途RHCE 考试喜欢考这些整理了一下目录用途/根目录一切起点/rootroot 用户的家目录/home普通用户家目录的上级目录/etc系统配置文件/var经常变动的数据日志等/var/log系统日志/bin常用命令二进制文件/sbin系统管理命令/usr用户安装的程序和数据/tmp临时文件重启后消失/dev设备文件/proc进程信息虚拟文件系统有一次我看到/tmp占了几百 MB想着反正是临时文件直接rm -rf /tmp/*全删了。后来编译程序时报一堆错。后来才知道很多程序运行时会往/tmp写临时文件不能随便清空。3. 绝对路径和相对路径这个其实很简单但我刚学的时候老是转不过弯绝对路径从/开始写不管你在哪都能找到。完整地址/home/zhangsan/readme.txt相对路径从当前位置开始写用.表示当前目录..表示上级目录。比如你在/home/zhangsan/下可以写documents/readme.txt我的记法绝对路径是收货地址省/市/区/街道全国通用相对路径是出门左拐第二个路口右转依赖于你现在在哪。# 我在 /home/zhangsan/ 下cat/etc/passwd# 绝对路径在哪都能用cat../../etc/passwd# 相对路径往上翻两级一开始我在/home目录下想进documents文件夹直接敲cd documents报错因为/home下面根本没有documents。后来养成习惯先pwd看自己在哪再决定用绝对路径还是相对路径。4. rm -r 和 rmdir 的区别命令作用能删非空目录rmdir 目录名等于rm -d删除空目录❌rm -r 目录名递归删除目录及其内容✅rmdirtestdir# 只能删空目录rm-rtestdir# 有内容也能删rm-rftestdir# -f 强制删除不提示我有一次用rmdir删一个目录系统报Directory not empty我还愣了半天——目录不就是用来删的吗后来才知道rmdir只删空目录有文件得用rm -r。另外有个安全提醒rm -rf手滑会出事。我同学有一次想删当前目录下所有文件本来想打rm -rf ./*结果少打了个点变成rm -rf /*虽然新版 Linux 有保护机制没执行成功但也把大家吓得不轻。5. 文件间的链接硬链接和软链接这个概念我刚开始也不太理解后来找了个比喻文件 一本书的内容数据文件名 指向这本书的书签硬链接Hard Link相当于给同一本书多贴了几个书签。删掉其中一个书签书还在只要还有别的书签指向它。所有硬链接指向同一份数据不能跨文件系统不能给目录创建硬链接软链接 / 符号链接Symbolic Link相当于创建了一个快捷方式。快捷方式指向原文件原文件删了快捷方式就打不开了变成死链接。可以跨文件系统可以给目录创建链接创建和查看# 硬链接ln原文件 硬链接名# 软链接ln-s原文件 软链接名# 查看ls-l# 软链接会显示 - 指向的目标stat文件名# 可以看到有几个硬链接指向这个文件ls -l输出中软链接会带箭头lrwxrwxrwx.1root root8Jul2110:00 link_to_file -file.txt# ^ 第一个字符是 l表示链接文件硬链接在ls -l里看起来和普通文件一样但第二列数字表示硬链接数-rw-r--r--.2root root0Jul2110:00 file.txt# ^ 这个 2 表示有 2 个硬链接指向这个文件对比特性硬链接软链接本质多个文件名指向同一份数据一个指向原文件路径的引用跨文件系统❌✅链接目录❌✅原文件删除后还能访问断链ls -l显示像普通文件带-箭头6. 通配符通配符匹配规则*任意多个任意字符?恰好一个任意字符???恰好三个任意字符a*以 a 开头后面任意_b下划线 b_c*下划线 c后面任意[ac]*以 a 或 c 开头后面任意[^abc]不是 a/b/c 的任意一个字符[!abc]同上!和^意思一样都表示取反[^abc]和[!abc]我当初纠结了好久一个用^一个用!到底有什么区别后来发现没区别只是不同语境下的写法变体。考试写哪个都行注意看课件用的是哪个。7.${HOSTNAME}、$(hostname)、反引号的区别这三个写法长得像但做的事情完全不同写法含义${HOSTNAME}读取 Shell 变量HOSTNAME的值$(hostname)执行hostname命令把输出替换到当前位置反引号hostname和$()一样也是执行命令旧式写法不推荐echo$HOSTNAME# 输出变量值localhost.localdomainecho$(hostname)# 执行命令输出localhost.localdomainhostname# 直接执行命令结果一样简单记${}用来取变量的值$()用来执行命令并把结果放进去。8. 单引号和双引号的区别引号变量替换${}命令替换$()双引号✅ 会替换✅ 会替换单引号❌ 原样输出❌ 原样输出namezhangsanechoHello,$name# 输出Hello, zhangsanechoHello, $name# 输出Hello, $name原样输出echoToday is$(date)# 输出Today is Mon Jul 21 ...echoToday is $(date)# 输出Today is $(date)刚学的时候有一次写 Shell 脚本想输出当前用户的 home 目录路径写了echo $HOME结果终端输出了字符串$HOME——单引号不会解析变量所有内容都是字面量。换了双引号就好了。我踩过的坑合集终端 ≠ Shell——终端是窗口界面Shell 是命令解释器考试别写混绝对路径从/开始相对路径从当前位置开始——不确定时先用pwd看一眼rmdir只删空目录有内容得用rm -r硬链接是多贴一张书签软链接是快捷方式单引号原样输出双引号解析变量和命令$()是执行命令${}是取变量值*匹配多个字符?匹配一个字符速记清单终端 窗口 Shell 解释器 绝对路径 从根写起 相对路径 从当前位置写起 rmdir 空目录 rm -r 任何目录 硬链接 多个书签 软链接 快捷方式 字面量 解析变量 * 多个字符 ? 一个字符 $(cmd) 执行命令 ${var} 取变量下一步打算把现在这些基础命令练熟RHCE 考试操作题要求速度不能边想边敲接下来 RHCE 课程要进 vim 和用户权限了得提前看看教材有空做一下红帽官网上的练习题巩固一下最后说两句学了这段时间发现 Linux 的命令其实很多都有规律——ls是 listpwd是 print working directoryrm是 remove。知道了缩写来源会好记很多。不过还是有一些命令偶尔会搞混du和df我每次都要想一下谁看磁盘谁看目录ln加不加-s也偶尔记反。不过老师说这种靠多用就好了不是靠背的。这周就先到这下周学 vim祝我好运。2026年7月 · 写于 RHCE90 培训第二周 · MobaXterm 里挂着一台 RHEL 9 虚拟机