资讯动态

Linux 第二次作业实战:权限管理、find 与管道文本处理全解析

发布时间:2026/10/21 15:40:56 来源:尧图企业网站定制
拿到 Linux 课第二次作业那周我才真正意识到这门课和“背命令”完全是两码事。第一次作业基本还在折腾ls、cd、mkdir这些日常操作顶多加上重定向和管道属于照着文档也能抄完的级别。第二次作业题目一展开画风突变要求围绕用户权限、文件查找和文本处理完成一组操作还要提交执行过程与结果截图。说实话“linux第二次作业”这个标题放在作业列表里毫不起眼但它几乎是每个初学者第一次真正接触 Linux 权限模型、find过滤逻辑和管道思维的地方。我自己也是在那次作业里把chmod的符号模式、find的表达式组合、grep的基本正则翻来覆去研究了一遍才从“会敲命令”慢慢变成“知道为什么这么敲”。这篇文章就当作当时踩坑的记录也算给后面做这类作业的朋友省点时间。1. 拿到题目别急着敲命令先拆掉“Linux第二次作业”这层皮很多同学看到作业文档里的题目描述就急着开终端其实这一步最容易埋坑。第二次作业和第一次最大的区别在于它不再单纯考察“某个命令怎么用”而是开始考察组合能力和对系统权限机制的理解。如果你直接把题目当成一个个孤立的命令填空题很容易做一步卡一步。1.1 第二次作业和第一次有什么本质不同第一次作业通常围绕文件操作、目录导航、查看帮助文档展开目标很明确让你能在一个陌生的 Linux 环境里走起来。第二次作业则完全不同它的核心关键词基本围绕这几个方向权限与所有权chmod、chown、umask、用户和组的关系查找与定位find、locate、whereis文本处理与过滤grep、sed、awk、head、tail、wc组合与管道|、、、2、初步的脚本化把一组命令写进.sh脚本用条件判断或循环完成自动化你会发现这些主题都有一个共同点它们不再是“看到结果就结束”而是“通过命令改变系统状态”。比如创建一个目录只是开始更重要的是这个目录的权限是否满足要求、属主和属组是否正确、别的用户能否访问。这种思维方式上的转变才是第二次作业真正想锻炼的东西。1.2 把模糊的题目翻译成具体的技术动作作业题里经常出现类似这样的描述“创建一个共享项目目录只允许同组成员读写其他用户无权访问”“查找系统中一周内被修改过的日志文件并统计数量”“写一个脚本将指定目录下超过 10MB 的文件移动到备份目录”。这些描述听起来像需求文档实际上每一步都需要翻译成技术动作。拿第一条举例它至少包含以下动作用groupadd创建组用useradd创建用户并加入组用mkdir创建目录用chown修改目录属组用chmod设置rwxrwx---或770权限用su或sudo -u切换用户验证权限效果我的建议是拿到题目后先列动作清单把每个自然语言描述拆成命令级步骤再动手执行。这个过程很像写代码前先画流程图看着慢实际上能帮你省掉大量试错时间。我当初就是没做这步结果在权限设置上反复返工后面几道题的时间都被挤占了。2. 权限与用户管理这轮作业的权重担当权限管理是第二次作业里几乎必考的部分也是拉开差距的地方。很多同学第一次接触chmod 777就觉得权限简单但真正上手时才发现权限问题不是只看权限位数字还要理解所有者、所属组、其他用户三层模型以及默认权限掩码umask带来的隐性影响。2.1 权限位和数字模式为什么总是绑在一起考Linux 权限模型可以简单理解成三组三元组所有者u、所属组g、其他用户o每组都有读r、写w、执行x三位。数字模式就是把这三位按二进制换算成八进制数值r是 4w是 2x是 1加总后得到一位八进制数。我把常用的权限值整理过一张表做作业时放在手边非常方便数字对应权限含义0---无权限4r--只读5r-x读和执行6rw-读写7rwx读写执行1--x仅执行2-w-仅写3-wx写和执行实际作业里最常用的组合是755、750、700、770、600、644。有一个容易忽略的细节目录的执行位含义和文件不一样。目录的x权限表示“能否进入该目录”只有r权限而没有x你虽然能看到目录下的文件名列表但无法进入或访问文件详情这在用ls -l验证时很容易造成误判。另一个隐藏考点是umask。默认情况下普通用户创建文件的权限由666与umask按位取反后计算目录则是777与umask取反后计算。如果系统的umask是022那么新建文件权限是644新建目录是755。我作业里遇到过一个题目要求创建只能由自己读写的文件结果每次touch出来的文件都是644后来发现是umask没改。正确的做法是提前执行umask 077或者在创建后主动chmod 600。2.2 用户身份切换与 sudo 的使用分寸第二次作业通常会给一个普通用户身份要求你在这个身份下完成部分操作。但有些操作确实需要超级用户权限比如改/etc下的配置文件、安装软件、添加用户。我一直建议作业阶段养成一个习惯能用普通用户权限完成的操作绝不用sudo。原因很简单sudo不是为了让你绕过权限约束而是为了让你在必要时越权。作业过程中如果全程都带着sudo你会完全失去对权限模型的感知之后排查问题时会很痛苦。需要切换用户验证权限时常用的方式是su - 用户名或sudo -u 用户名 命令。su -会切换到目标用户并加载该用户的环境变量适合用来模拟对方登录后的状态sudo -u则只以指定用户身份执行单条命令适合快速验证某个文件是否可读、某个目录是否可进入。我在作业里会故意创建一个测试用户用su切换过去访问项目目录确认Permission denied出现再看ls -l对比权限位这样验证尤其直观。3. 文件查找与文本处理真正拉开操作差距的部分如果说权限是第二次作业的基础题那文件查找与文本处理就是拉开操作水平的进阶题。很多人在这一部分第一次体会到“命令行为什么不友好还有人用”——因为它的过滤和处理能力太强了配合管道可以一条命令完成一整套筛选逻辑。3.1 find 的表达式到底该怎么拼find是所有查找命令里最值得花时间搞懂的。它的基础语法是find 路径 条件 动作条件和动作都可以叠加。条件部分常用的有-name *.log按文件名匹配注意引号不能省否则通配符可能被 shell 提前展开-type f/-type d只找文件或目录-mtime 7修改时间超过 7 天-size 10M文件大小超过 10MB-user 用户名/-group 组名按属主或属组筛选动作部分最常用的是-ls显示详细信息和-exec对结果执行命令。-exec的写法看起来有点别扭它的固定格式是find 路径 条件 -exec 命令 {} \;。其中{}代表查到的每一个结果\;表示命令结束。我最早总忘记;前的转义符导致每次执行都报语法错误。举个例子下面这条命令会找出/srv/project/logs下所有超过 7 天的日志文件并删除它们find /srv/project/logs -type f -name *.log -mtime 7 -exec rm {} \;做作业时如果觉得扩展正则太复杂可以先用-name加通配符完成基础筛选再逐步补充其他条件。多条件的逻辑关系也要注意如果一条命令里同时有-name和-type默认是同时满足的相当于“与”的关系。3.2 管道、重定向和过滤链的组合玩法第二次作业里几乎必然出现管道组合题比如“找出系统里所有名为test的进程统计数量”这类描述。这里需要用到ps aux | grep test | wc -l这类多段管道链。管道|的作用是把左边命令的标准输出接到右边命令的标准输入。理解和记忆管道要抓住一个核心管道传递的是文本。整个组合链其实就是一条流水线每一段负责一个处理步骤。比如ps aux输出全部进程信息grep test只保留包含test的行wc -l统计剩余行数。我自己还会额外关注2和的区别。2是把标准错误单独重定向到文件则把标准输出和标准错误合并。在作业里我经常用find / -name *.conf 2/dev/null来过滤掉大量无权限访问目录的报错这个技巧适合很省时间。重定向覆盖和追加的区别也考得很频繁会覆盖原文件会追加到末尾。如果连续多次执行命令却不检查输出文件很容易因为你用错符号把上一次结果截断。grep本身也值得多花一点时间。最基本的用法是grep 关键词 文件但配合-v反向匹配、-c统计行数、-E扩展正则可以完成更复杂的筛选。作业里如果要求“排除掉注释行”就可以用grep -v ^#配合正则实现。正则表达式建议从最基础的开始^匹配行首$匹配行尾.匹配任意单个字符*表示前面的字符重复零次或多次。这些基础规则已经能覆盖绝大多数题目场景。4. 一次完整的模拟作业实操记录前面讲了不少理论和命令但这部分才是重点完整走一遍我在做作业时的真实操作流程。下面这份模拟作业是我根据常见的“Linux第二次作业”出题风格整理的涵盖权限、查找、文本处理和简单脚本四个环节。你拿到手的具体题目可能略有不同但操作思路是通用的。4.1 任务说明与拆解遇到一份看起来比较长的作业第一步一定是用 5 分钟把每个小问题翻译成技术动作。下面是我整理的题目与对应动作题目描述翻译成技术动作创建用户alice和bob加入组devteamuseradd、usermod -G创建目录/srv/project属主为alice属组为devteam目录权限为770mkdir、chown、chmod在目录中创建文件readme.txt属主为root其他用户可读touch、chown找出/srv/project下所有.txt文件并统计数量find、wc查找系统中 7 天内修改过的*.conf文件并输出列表find、-mtime、 文件写一个备份脚本用当前日期命名压缩包bash、tar、date拆解完成后就不慌了。每条题目对应的命令你都见过剩下的就是按顺序执行并记录结果。4.2 目录搭建和权限分配先以root身份创建用户和组。如果当前是普通用户需要sudo执行sudo groupadd devteam sudo useradd -m -G devteam alice sudo useradd -m -G devteam bob id alice创建目录之前我习惯先确认/srv是否存在然后创建目录结构sudo mkdir -p /srv/project sudo chown alice:devteam /srv/project sudo chmod 770 /srv/project这里chown alice:devteam表示同时修改属主与属组。权限770表示属主和属组都有完整读写执行权限其他用户完全没有权限。验证时我会用ls -ld /srv/project重点看第一列的权限字符串和第三、四列的属主、属组。然后创建一个测试文件用于后续检测sudo touch /srv/project/readme.txt sudo chown root:root /srv/project/readme.txt sudo chmod 644 /srv/project/readme.txt644让所有用户都可读但只有属主和属组能写。这里会出现一个容易误解的点文件readme.txt位于目录/srv/project内用户能否访问这个文件不仅取决于文件的权限还取决于路径上每一级目录的权限。目录是770其他用户无法进入所以即使文件是等世界可读的644对非devteam成员来说依然看不了。这是我第一次做这类题目时踩得最深的坑后面第 5 部分还会细说。4.3 文件查找与文本统计的实现构建出目录和文件后进入文本查找环节。统计.txt文件数量用find加wc -lfind /srv/project -type f -name *.txt | wc -l注意我加了-type f避免把目录也算进文件数量。如果想看到每个文件的信息可以换成find /srv/project -type f -name *.txt -ls第二道查找题搜索系统中 7 天内修改过的*.conf文件并把结果保存到文件find /etc -type f -name *.conf -mtime -7 /tmp/conf_modified.txt head -20 /tmp/conf_modified.txt这里-mtime -7和-mtime 7的区别很容易弄混-7表示 7 天以内含被修改过的文件7表示超过 7 天未被修改或修改较早的文件。为了过滤掉无权限访问的目录可以追加2/dev/null这样错误信息不会刷屏只保留正常结果。4.4 用一段脚本完成重复性工作最后的脚本题我通常会先手动把核心命令写一遍确认命令本身没问题再封装成脚本。这样调试时能区分是命令问题还是脚本语法问题。下面这段脚本实现的功能是把/srv/project/logs下的文件压缩成以当前日期命名的归档文件并保留最近 7 天的日志超过 7 天的文件移动到备份目录。#!/bin/bash # 备份日志文件到独立目录 SOURCE_DIR/srv/project/logs BACKUP_DIR/srv/project/backups STAMP$(date %Y%m%d) mkdir -p $BACKUP_DIR find $SOURCE_DIR -type f -mtime 7 -exec mv {} $BACKUP_DIR \; tar -czf $BACKUP_DIR/logs_$STAMP.tar.gz -C $SOURCE_DIR .每行都值得解释一下STAMP$(date %Y%m%d)把当前日期赋值给变量比如20250102这样每个压缩包文件名都不同适合长期积累备份。find ... -exec mv {} $BACKUP_DIR \;把超过 7 天的文件移动到备份目录。这里我特意要在;前加反斜杠否则 shell 会把它当成普通字符解析。tar -czf ... -C $SOURCE_DIR .-C先切换到源目录再把当前目录内容打包这样生成的包解压后自动是源目录下的顶层文件不会把很长的路径层级也带进去。执行脚本前先加执行权限chmod x /srv/project/scripts/backup_logs.sh /srv/project/scripts/backup_logs.sh脚本执行完后再看一眼目标目录确认压缩包生成了、文件移动生效了整个过程才算完整结束。我自己做脚本题时几乎每次都会忘记给脚本加执行权限导致明明内容写得对执行时却报Permission denied。这个坑在提交作业前一定要自查一遍。5. 我在作业里踩过的坑和排查实录这部分没有一张完整的作业截图因为我当时走了太多弯路。踩过的坑如果提前有人列出来至少能省下半天时间。5.1 权限相关的高频错误我犯过的第一个错误是把chmod和chown搞混。chmod用于改权限位chown用于改属主和属组。如果目录的属主和属组都没问题但访问时还是报错先看权限位再用chown改所有权这两条命令起效的维度完全不同。第二个错误是没有理解“路径上所有目录的权限都要可执行”。某一次我把一个子目录设成750但它的父目录是700结果其他用户连进入父目录都做不到更不用说访问子目录。排查时要用namei -l /srv/project/subdir或ls -ld逐级查看每一层目录的权限组合。第三个错误和组有关。新用户刚加入devteam组后如果当前会话是之前打开的组信息可能不会立即生效。执行newgrp devteam或重新登录都能解决。另一个升级版本的问题更隐蔽在/srv/project里新建的文件默认属组是创建用户的私有组而不是目录所属的devteam组除非目录设置了 setgid 位。要解决这个问题可以给目录设置chmod gs /srv/project这样所有新文件都会自动继承目录的属组。这也是常见的加分知识点。5.2 find 和 grep 使用中的细节陷阱find的通配符问题让人防不胜防。find /srv/project -name *.txt在不加引号时如果当前目录下正好有.txt文件shell 会把*.txt先替换成具体文件名导致find收到的参数根本不是通配符而是具体名字。而且如果替换后的文件名带路径find的匹配逻辑还会和预期不一致。规范写法永远是带单引号-name *.txt。grep那边的问题主要出在正则上。如果不加-E部分元字符是不生效的尤其是和?。题目要求“匹配以error开头的行”时有人写成grep error*但这实际匹配的是error、errorr、errorrr并不是想要的“以 error 开头”。正确的写法是grep ^error。我自己做作业时就因为混淆了“任意字符”和“行首”的含义白白浪费了很多时间。5.3 十条最想提前知道的救命经验结合我自己的体会和帮同学排查时发现的问题整理出十条做第二次作业时的速查建议所有可能影响系统的命令先在一个临时测试目录里验证再放到正式路径执行。查看权限用ls -l文件和ls -ld目录不要只靠记忆判断。find的条件要用引号包住通配符。-exec命令的结尾;必须转义成\;或者改用来减少命令调用次数。重定向符号不要混用和的作用天差地别。脚本文件执行前先bash -n 脚本名检查语法再bash -x 脚本名调试执行过程。管道传递的是文本流如果某段过滤链结果为空先单独跑每一段定位是哪里少了数据。用id 用户名确认用户和组信息不要靠cat /etc/passwd的内容死记硬背因为id显示的是实际生效结果。权限位设置完一定要切到别的用户去实测验证结果比分析权限字符串更可靠。遇到报错先读错误信息Permission denied和No such file or directory的处理思路完全不同盲目改权限解决不了所有问题。6. 提交前的自测清单与截图整理建议作业做完不等于万事大吉。很多扣分都发生在提交环节截图不全、结果文件丢失、命令路径写错。我把每次提交前必做的自测流程整理成了清单照着过一遍能极大降低返工概率。6.1 两分钟快速自测从用户身份到关键结果我会按以下顺序检查当前登录用户是谁执行id确认。每个关键目录的权限是否符合题目预期执行ls -ld确认。关键文件是否存在且内容正确执行cat或head确认。脚本是否有执行权限执行ls -l 脚本名确认。查找和统计类题目的结果文件是否生成执行wc -l 结果文件确认行数。如果作业要求切换用户验证权限是否真的切换过并记录结果这点提醒值得注意。我在自测阶段曾发现某个目录权限看起来是770但实际通过su切换到非组用户后居然还能正常访问。最后发现是目录路径写错了我验证的目录和题目要求的目录根本不是一个地方。权限设置完之后没有比“换个用户实测”更有效的检查方式。6.2 结果提交的常见加分细节截图和文档方面我总结了一套比较实用的组织方式。每个题目单独一个目录目录名用序号加简短描述比如01_user_and_group、02_perm_test、03_find_logs。每个目录里放三样东西操作命令的文本记录、执行结果截图、说明文档。命令记录可以直接用history导出或者用script命令录制终端会话这样不需要手动复制命令也不容易漏项。截图时我会刻意保证内容完整窗口标题、当前路径、时间戳、命令和输出结果都要包含在画面里。如果题目要求验证某个用户无权访问我还会把报错文字和该用户身份信息一起截进去再加一行注释说明“这是预期的失败结果”。这样做的好处是提交后在评审或复查时别人能一眼看懂你每一步操作的意图。7. 最后想分享的一点体会我做这次作业最大的感受是“先拆题再动手”比“多敲几次命令”更重要。看起来简单的第二版作业实际上是在逼你建立系统思维权限不是一拍脑袋的chmod 777而是兼顾属主、属组、其他用户、目录层级、默认掩码的一组联动机制查找不是把文件找出来就结束而是要精确到文件类型、时间范围、大小范围甚至要基于结果再做下一步处理管道链的本质是把一组独立命令串成数据流水线每一段输入输出都必须可控、可验证。还有一个很实用的小技巧如果你不确定某个权限位在不同用户下到底会怎么表现不要凭感觉猜。直接建两个测试用户用su切换过去操作一遍再看ls -l效果比反复看文档快得多。这次作业里花掉的排查时间后来都变成了对 Linux 权限和文本处理更深层的记忆。做作业时遇到的一次次报错其实不是白费功夫它们会在后面真正使用系统的时候变成你最快定位问题的直觉。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑