十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RHCSA备考:文件管理与用户管理高频考点与避坑指南

RHCSA备考:文件管理与用户管理高频考点与避坑指南 RHCSA备考到了第三轮我发现最让我心里没底的居然不是SELinux和LVM这些看起来“高级”的内容反而是文件管理和用户管理这两个大家普遍觉得简单的板块。文件管理里那些边角料比如软硬链接、时间戳、umask、tar的排除规则用户管理里那些配置文件字段、口令老化策略、sudo的坑每一样都可能在考场上变成拦路虎。这篇复习笔记我就把文件管理补充和用户管理这两块里最容易被忽略、又最容易被考到的细节重新捋一遍结合我自己备考和帮别人排查问题的经验把命令背后的逻辑和踩过的坑一起写出来希望能给同样在备考RHCSA的朋友一些参考。1. 文件搜索的几条命令差异find、locate与which/grep的组合套路很多人在文件搜索上只记住了find但RHCSA考试不会只考单条命令。它更希望你明白不同搜索工具的使用边界什么时候用find找文件什么时候用grep找内容什么时候用locate靠数据库快速定位。这几条命令看起来都是“找”实际背后的逻辑完全不同。1.1 find备考中最该吃透的表达式语法find的核心不是“找”而是“遍历”它会从一个指定路径出发把下面所有目录和文件都过一遍然后对每个结果套用你给的条件。基本语法是find 路径 表达式路径不写默认是当前目录表达式里最常见的几个条件-name *.conf按文件名匹配注意-name区分大小写不区分大小写用-iname。-type f和-type d分别只找普通文件和目录这个在考试里特别常用。-user alice -group hr按属主和属组过滤经常和-o或、-a且组合。-size 100M、-size -1k按文件大小过滤表示大于-表示小于这个符号和-mtime的用法是同一套逻辑。-mtime -77天之内被修改过的文件7是超过7天7是刚好第7天。很多人在这里被绕晕我的记法是“ 表示更早- 表示更新”。find里真正阴险的坑在-exec。你要对搜索结果执行命令时标准写法是find /etc -name *.conf -exec grep -l root {} \;注意结尾的\;这个分号是必须的少了会直接报错。{}是find把每一个匹配到的文件名传给后面命令的占位符。如果把结尾换成\意思是把匹配到的所有文件一次性打包传给命令效率更高但有些命令不认这种多个参数的调用方式比如cp所以考试时我建议优先用\;虽然慢一点但不容易出错。另外find是有“短路”逻辑的。多个条件之间不写运算符默认是-a逻辑与比如find / -type f -name *.log必须两个条件同时成立。想表达“要么是这个要么是那个”不要忘了加-o而且-o前后最好加上()括号来分组例如find /data \( -name *.tmp -o -name *.bak \) -type f括号在shell里有特殊含义所以必须用\(和\)转义。我见过不少人把\(写丢结果命令逻辑完全变了还找不到原因。1.2 locate、updatedb与命令路径查找适合什么场景locate和find最大的区别是它不遍历磁盘而是查询一个预先建好的数据库所以速度极快。但这是它最大的优点也是最大的坑数据库不是实时更新的。如果你刚创建了一个文件马上用locate找大概率查不到除非你先跑一次updatedb更新数据库。考试时如果遇到locate: command not found先别慌。RHEL系默认可能只装了基础的findutilslocate包含在mlocate或plocate包里需要手动安装。装完之后第一件事就是updatedb否则数据库是空的或者旧的一找一个准全是坑。which、whereis、type又是另一类它们定位的是可执行命令本身而不是任意文件。which ls输出/usr/bin/lstype还能告诉你命令是内建命令还是外部命令比如type cd会显示cd is a shell builtin。这类命令在RHCSA里不会单独出大分题但排查环境问题时非常好用尤其是判断一个命令到底来自哪个路径时。1.3 find xargs grep 的组合实战真正能体现综合能力的组合是用find定位一批文件再交给grep去查文件内容中间用xargs连接。典型场景你想知道/etc下面所有.conf文件里哪些文件包含PermitRootLogin这个配置。一条命令就搞定find /etc -name *.conf -type f | xargs grep -l PermitRootLogin这里面有个非常经典的坑如果文件名里带空格xargs默认按空格把输入拆分成多个参数文件名就直接被劈成两半了命令在奇怪的角度报错。解决办法是让find输出用空字符分隔xargs也按空字符读取find /etc -name *.conf -type f -print0 | xargs -0 grep -l PermitRootLogin我平时写脚本处理批量文件时基本都会加上-print0和-0因为真实环境里文件名会多离谱都说不准。考试里虽然大概率遇不到带空格的文件名但理解这个机制会让你在安全加固、批量清理日志时少掉很多头发。2. 链接、时间戳与权限位文件管理里最容易翻车的三类细节这一节的内容几乎全是RHCSA的送分题也是失分题。原因很简单概念都“听说过”但一落到命令行为上就含糊了。2.1 硬链接与软链接inode视角下的本质区别硬链接的本质是给同一个inode添加一个目录项。用ln /data/file /data/hardlink创建硬链接后两个文件名指向同一个inode所以ls -l第二列的链接数会变成2。对其中一个文件内容的修改另一个也会同步变因为改的就是同一个数据块。软链接符号链接就不一样了它本身是一个独立的小文件里面存的是目标文件的路径。用ln -s /data/file /data/softlink创建后ls -l会显示softlink - file。删掉源文件是区分两者最直观的测试硬链接的那个名字依然能正常打开文件因为inode还在只是少了一个目录项软链接则直接变成红色闪断状态提示 No such file or directory。理解了这一点RHCSA常考的两个判断题就有了解法硬链接能不能跨文件系统不能因为inode不跨文件系统。硬链接能不能指向目录能但是只有root创建才被允许而且是为了维护文件系统内部结构不是给普通用户用的。普通用户对目录创建硬链接会被拒绝这是防止目录循环引用的保护机制。实际运维里软链接用得远比硬链接多比如把Tomcat的logs目录软链到数据盘把某个动态库软链到lib目录下。硬链接最常见的用途是备份场景里的“基于链接的增量备份”思路因为多个硬链接共享数据块不额外占用空间。2.2 mtime、ctime、atime与touch时间戳的判定逻辑stat命令能列出文件的三种时间戳RHCSA喜欢在判断题里玩文字游戏mtimemodification time文件内容最后一次被修改的时间。用vim改了内容mtime变。ctimechange time文件的inode元数据最后一次被改变的时间。注意改内容也会导致inode里的mtime字段更新所以ctime也会跟着变而如果只是改权限、改属主、创建硬链接只有ctime变mtime不变。atimeaccess time文件内容最后一次被访问的时间。用cat读一下atime变。一句话记法mtime关心的是“内容改了没”ctime关心的是“文件状态信息改了没”atime关心的是“被读过没”。touch专门用来改时间戳。touch file会创建一个空文件如果文件已存在则只更新atime和mtime。touch -t 202501011200 file可以手动指定时间touch -m只改mtimetouch -a只改atimetouch -r ref.file target.file把target的时间改成跟参考文件一致。说个实际场景。我帮同事排查过一个问题他打包发布的时候发现文件时间比当前时间晚了8小时排查半天发现是打包机上执行touch脚本时时区没设置对。虽然不影响功能但发布记录里时间线全乱了。所以在考场上如果要验证cp -p是否会保留时间戳直接用stat对比源文件和目标文件的三个时间比凭记忆答题靠谱得多。2.3 umask与特殊权限新建文件的默认权限没那么好算umask决定新建文件和目录时“减去”哪些权限。很多人以为666 - 022 644就是结果但遇到umask里带奇数的情况就算错了。比如umask 033按减法算666 - 033 633但真实结果是644。原因是新文件默认是没有执行权限的最终权限是在“666 去掉执行位”这个基础上再用umask进行按位清除。准确的计算公式是新文件最终权限 0666 ~umask新目录最终权限 0777 ~umask所以umask 033时文件的最终权限是0666 ~0033也就是二进制110110110 111100100结果是110100100正好是644。考试时用umask 027这种带奇数的例子去推一次就明白为什么“减法口诀”不能乱用了。特殊权限也是RHCSA常客setuid数字4在可执行文件上设置后普通用户运行它时进程的有效UID会变成文件属主。典型例子是/usr/bin/passwd普通用户能通过它改自己的密码靠的就是setuid位。setgid数字2对文件来说类似setuid但对目录来说意义更大目录设置了setgid后在里面新建的文件或目录会继承该目录的属组而不是创建者的主组。sticky数字1主要用在/tmp这类共享目录上。设置sticky后目录里的文件只有属主或root才能删除其他用户即使对目录有写权限也删不掉别人的文件。命令形式是chmod 1777 /tmp、chmod 2755 /project、chmod 4755 /usr/bin/tool。备考时可以用find / -type f -perm -4000 -ls去找系统里所有含setuid位的文件这同时也是一个安全加固的排查思路。3. tar打包与压缩RHCSA实机考试一定会考的组合技文件管理这个大板块里tar的权重我觉得是最被低估的。考试机的环境里经常需要你把某个目录打包传来传去如果没有把tar的各种参数练熟考场上越是紧张越容易把解压命令写反。3.1 tar基本用法考试要背牢的选项组合创建包的核心组合是tar czvf 包名.tar.gz 待打包目录。拆开来看c表示创建归档z表示用gzip压缩v表示显示过程考场上建议保留方便看有没有打进去f后面紧跟归档文件名解压时把c换成xtar xzvf 包名.tar.gz。查看包内容不并解压用ttar tzvf 包名.tar.gz。这里有个大多数人都能背下来的原则-f必须放在选项组最后因为它后面要跟文件名。如果你写成tar cvfz file.tar.gz /datatar会以为z是文件名直接报错或者生成一个奇怪名字的文件。解压到指定目录用-Ctar xzvf file.tar.gz -C /opt/target这是最容易拿分也最容易丢的一个点因为有些人只记住了tar解压忘了在考试场景里目标目录可能并不是当前目录。还有个隐蔽细节用tar打包时如果不希望包内路径带一堆绝对路径前缀可以用-P保留绝对路径但安全和规范上都不建议。更好的做法是先进到目标目录上一级再打包相对路径比如cd /var tar czf www.tar.gz www这样解压出来就得到一个www目录而不是从根开始的一大串路径。3.2 压缩工具选型与解压的常见翻车现场RHCSA考试中压缩包最常见的是.tar.gz但也可能遇到.tar.bz2和.tar.xz。它们的解压参数分别是tar czf / tar xzfgziptar cjf / tar xjfbzip2tar cJf / tar xJfxz字母不一样很容易混。我的记忆锚点是gzip 以z打头bzip2 以j打头xz 以大写J打头。解压时最常见的报错是gzip: stdin: not in gzip format。出现这个错不要急着怀疑压缩包损坏先用file命令看一下真实格式file backup.tar.gz有时你拿到的文件名后缀是.tar.gz但实际内容可能是纯tar打包没压缩甚至是个zip文件。file命令会直接告诉你它到底是个gzip压缩数据还是POSIX tar归档省去瞎猜的时间。另外单独的压缩工具也要会用。gzip file会压缩文件并把原文件变成file.gz解压用gunzip file.gz。如果不想动原文件、只想在管道里压缩用gzip -c配合重定向。同理bzip2、xz也都有这个逻辑。考试中如果让你“把某个日志压缩成.gz结尾的文件”可能并不需要用tar直接gzip logfile就完事。3.3 tar的进阶玩法管道、排除规则与增量备份tar处理大量小文件时效率很高但有些时候你需要筛选后再打包。两种常见做法第一种是配合find和管道find /var/log -name *.log -mtime 30 -print0 | tar --null -T - -czf old_logs.tar.gz这个命令把find找出的30天前的日志文件列表通过管道交给tar-T -表示从标准输入读取文件列表--null配合-print0解决文件名空格问题。第二种是直接在tar里排除部分内容tar czvf backup.tar.gz /data --exclude*.mp4 --exclude/data/cache--exclude的位置没有强制要求但在复杂场景中建议放在打包目标前面避免因为路径匹配问题导致排除失效。我踩过的坑是排除目录时写了结尾斜杠某些tar版本会匹配不上建议写成不带斜杠的目录名匹配更稳。增量备份的场景可以提一下tar的-g snapshot.file参数会记录备份时的状态下次再用同一个snapshot文件备份时只把新增和修改过的文件打进去。这个在RHCSA考试里不是重点但如果你工作中偶尔要做简单的文件级增量备份tar比 rsync 更容易上手前提是数据量不大。4. 用户管理的三个配置文件与一个骨架目录读懂了就不会瞎改用户管理这一章命令就那么几条但考试特别喜欢从配置文件字段的角度出题。因为你只有读懂了字段才知道一条useradd命令执行后系统里到底发生了什么。4.1 /etc/passwd与/etc/shadow字段逐行拆解/etc/passwd里每一行是一个用户字段用冒号分隔一共7个tom:x:1001:1001:Tom Smith:/home/tom:/bin/bash依次是用户名、密码占位符x表示真正的密码在shadow里、UID、主组GID、注释信息、家目录、登录shell。这里有个细节注释信息如果是纯文本里面不要乱加冒号否则字段解析会错位。为什么密码不是直接存在passwd里因为这个文件是所有用户都可读的一旦里面存的是真实哈希任何人都能离线暴力破解。shadow文件只有root能读哈希就藏在里面。shadow每行9个字段核心是前几个用户名加密后的密码以$6$开头表示SHA-512$y$表示yescrypt最后一次修改密码的时间从1970-01-01算起的天数最小修改间隔天数密码最长有效期过期前多少天提醒过期后多少天禁用账户账户失效日期保留字段你说这个字段顺序不重要吗RHCSA不一定直接让你数字段但chage命令改的就是7到9这几个值你不懂字段含义chage -E 2025-12-31设置了失效日期后很难理解它为什么只对登录生效、不影响已登录会话。修改用户数据库文件安全正确的做法不是直接vim /etc/passwd而是用vipw和vigr。这两个命令本质是对passwd和group文件加锁并调用编辑器避免多人同时修改导致文件损坏这也是RHCSA在安全细节点上会留意的地方。4.2 /etc/group与/etc/gshadow初始组和附加组的关系/etc/group每行4个字段组名、组密码占位符、GID、附加组成员列表逗号分隔。初始组成员主组不写在这里因为一个用户的主组直接记录在passwd的第四个字段里。所以看一个用户属于哪些组需要同时看passwd里的GID和group最后一列。/etc/gshadow是组密码的shadow文件字段为组名、加密组密码、组管理员列表、成员列表。平时组密码基本用不到但考试可能考gpasswd -A给组设置管理员。新用户默认会创建一个与用户名同名的“私有用户组”这是RHEL系的默认策略。好处是每个用户都有一个单独的小组做权限隔离比较方便。如果不想创建同名组可以用useradd -N或者改/etc/login.defs里的USERGROUPS_ENAB no。这个选项在RHCSA不一定直接考但理解它能帮你解释为什么有些用户id出来的组跟用户名不一样。查看一个用户实际生效的UID、GID和附加组一条命令id alice输出大概是uid1002(alice) gid1002(alice) groups1002(alice),10(wheel)。其中gid是主组groups里除了主组之外的都是附加组。遇到权限问题时第一反应就是先id看当前用户到底在哪些组这个习惯比背一堆权限参数有用得多。4.3 /etc/skel与用户默认值新用户的家目录为什么长这样每次用useradd创建用户时系统会把/etc/skel目录里的所有文件复制到新家目录里。RHEL默认的skel目录包含.bash_profile、.bashrc、.bash_logout几个隐藏文件新用户登录后就有基本的环境变量和别名设置。如果你想给每个新用户预制一批文件直接把文件丢进/etc/skel即可。比如公司要求每个账户家目录下放一个README.txt写清楚服务器用途和联系人放进/etc/skel/README.txt之后之后创建的用户家目录里都会自动带上。另一个控制默认值的地方是/etc/default/useradd里面定义了家目录根路径HOME/home、默认shellSHELL/bin/bash、是否创建邮件池CREATE_MAIL_SPOOLyes等。而/etc/login.defs则控制UID范围UID_MIN/UID_MAX、密码策略默认值PASS_MAX_DAYS等、umask的默认值。考试中如果遇到“新用户无法登录提示密码已过期”之类的问题多半就要去/etc/shadow和/etc/login.defs里找原因。比如PASS_MAX_DAYS 99999表示密码永不过期但如果被改小了新用户密码也会在设定天数后过期。这些默认值和命令行为之间是联动的只看命令不看配置很容易漏掉隐藏条件。5. useradd/usermod/userdel实战从创建用户到sudo提权的完整链路配置文件读懂了命令就可以当成“简化版的配置修改工具”来理解。RHCSA创建用户的题目很直接但是细节要求很高少一个-G或多一个空格都可能扣分。5.1 useradd参数实测创建用户时到底会发生什么最基本的创建命令useradd alice执行完之后系统会做几件事在passwd和shadow里各加一行分配下一个可用UID创建/home/alice家目录并复制skel文件创建一个同名的 alice 组把 alice 加进去。但考试经常加限定条件比如创建用户tom指定UID为1800useradd -u 1800 tom指定主组为hruseradd -g hr tom注意这里-g后面是组名或GID都可以指定附加组为wheeluseradd -G wheel tom多个组用逗号分隔不要加空格指定家目录为/data/tomuseradd -d /data/tom -m tom-m表示如果目录不存在则创建指定shell为/sbin/nologinuseradd -s /sbin/nologin tom这台机器上的账户不允许交互登录指定注释为Tom Smithuseradd -c Tom Smith tom注意注释里有空格时要加引号还有一个容易被忽略的-r参数创建系统账户。系统账户的UID会落在系统范围内RHEL 8/9默认1-999而且默认不创建家目录适合用来跑服务。如果你用useradd -r -m也可以强制给它建家目录但在RHCSA题目里很少这么用。创建完用户之后一定不要急着完事要验证。常用验证手段id tom getent passwd tom ls -ld /home/tomgetent的好处是会同时查文件数据库和NSS配置的来源如果系统和LDAP等做过集成getent能看到的东西比直接看/etc/passwd更准确这也是RHCSA课程里反复强调的一个命令。5.2 usermod与passwd改属性、锁账户与口令策略用户创建后要改属性用usermod。最常见的几个操作改附加组usermod -aG wheel tom。这个-a我用高亮强调一下因为不加-a是直接覆盖用户的附加组列表也就是说usermod -G wheel tom会把tom原有的附加组全部清掉只留下wheel。很多人把用户加到组里时漏了-a结果用户被从其他组里踢出去了。改主组usermod -g hr tom。改家目录并迁移数据usermod -m -d /data/tom tom-m会尝试把原家目录的内容搬到新家目录。改shellusermod -s /bin/bash tom。锁账户和解锁usermod -L tom/usermod -U tom等效于passwd -l tom/passwd -u tom。锁账户的原理是在shadow密码字段前面加个!这样哈希就失效了。密码策略也是RHCSA常考的一个点。强制用户首次登录改密码用chage -d 0 username或者passwd -e username作用是把shadow里最后一次修改密码的时间设为0用户登录时会立刻提示必须修改密码。还有chage -M 30 username设置密码最长有效期30天chage -W 7 username提前7天提醒。这些参数在/etc/shadow里对应的就是那几个数字字段。要注意一点passwd --stdin在RHEL里可以这样写echo 123456 | passwd --stdin tom但它只是方便脚本化不是所有发行版都支持。备考还是按标准交互式passwd tom来更稳妥。5.3 组管理、用户删除遗留与sudo配置组管理的命令和用户管理的逻辑几乎一一对应groupadd、groupmod -n 新名 旧名、groupdel。给组添加成员用gpasswd -a tom hr追加多个可以用usermod -aG hr1,hr2 tom前面说过-a不能漏。删除用户时最大的坑是“删不干净”。userdel alice只删除passwd、shadow、group里的记录但家目录和邮件池文件可能还留在磁盘上。想一并清理干净用userdel -r alice这个-r会递归删除用户家目录和邮件池文件。如果你不删后面再创建同名的alice用户新用户的家目录可能带着旧权限甚至旧数据很容易闹出安全问题。最后是sudo配置。RHCSA特别喜欢考“创建一个用户把它加入wheel组然后验证sudo权限”。默认配置下RHEL的/etc/sudoers里有一行%wheel ALL(ALL) ALL只是被注释掉了。考试机器上需要管理员用visudo把这行取消注释或者你也可以直接在/etc/sudoers.d目录下建一个新文件比如/etc/sudoers.d/99-custom在里面写alice ALL(ALL) ALL注意/etc/sudoers.d下的文件必须用visudo -f这种格式检查或者至少确保权限是440。如果sudo配置文件语法写错会导致所有sudo命令直接报错这时候不要慌一般可以通过pkexec或者其他已登录的root shell 去修但最稳妥的办法还是写完后先执行visudo -c验证语法确认输出parsed OK再退出。验证sudo权限是否生效最直接的方法是sudo -l -U alice查看该用户能够执行的sudo条目然后切换到该用户su - alice执行sudo whoami输出root才算通过。考RHCSA的用户管理题我建议你把每一个操作都在终端里打出完整命令然后用id、getent、ls去反向验证。命令背后的配置变化搞清楚了考试时不管题目怎么变思路都是稳的。文件管理和用户管理这两个板块看起来基础实际是RHCSA里很实用的拉分项。文件搜索、链接权限、打包解压、用户配置、sudo提权每一条都是日常Linux工作的高频操作。我复习到后面最大的感受是别只看不练很多命令的坑只有亲手敲过一遍才记得住。把每道题都当成考试题做完再用man对照参数含义比刷十遍题都管用。
返回列表