
我备考RH124的时候第三章“从命令行管理文件”一开始是被我当成“最简单的操作课”跳过的。毕竟创建、复制、移动、删除文件这些动作谁在Linux里没做过几次真正让我改变看法的是一次实验事故我在/tmp下建了一整套测试目录想清理垃圾文件时顺手敲了一条rm -rf /tmp/test*结果目录结构里其他几个无害的测试文件夹也一起没了。当时我连为什么都没想明白后来对照RH124第三章重新过了一遍才发现自己对通配符、路径解析和命令选项的理解全停留在“凑合能用”的层面。这一章表面是文件管理命令实际是后面权限、文本处理、用户管理等内容的操作地基没有路径概念权限那章根本没法看不懂文件类型ln、find这些命令一出错就懵不掌握通配符批量处理日志文件只能老老实实一个个敲。而且RH124的问答题或者说RHCSA方向的理论考点恰恰最喜欢从这些“人人都觉得会”的小知识点里挖坑。所以这篇我按自己复习时踩过的坑和整理过的知识点来写帮你把第三章从头到尾过一遍顺便给出能直接照着做的实验步骤。1. 先摸清RH124第三章的考试范围文件管理命令的边界和实验沙盒搭建1.1 这一章到底覆盖哪些知识点RH124第三章的正式名字叫“从命令行管理文件”注意它强调的是“从命令行”不是让你用图形文件管理器。红帽的方向很明确生产环境里文件操作几乎都走命令行尤其是远程服务器只有SSH的情况下你不可能开GUI。所以这一章的知识点可以分成四块文件系统层次结构、路径与目录操作、基本文件管理命令、通配符使用。很多人会把find、grep这种检索命令提前塞进来学其实第三章还没到那一步先把最基础的“增删改查”和路径体系吃透后面学find、grep、vim时才不会手忙脚乱。这里有一张我复习时整理的标准目录表常见问答题会直接考“某个类型的文件应该放在哪个目录”目录典型内容记忆要点/etc系统配置文件配置基本都在这/var日志、缓存、队列等可变数据会不断变大/tmp临时文件重启可能被清理/home普通用户家目录每个用户对应一个子目录/rootroot管理员家目录只有root的家目录特殊/dev设备文件硬盘、终端、null都在这里/bin、/sbin、/usr/bin、/usr/sbin命令程序现代RHEL中/bin和/sbin通常是指向/usr/bin和/usr/sbin的软链接/boot内核和引导文件不能随便乱动问答题如果问“临时文件放哪、配置文件放哪、用户家目录在哪”基本上就是围绕这张表出题。我的建议是不要死记硬背而是多看看每个目录里实际装了什么比如用ls /etc就会发现几乎所有服务的配置都集中在这一个地方用ls /dev/sda*就能看到磁盘设备文件的命名规律这样印象比背书深刻得多。1.2 搭建一个安全的练习沙盒学习文件管理命令最大的风险就是误删真实文件。所以我强烈建议你在/tmp下建一个专用练习沙盒所有危险操作都限制在这个目录里。好处有两个一是/tmp本身是临时目录就算你把东西搞乱了重启后系统也不会受到太大影响二是你可以在里面大胆验证rm -rf、mv、ln这些命令的真实行为而不必担心把家目录或系统目录搞坏。我习惯用这样的命令初始化一个练习环境mkdir -p /tmp/rh124-lab/docs /tmp/rh124-lab/backup /tmp/rh124-lab/project cd /tmp/rh124-lab touch docs/readme.txt docs/report-2024.log docs/report-2025.log touch backup/notes.txt project/run.sh建好之后你还可以用ls -li看一眼初始状态那些数字就是inode编号后面讲硬链接和符号链接时会反复用到。我把这个沙盒看成“实验台”每次验证一个新命令之前先想清楚“这个命令如果带通配符到底会匹配到什么”想不清楚就先echo一把预览再执行真正的操作。这个习惯让我后续很少再翻车。2. 路径这关过不好后面操作全是坑绝对路径、相对路径和cd/ls的实用细节2.1 绝对路径与相对路径分界线就一个斜杠路径是文件管理的第一道门槛。绝对路径一定以/开头比如/tmp/rh124-lab/docs/readme.txt它不依赖你当前在哪个目录任何时候都能唯一定位到一个文件。相对路径不以/开头它基于当前工作目录来解释比如你已经在/tmp/rh124-lab下那么docs/readme.txt就能访问到同一个文件。RH124问答题里有个经典变形给你一个当前目录和一个相对路径让你写出对应的绝对路径或者反过来给你绝对路径和当前目录让你给出相对路径。这种题没有技巧唯一的办法是动手画路径树。我自己复习时习惯用pwd先确认当前位置再想清楚..表示上一级目录、.表示当前目录。写脚本或配置文件时我会尽量用绝对路径因为脚本的执行者可能不在你预期的目录下但在交互式命令行里相对路径更高效因为敲的内容少还方便配合Tab键补全。这里补充三个被问烂但总有人答错的点。第一cd -是回到上一个所在目录不是回到家目录cd不带参数才是回家目录。第二路径中有空格时要用引号包住或用反斜杠转义比如cd /tmp/My Documents不然bash会把一个路径拆成两段。第三cd进目录要用Tab补全但补全出来的内容如果带转义符复制粘贴时别把转义符丢了。2.2 ls命令不只是在“看”它本身就是文件管理的基本盘很多人觉得ls就是“看一眼列表”但RH124里考察的其实是ls的各种选项组合。最基础的一定要背熟ls -l显示详细信息ls -a显示隐藏文件ls -h以人类可读格式显示大小ls -d显示目录本身而不是目录内容ls -R递归显示子目录。把这些选项组合起来就是问答题的素材。举个例子别人问你“怎么只列出当前目录下的子目录而不列出文件”答案是ls -d */。这个命令很多人第一次见会愣住因为ls */会列出每个子目录里面的内容加上-d才能只显示目录项本身。还有一个特别容易踩的坑ls -l显示的目录大小是目录元数据的大小不是里面所有文件的总大小别再拿它去估算目录占用空间了。我用一个表格把常用ls场景和对应命令总结了一下需求命令查看详细信息包含权限、链接数、所有者、大小、时间ls -l查看全部文件包含隐藏文件ls -a只查看目录本身的信息ls -ld 目录名只看当前目录下的子目录ls -d */递归查看目录树ls -R组合使用比如详细且显示隐藏ls -la这些选项不是靠背而是靠反复用。我在沙盒里练ls -ld docs和ls -l docs时才发现差别前者显示的链接数是目录本身的链接数后者显示的是目录里文件信息这个细节后面讲目录硬链接时还要用上。3. 文件类型判断ls -l 输出里的第一个字符比权限位隐藏更多信息3.1 七种文件类型从第一个字符读起ls -l输出里权限位的第一个字符很多人会忽略其实它是文件类型标识。RH124问答题经常给出一段ls -l输出让你判断这个文件是普通文件、目录、软链接还是设备文件本质就是考这个字符的识别。首字符文件类型现实例子-普通文件文本文件、脚本、二进制程序d目录/tmp、/etcl符号链接软链接/bin指向/usr/binb块设备/dev/sda、/dev/nvme0n1c字符设备/dev/tty0、/dev/nullp命名管道用mkfifo创建s网络套接字部分服务生成的socket文件想直观看到这些类型你只需要在系统里跑几条命令ls -l /dev/sda /dev/tty0 /dev/null你会看到第一列分别以b和c开头。普通文件以-开头目录以d开头符号链接以l开头这些是RH124最常考的三类。而命名管道和套接字在真实系统中也存在只是普通用户平时碰得少。你可以在沙盒里用mkfifo /tmp/rh124-lab/myfifo创建一个命名管道再ls -l看它首字符就是p这个实验做一次就忘不了。3.2 文件类型在问答题里的常见变形问答题不会傻乎乎地问“d代表什么”它常会包装成下面这些形式。第一种给一段ls -l输出权限位写作lrwxrwxrwx问你这是什么类型、权限为什么是777。答案是符号链接但要注意符号链接的权限列显示rwxrwxrwx并不代表目标文件真的有这个权限真正决定访问权限的是目标文件本身的权限。这个问题我在实际排查权限问题时也遇到过所以印象特别深。第二种问stat命令能告诉你什么。stat可以看到文件类型、权限、inode编号、大小、修改时间、访问时间、状态改变时间。这里有个理论考点ctime不是创建时间而是状态改变时间任何权限改动、硬链接数变化、所有者变化都会刷新ctime只有文件内容改变才刷新mtime。RH124很喜欢拿这三个时间做对比我用一个表来区分时间全称什么时候变化atimeaccess time文件内容被读取时mtimemodify time文件内容被写入修改时ctimechange time文件权限、所有者、链接数等元数据变化时第三种问“符号链接和硬链接在ls -l里有什么区别”。符号链接显示l开头硬链接如果和原文件在同一个目录里看起来仍然是-开头的普通文件唯一的线索是ls -li里inode相同或者ls -l的第二列链接数大于1。这个细节放到最后一章一起展开。4. 通配符批量操作的本质shell先展开命令后执行以及问答题爱挖的三个陷阱4.1 shell展开在先命令执行在后理解通配符的钥匙通配符看起来简单但理解它的核心在于明白一个执行流程shell在真正执行命令之前会先把包含通配符的参数展开成匹配到的文件列表然后命令才拿到这些具体的文件名。比如你敲echo *.txt实际执行的是echo a.txt b.txt c.txt而不是把*.txt这个字符串传给echo。三种基础通配符必须滚瓜烂熟*匹配零个或多个字符?匹配恰好一个字符[abc]或[a-z]匹配方括号内任意一个字符[!abc]取反。我常用一个例子演示它们的区别cd /tmp/rh124-lab/docs touch a.txt b.txt ab.txt file1.txt file2.log ls *.txt ls file?.txt ls file[12].txt ls file[!1].txt第一个*.txt会匹配所有以.txt结尾的文件第二个file?.txt只会匹配file1.txt、file2.txt这样中间恰好有一个字符的文件不会匹配file.txt第三个file[12].txt等价于file1.txt file2.txt第四个file[!1].txt匹配file2.txt排除了file1.txt。如果你不确定某个通配符会匹配到什么最简单的方法是先跑echo预览不要直接执行删除或移动命令。4.2 问答题高频陷阱隐藏文件、[]取反和空匹配RH124问答题在通配符上最爱挖三个坑。第一个坑是隐藏文件匹配。以点开头的文件在默认情况下不会被*、?、[]匹配到也就是说ls *.conf不会显示.hidden.conf。想匹配隐藏文件必须显式地写成ls .*或ls .*.conf但.*自身还会匹配.和..两个特殊目录项这又是一个连环坑。第二个坑是[]里的范围写法。[a-z]匹配小写字母但如果文件名里同时有大写和小写范围会随locale影响在比较严格的环境中可能导致“看起来应该匹配却没匹配上”。为了避免歧义我建议把要匹配的字符范围写得窄一点比如[0-9]表示数字[A-Za-z]表示字母而不是贪图方便写[a-Z]这种奇怪范围。第三个坑是“通配符没有匹配到任何文件时会发生什么”。在bash默认行为下未匹配的通配符会原样传给命令比如当前目录没有任何.txt文件你执行cat *.txtbash会把*.txt当作一个字面文件名传给cat然后报“No such file”。这个行为和很多人以为的“命令不执行”完全不同问答题如果考到这里标准答案就是“通配符保持原样命令会尝试处理这个不存在的字面文件名”。实战中这个坑也很常见尤其写脚本时一条rm *.log在没有匹配文件的情况下可能就会报一个隐晦错误所以脚本里提前用ls或find判断一下永远不亏。5. cp、mv、rm的选项差异从“够用”到“不出事”的实战习惯5.1 cp最容易把-r记错的场景cp命令的基本用法是cp 源文件 目标如果目标是目录则把文件复制到该目录下如果目标不存在则创建一个同名文件。但很多人第一次复制目录时都会翻车因为直接cp dir1 dir2会报“omitting directory”必须加-r或-a才能递归复制整个目录。-r和-a的区别也是考点。-r只是递归复制-a相当于-d -p -R的合集会保留符号链接、权限、所有者、时间戳这些属性常用于做备份。问答题如果问“怎么完整保留文件属性复制目录”答案就是cp -a。我实际用下来还有一个小建议如果只复制目录里的普通文件用cp *.txt ../backup/时不需要-r因为通配符展开后的每个文件都是普通文件只有当你复制的对象本身就是目录时才需要递归选项。想验证目标位置是否正确先ls或echo预览再批量复制能避免很多莫名其妙的错误。cp还有一个容易忽视的点多文件复制时目标必须是目录否则会报错。比如cp a.txt b.txt /tmp/rh124-lab/backup/最后一个参数必须是目录如果你写成了cp a.txt b.txtcp会认为是把多个文件复制到同一个名为b.txt的文件直接报错。这个在RH124实验里不算难题但容易在紧张时犯低级错误。5.2 mv同一文件系统是改名跨文件系统才是复制mv命令表面上只是“移动”但底层行为取决于源和目标是否在同一文件系统。同一文件系统内的mv其实是一个rename操作开销很小文件名瞬间变化inode编号不变权限、所有者、时间戳也全保留。跨文件系统移动时mv会变成“先复制到目标区域再删除源文件”inode会变耗时也会明显拉长。问答题如果问“为什么移动一个大文件到另一个分区会变慢”答案就是这个。实践里还有一个冷知识mv移动目录时不需要加-r因为目录作为一个整体被改名或移动不像cp那样逐项复制。所以mv docs ../backup/完全合法这也是mv和cp在用法上一个很大的差异。另外一个我后来才注意到的点是mv在覆盖已有文件时如果目标文件存在且你有权限它默认会直接覆盖不会提示。很多发行版会帮你设置alias mvmv -i但这个别名只对交互式shell生效在脚本里可不一定存在。所以关键文件移动之前最好先确认目标目录里有没有同名文件。5.3 rm的自我保护别名、确认与目录练习rm是文件管理命令里最危险的一个RH124虽然不会让你在考试里去删系统文件但问答题肯定会围绕“如何安全删除”出题。基础选项不用多说rm删普通文件rm -r递归删除目录及内容rm -f强制删除不提示rm -i逐个确认rm -v显示删除过程。真正值得警惕的是rm -f和rm -i的冲突。很多Linux发行版在交互式shell里默认设置了alias rmrm -i所以你在终端里敲rm会看到确认提示但在脚本或某些非交互环境下别名不生效rm会直接删除。这会导致实验环境里“明明刚才有确认现在怎么没了”的错觉。我复习时给自己定的规矩是删除前先ls -l确认目标再用rm -i或rm -v练习必须用rm -rf时先在命令前加一个echo模拟展开结果确认匹配范围无误后再真正执行。rmdir命令只删除空目录RH124会把它和rm -r区分开考。如果你只想删一个空目录rmdir更安全如果目录里有文件rmdir会报错这时再用rm -r。顺便提一句避免在/或/home下随手敲rm -rf带星号的组合除非你在沙盒里明确知道自己在做什么。把危险命令限制在练习目录里这是所有文件管理操作的第一原则。6. 硬链接和符号链接RH124理论题的雷区与实验自检方法6.1 硬链接的底层逻辑多个名字指向同一个inode硬链接是RH124问答题里最容易混淆概念的部分。要理解硬链接必须先理解inodeLinux文件系统里每个文件都有独立的inode里面保存权限、所有者、大小、时间戳和数据块位置而文件名只是目录里的一条记录指向这个inode。硬链接的本质就是在一个新目录里创建一个新的目录项让另一个名字也指向同一个inode。创建硬链接的命令是ln 原文件 新文件。创建后你用ls -li能看到两个文件的inode编号完全一样ls -l第二列的硬链接数变成2。硬链接有两个硬限制不能跨文件系统因为不同文件系统的inode编号没有可比性不能指向目录因为那会造成环路。问答题如果问“为什么硬链接不能跨分区”答案就是inode属于特定文件系统跨分区就失去了“同一文件”的意义。实际验证硬链接最直观的方法是删掉原文件再访问链接文件cd /tmp/rh124-lab echo link test source.txt ln source.txt hard.txt ls -li source.txt hard.txt rm source.txt cat hard.txt你会发现hard.txt照样能读出内容。这是因为删除原文件时系统只是删掉了一个目录项inode的硬链接数从2变成1只要还有目录项指向它文件数据就不会被真正释放。这个行为是RH124特别喜欢考的知识点不要把它和符号链接弄混。6.2 符号链接可以断、可以跨文件系统、可以指向目录符号链接也就是软链接是一个独立的特殊文件它里面保存的是“目标文件的路径字符串”。创建方式是ln -s 目标 链接名。ls -l查看时会显示类似lrwxrwxrwx 1 user user 14 /tmp/rh124-lab/soft.txt - source.txt的内容那个箭头后面的路径就是链接文件里保存的字符串。软链接和硬链接最大的区别在于软链接可以跨文件系统、可以指向目录、可以指向不存在的目标虽然会成为断链。它更像是一个“指向路径的指针”如果目标被移动或删除软链接不会跟着变化就会变成broken symbolic link。验证断链很容易ln -s source.txt soft.txt rm source.txt cat soft.txt此时cat会报“No such file or directory”而硬链接不会。软链接的权限列看起来是rwxrwxrwx但真正生效的权限是目标文件的权限这也是问答题的经典陷阱。创建符号链接时还要注意一个非常坑的细节相对目标路径的基准不是当前shell目录而是链接文件自身所在的目录。什么意思呢假设你在/tmp/rh124-lab/docs目录下想创建一个指向/tmp/rh124-lab/source.txt的软链接如果你写ln -s ../source.txt docs/soft.txt那么soft.txt里的内容就是../source.txt这个相对路径会从docs/目录向上解析最终指向/tmp/rh124-lab/source.txt没问题。但如果你写成ln -s source.txt docs/soft.txt那么软链接里的路径就是source.txt从docs/目录解析时它会去找/tmp/rh124-lab/docs/source.txt结果就是断链。刚学软链接时我在这里反复栽跟头后来才养成习惯要么用绝对路径创建软链接要么先cd到链接要放的位置再指定相对路径。6.3 链接实验自检清单RH124实操前最好先跑一遍学完硬链接和软链接我建议你用下面这份清单在沙盒里做一次完整自检既能验证理解也能当考前复盘第一创建origin.txt分别创建hard.txt和soft.txt两个链接用ls -li确认origin和hard的inode相同而soft是独立inode。第二删除origin.txt观察cat hard.txt和cat soft.txt的差别硬链接正常、软链接断链。第三尝试ln origin.txt /tmp/rh124-lab/backup/hard.txt如果两个目录在同一个文件系统里会成功如果跨分区会报错这个实验能帮你理解“硬链接不能跨文件系统”。第四用readlink soft.txt查看软链接内容确认它是绝对路径还是相对路径然后故意把一个相对路径软链接移动位置看看会不会断。还有一个理论题常考的点是目录的硬链接数。一个空目录的硬链接数是2因为目录项本身和里面的..都指向它每增加一个子目录硬链接数就加1。所以用ls -ld查看目录链接数时如果看到5通常意味着这个目录下有3个子目录。这个规律理解一次就够没必要背。把链接实验完整跑一遍再回到ls -l看那些l开头和链接数大于1的文件你基本就掌握了RH124第三章的精华。我在实际运维中排查文件丢失、备份失效、脚本找不到路径的问题时依赖的也是这套对路径和链接的理解。