ARTICLE DETAIL

资讯详情

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

Linux第4天学习:权限管理、管道与文本处理实战指南

Linux第4天学习:权限管理、管道与文本处理实战指南 1. 学到第4天才算真正摸到Linux的门如果你也在自学Linux并且一路坚持到了第4天先给自己鼓个掌。这个阶段很微妙你不是完全的小白但也远谈不上熟练更像是一个刚拿到驾照的人知道油门刹车在哪但还没上过高速。今天这第4天按我的经验来看是一个分水岭——前3天你学的是“怎么跟Linux打交道”从今天开始你要学的是“怎么让Linux帮你干活”。我今天的学习主线很明确权限管理、文本处理三剑客的入门、以及玩明白重定向和管道。这几个东西单拎出来每一个都是重点组合起来就是Linux日常操作的骨架。第4天学完你会发现自己能看懂很多命令行的操作逻辑了而不是像前几天那样全靠死记硬背。顺便说一句我在学习过程中查资料、搜命令发现网上所谓的“Linux命令大全”五花八门几百条命令砸过来反而让人焦虑。我的建议是别贪多第4天这个阶段把今天这几个核心模块吃透比泛泛浏览一百条命令有用得多。废话不多说直接进入今天的学习记录和踩坑复盘。2. 第4天的核心思路用“最小可用系统”打通知识闭环2.1 为什么第4天要选权限、管道和文本处理很多人学到第4天会陷入一个误区——开始背命令参数大全什么“tar的20个参数”“awk的30个用法”背得昏天黑地结果一上手实操还是懵。我的理解和很多教程不一样。第4天最适合学的是一套能把前3天知识串起来的“最小可用系统”。什么叫最小可用系统就是你用今天学的东西能完整地完成一个真实的小任务。比如创建一个项目目录、给团队成员分配不同权限、从一堆日志文件里找出错误信息并统计数量。这个过程中你会自然而然地用到权限命令chmod、chown、查找命令find、grep、重定向和管道——这些恰恰就是Linux日常使用频率最高的核心操作。从认知规律来说第4天也是记忆曲线的关键节点。前几天学的命令如果不通过实际任务来巩固很快就会忘。权限、管道、文本处理这三块内容彼此关联度极高权限需要操作文件管道需要串联命令文本处理需要读取文件内容——刚好把前3天的文件操作、目录操作、命令查询全部复习一遍。选这个组合作为第4天性价比是最高的。2.2 我对自己学习效果的两个硬性验收标准今天学完后我有一个明确的检测方法也分享给你们可以拿来检验自己是不是真的掌握了标准一不查资料自己动手创建一个用户、给一个目录设置到770权限、然后用另一个用户测试是否无法进入最后通过命令将该用户加入对应的用户组后再测试是否可以进入。这套流程走通权限这关就算过了。标准二给我50个日志文件任意格式的文本我能用一条管道命令组合出“每个文件里包含error关键字的行数排名前5的列表”。能独立完成这个说明管道和文本处理的基本功到位了。这两个标准听起来简单实际操作中会串联出十几个小知识点任何一个环节卡住都得回头翻资料。但正是这种“逼自己闭环”的学习方式能让你真正把知识变成自己的。3. 权限管理从“知道chmod”到“理解权限模型”3.1 权限的本质Linux为什么非要搞这么复杂第4天我花最多时间的就是权限管理。很多新手会觉得权限系统很烦人“我自己的电脑凭什么不让我随便删文件”但这个认知是错的——Linux从设计之初就是多用户、多任务的操作系统权限机制不是限制你而是保护你。我给你们打个比方。权限系统就像一栋办公楼的安保系统。大楼管理员root用户拥有所有房间的钥匙普通员工普通用户只能进自己的办公室。有些房间是公共会议室所有员工都能进但只有保洁阿姨目录属主才有权重新布置家具。如果你把整栋楼所有的门禁都取消任何一个员工都能进CEO办公室翻文件那你放心吗Linux服务器的场景下情况更严重——你的服务器上可能跑着网站、数据库、多个用户的数据一旦权限失控轻则数据被误删重则被入侵者利用。理解了这一层你就明白为什么第4天必须死磕权限。这不仅是考试题更是真实生产环境里保命的技能。3.2 读透“rwx”和数字权限用一套数学逻辑替代死记硬背今天学到的第一个核心概念是Linux文件权限的三组九位表示法。什么意思呢你用ls -l命令看一个文件最前面那一串字符是这样的-rw-r--r--这一串字符看起来诡异但拆开就很简单。第一位表示文件类型-代表普通文件d代表目录l代表链接文件。后面九位分成三组每组三位第一组文件属主owner的权限第二组属主所在组group的权限第三组其他用户others的权限每组三位分别是r读、w写、x执行。有对应的权限就显示字符没有就用-代替。那数字权限又是什么简单说就是把r记为4w记为2x记为1没有权限记0。把一组的三个数字加起来就是这个组的权限值。比如rwx就是4217rw-是4206r--是4004。注意一个很容易踩的坑很多人觉得7就是“完全权限”的意思就直接把 chmod 777 扔上去用。但生产环境里这是大忌。目录用 777意味着任何人都能在这个目录里新建和删除文件如果这个目录是网站的上传目录那后果不堪设想。正确做法是尽量往小的权限设置够用就好。今天我自己练手的时候做了这么一组实验mkdir test_project touch test_project/readme.md chmod 754 test_project/readme.md ls -l test_project/readme.md输出结果-rwxr-xr-- 1 user user 0 Feb 20 10:30 test_project/readme.md这个754拆解下来就是属主可以读写执行7组成员可以读和执行5其他用户只能读4。在真实场景里这种权限设置很常用——比如网站项目的配置文件属主可以改同一开发组成员可以查看和执行外部用户只能读。3.3 目录权限的“反直觉”坑为什么r和x要成对出现今天的第二个大知识点是目录权限和文件权限的差别。这里我差点绕晕后来用一个小实验才彻底搞明白。文件的r和x很好理解一个是读内容一个是执行。目录就完全不一样了目录的r能否列出目录里的文件名列表目录的w能否在目录里新建、删除、重命名文件目录的x能否进入目录cd进去以及能否访问目录里文件的具体属性比如通过绝对路径访问子文件最坑的点在于对一个目录来说如果只有r没有x你虽然能用ls看到目录里有几个文件但看不到任何文件的详细信息也进不去这个目录。如果只有x没有r你能进去但看不到里面有什么只能凭文件名猜。所以实际使用中目录一般至少要有r-x读执行。常见的目录权限组合是目录权限含义使用场景755属主可读写执行组和其他人可读可执行网站根目录、公共资源目录750属主可读写执行组可读可执行其他人无权限项目代码目录组内协作700仅属主可读写执行隐私目录、密钥目录1777属主可读写执行组和其他人可读可执行加上粘滞位/tmp 这类共享临时目录最后那个1777里的1是“粘滞位”它的作用是在这个目录下只有文件属主或者root才能删除自己的文件。最典型的就是/tmp目录所有用户都可以在里面创建临时文件但不允许随便删别人的文件。这个属于进阶内容今天了解即可但面试和实际工作中经常会遇到。3.4 chown和chmod配合使用实操中的完整闭环光会改权限还不够还得会改属主和属组。第4天我搭了一个模拟场景来练手场景描述构建一个名为project_a的目录要求一个叫alice的用户和一个叫barry的用户都能在这个目录下建文件但barry只能编辑自己创建的文件不能删alice创建的反之亦然。这个需求在企业里非常常见——多个同事协作一个目录但互相不能乱动对方的文件。解决办法就是Linux里的“粘滞位”我刚才提到过# 1. 创建目录 mkdir /home/share/project_a # 2. 把目录的属主/属组设置为公共组 chown root:devteam /home/share/project_a # 3. 设置权限为 1777 chmod 1777 /home/share/project_a # 4. 确认结果 ls -ld /home/share/project_a关键点把两个用户都加入devteam组目录的属组设为devteam然后再给目录加上粘滞位。这样团队内任何人创建的临时文件只有自己有权删除但大家都能在目录里读写文件和新建文件。实操心得如果你只设置了 777 权限但忘了加粘滞位就会出现“我辛苦写了半天的文件被同事一条 rm 命令误删了”的悲剧。服务器上这种情况真要命所以以后我做共享目录粘滞位是默认必加的。4. 重定向与管道Linux的“命令组合技”4.1 标准输入输出的三兄弟别再把重定向当玄学权限学完我进入今天第二个大模块重定向与管道。先说重定向四个符号记清楚就能覆盖95%的使用场景标准输出重定向覆盖写标准输出重定向追加写2错误输出重定向标准输入重定向什么叫标准输出和错误输出Linux里命令执行会有两个出口——正常的结果走“标准输出”屏幕报错信息走“标准错误输出”也是屏幕上但分开算。如果你只想把正常结果存进文件错误信息留在屏幕上就可以这样# 把正常输出写入文件 ls /etc etc_list.txt # 把错误信息也写入文件 ls /etc 2 error.log # 把正常输出追加到文件末尾 echo hello world etc_list.txt新手最容易踩的坑以为和没区别。实际上每次都会把目标文件清空再写入如果文件里有重要内容一条命令就把你全毁了。我今天练习时就干过这事——本想把命令输出追加到一个笔记文件里结果用了直接把之前的笔记清空了欲哭无泪。所以“高危操作”里面绝对排得上号。那如果我想同时把正常输出和错误输出都存到文件里呢标准写法command output.log 21这段代码里的21表示“把错误输出2重定向到和标准输出1一样的地方”。注意顺序不能反必须先output.log再21反了就会出错。4.2 管道像流水线一样组合命令管道符号是|作用是把左边命令的输出作为右边命令的输入。这就像是工厂里的流水线第一个工序完成半成品第二个工序接着加工。举个今天练过的例子统计/var/log/目录下有多少个.log文件ls /var/log/ | wc -l简单来说ls /var/log/会把目录里的文件名全部列出来wc -l统计行数。结果就是文件数量。更实用一点的场景找某个端口被什么进程占用netstat -tunlp | grep 8080这里netstat输出所有端口监听状态grep 8080过滤出包含8080的行。一条命令搞定问题排查比一个个翻输出高效得多。再进阶一点管道是可以串联很多层的。比如我想看看系统里有多少个普通用户cat /etc/passwd | cut -d: -f1 | grep -v ^# | tail -n 11这段代码的每个环节cat读取用户文件cut按冒号拆分取第一个字段用户名grep -v去掉注释行tail跳过前10个系统自带用户。四段接力每一段都在上一个工序的输出上做加工。我的学习心得管道用得好不好关键在于“能不能想到把两个不相关的命令组合起来”。这需要积累。我给自己定了一个规矩每次学新命令翻一下它的帮助文档想一想它能输出什么格式的内容这个内容会不会是另一条命令想吃的“食材”。想多了组合技自然就通了。4.3 tee命令一边看输出一边存文件今天还学了一个特别实用的小工具tee名字就很有意思——T型水管两头分流。它的作用是把输出同时“分流”到屏幕和文件。# 运行命令结果既显示在屏幕又保存到文件 ls -l /etc | tee etc_list.txt这里的技巧在于tee在工作流程中非常有用。比如你要在一台服务器上跑一个可能需要很长时间的部署脚本又不想干等着看不到输出也不想让输出刷屏刷到看不了历史记录就可以用tee把实时输出记录下来./deploy.sh | tee deploy_log_$(date %Y%m%d).log配上date命令生成带日期的日志文件名以后每次部署都有一份完整的日志存档排查问题的时候翻日志比回忆管用得多。这个习惯我现在已经养成了强烈推荐。5. 文本处理三剑客入门grep、find、cut的实战组合5.1 grep不只是“查找关键字”这么简单网上流传的“Linux命令大全”里面grep一定会被列在前排。但很多人对grep的理解停留在一个层面grep 关键字 文件。这个理解没错但远远不够。今天我用一个真实的运维场景来练 grep某个服务把日志写在了/var/log/myapp/目录下每天一个文件我想找出所有带ERROR的行并且统计一下今天出现了多少次# 在目录里递归查找所有文件找到包含ERROR的行 grep -r ERROR /var/log/myapp/ # 只统计行数 grep -r ERROR /var/log/myapp/ | wc -l # 带上行号方便定位 grep -rn ERROR /var/log/myapp/ # 忽略大小写 grep -ri error /var/log/myapp/-r递归子目录、-n显示行号、-i忽略大小写这三个参数是我日常最高频的组合。另外一个特别使用的参数是-A和-B用来显示匹配行后面或前面的几行上下文# 显示ERROR行以及后面的3行通常后面跟着堆栈信息 grep -A 3 ERROR /var/log/myapp/app.log排查问题的时候只看一行错误往往不够上下文里往往藏着真正的崩溃原因这个参数能帮你节省大量时间。5.2 find定位文件的终极武器find命令负责根据文件名、类型、大小、修改时间等条件查找文件。这里我分享今天最常用的几个组合。假设你的项目目录里堆积了大量临时文件想找到所有超过100MB的.tar文件find /home/user/downloads -name *.tar -size 100M不想直接删先看数量find /home/user/downloads -name *.tar -size 100M | wc -l这时候可以用管道和xargs直接删除但删除前我强烈建议先-print打印文件名确认一下find /home/user/downloads -name *.tmp -delete-delete参数一键删除你敢用吗我不敢。我今天是这么处理的find /home/user/downloads -name *.tmp -exec ls -lh {} \;这条命令里的-exec参数会对每一个找到的文件执行后面的命令{}代表当前文件名。先看列表确认无误再把ls -lh换成rm -ffind /home/user/downloads -name *.tmp -exec rm -f {} \;注意在自己的学习环境里随便折腾没关系但生产环境里find -exec rm是典型的高危命令。我给自己定的规矩是任何删除动作第一次先执行“只列出不删除”版本人工确认后再执行真正的删除。宁可多花一分钟不要手滑一秒钟。还有一个十分常用的 find 场景按时间查找。比如查过去7天内修改过的配置文件find /etc -name *.conf -mtime -7-mtime -7表示修改时间在7天以内如果你看到-mtime 7那就是7天之前。这个参数在做定期清理临时文件时能救命。5.3 cut结构化的文本切片工具cut命令的作用是按“列”来切割文本和 grep 按“行”过滤正好互补。我最常用的参数是-d指定分隔符和-f取第几列。比如/etc/passwd文件里的每一行格式是用户名:x:UID:GID:描述:家目录:登录shell用冒号分隔我想看所有用户的用户名和登录shellcut -d: -f1,7 /etc/passwd输出长这样root:/bin/bash daemon:/usr/sbin/nologin www-data:/usr/sbin/nologin alice:/bin/bash这个输出直接告诉我哪些用户可以正常登录哪些是服务账号nologin表示禁止登录。配合 grep 一起用就能方便地筛选出所有能登录的普通用户grep -v nologin /etc/passwd | cut -d: -f1grep -v nologin干掉所有含 nologin 的行剩下的行再交给cut取用户名一条命令解决问题。今天练的最复杂的一个组合题是这样的将当前目录下所有.conf文件里包含server_name的行找出来提取出这些配置的域名按字母排序并统计数量。做法grep -r server_name --include*.conf . | awk {print $2} | sort | uniq -c这里引入了一个awk的内容今天我只用了它最基础的功能——按空格切分并打印第2个字段。完整解释grep -r递归查找所有.conf文件包含server_name的行awk {print $2}打印每行的第二个字段域名sort排序uniq -c统计重复次数。一条命令的流水线从一堆配置里提取出了很直观的统计报告。5.4 head、tail、wc流量分析的“三大件”文本处理离不了head看头部、tail看尾部、wc统计数量。它们单独用很简单组合起来威力很大。比如查看最新日志文件的最后50行并持续监控新的输出tail -f /var/log/system.log-f表示“跟随”follow文件有新内容时会实时打印到终端。这是排查线上问题的利器——开着这个窗口复现问题你能实时看到日志刷出来的错误。再比如想把一个超大日志文件的最后5000行截取出来单独存成一个文件来分析避免整个文件太大打开卡死tail -n 5000 /var/log/huge.log last_5000_lines.log这里就串联了今天的两个知识点tail取尾部5000行重定向写入新文件。这个操作在分析数GB超大日志时非常实用。wc -l则是快速统计行数的前面已经用过多次。加上-c还能统计字节数-w统计单词数用起来非常灵活。6. 头歌风格练习一晚上能做完的命令闯关题6.1 六道渐进式练习题附思路和参考答案网上很多教程的练习题我都不喜欢因为它们只是在验证“你记住了吗”而不是在训练“你会不会用”。今天学完所有内容后我给自己设计了六道闯关题。你们也可以照着做一遍做完对答案比单纯看书效果好得多。第一题在当前目录下创建一个名为linux_day4的目录并在其中创建logs和backup两个子目录。mkdir -p linux_day4/logs linux_day4/backup-p参数会一次性创建多层目录不需要分两步执行。有些教程会让你mkdir linux_day4 cd linux_day4 mkdir logs backup也能实现但-p更简洁。第二题在linux_day4/logs下生成一个包含100行测试文本的文件内容格式为INFO 2026-02-20 10:00:00 request completed 第N条N从1到100。seq 1 100 | awk {printf INFO 2026-02-20 10:00:00 request completed 第%d条\n, $1} linux_day4/logs/app.logseq 1 100生成1到100的数字awk负责按格式拼装文本最后重定向写入文件。这一题已经需要用管道和格式化输出了。第三题基于第二题生成的日志文件统计request completed出现的总次数。grep -c request completed linux_day4/logs/app.log答案是100。如果不知道grep -c也可以用grep ... | wc -l两条命令本质相同。第四题把日志文件中第51行到第70行的内容提取出来保存为一个新文件part2.log。sed -n 51,70p linux_day4/logs/app.log linux_day4/backup/part2.log这里用到了sed的地址范围打印功能。第4天你们还没正式学sed但这个用法非常简单且高频可以先混个脸熟-n关闭默认输出51,70p表示“打印51到70行”。第五题把part2.log按行号反序输出。tail -r linux_day4/backup/part2.logtail -r在某些系统版本上可能不支持备选方案是tac命令cat倒着写本质一样。第六题找出linux_day4/logs/app.log内容中所有“INFO”所在行的行号。grep -n INFO linux_day4/logs/app.log | cut -d: -f1grep -n会输出“行号:内容”的格式再用cut按冒号切分取第一个字段就得到了纯行号列表。这里用到了第5.3节说的cut算是一次综合运用。6.2 做完练习后我做的一次“复盘式复习”六道题做完花了大概40分钟。做完之后我没有急着开始新内容而是做了一次很关键的复盘——把所有今天用过且不熟的命令手写在一个本子上。是的手写。敲键盘不管用必须用笔写一遍记忆才更牢固。我整理了一张速查表你们也可以抄走。别嫌简单第4天能完整掌握这些你已经超过了很多人。命令重要参数/用法典型场景chmod数字权限、-R递归调整文件/目录访问权限chownuser:group、-R递归修改文件属主和属组grep-r、-n、-i、-c、-A文本检索与日志排查find-name、-size、-mtime、-exec按条件定位文件cut-d分隔符、-f字段文本切片提取tail-f、-n查看日志末尾/实时监控wc-l、-c、-w统计行数/字数tee直接输出并保存兼顾实时查看与日志记录sort、uniq按列排序、-c去重计数数据统计7. 今天踩过的坑和避坑心得7.1 踩坑实录一把当用日志文件被清空这个坑我在前面提过但值得单独展开说一说。今天练习的时候我本来想把一条查询结果追加到笔记文件里结果写成了ls /home/user/project notes.txt注意这里用的是没问题。但后来有一次我写成了ls /home/user/project notes.txt直接覆盖了原来的笔记内容。当时我整个人都愣住了然后才反应过来——是覆盖才是追加。这个教训让我长了记性每次写完重定向符号我都会停下来默念一遍“这是覆盖还是追加”确认无误再按回车。别笑这个方法挽救了我后面好几次数据丢失事故。7.2 踩坑实录二chmod递归修改时把执行权限误加给所有文件今天还干过一件蠢事。我想把项目目录的权限整体调成755于是用了chmod -R 755 /home/user/myproject/结果这个目录下所有文件都被赋予了执行权限。对目录来说执行权限是合理的但对普通文本文件来说执行权限毫无意义而且只要权限是755就意味着所有人包括其他系统用户都能读取你的源码文件。如果服务器上还跑了别的服务就存在信息泄露的风险。正确的做法是除非确实需要否则不随意对整个目录-R改权限。如果真要改也应该分清楚目标目录需要x普通文件不需要。规范的操作是find /home/user/myproject -type d -exec chmod 755 {} \; find /home/user/myproject -type f -exec chmod 644 {} \;用find把目录和文件分开处理目录755、文件644这是业界常规做法。因为文件644已经能保证属主可读写、组和其他人可读日常场景完全够用。7.3 踩坑实录三grep递归查找遇到二进制文件用grep -r查找关键字的时候如果目录里有二进制文件会出现一堆乱码输出。一开始我还以为是文件内容有什么奇怪编码后来才知道grep默认会把二进制文件也扫一遍然后输出“binary file matches”之类的内容。解决办法是在 grep 命令里加上-I参数专门跳过二进制文件grep -rnI ERROR /var/log/myapp/-I会让 grep 忽略二进制文件这样输出就会干净很多。7.4 常见问题速查表现象可能原因排查方向Permission denied文件/目录权限不够ls -l查看权限临时用sudo验证command not found命令不在PATH中which 命令名检查用绝对路径执行文件内容被莫名清空用了而非平时养成用的习惯关键操作前备份grep报binary file matches扫描到二进制文件加-I参数跳过rm删除时提示目录非空没有用-r确认无误后加-r递归删除中文文件名乱码字符集设置问题locale检查系统语言环境这些坑踩过一遍比你看十遍教程印象都深。第4天学习的过程中我最大的感受是Linux学习没有捷径但一定有方法论。死记命令参数列表是最差的学习方式把命令放进真实任务里去用才是最高效的路径。今天最后再分享一个我喜欢的小习惯每天学习结束后我都会挑一条今天用过的命令把它扩展成一篇两三句话的“命令笔记”记录它解决的实际问题、使用的参数、以及踩过的坑。日积月累这本笔记就变成了我自己的“命令案例库”比任何网上的命令大全都实用。第4天学完你们也可以试试。
返回列表