Linux学习(二):从命令行管理文件
我身边不少刚开始接触Linux的朋友,学完了安装、学会了开机进系统,却卡在了“接下来干嘛”这一步。鼠标不能用了,桌面也不知道在哪,一个黑乎乎的终端窗口摆在面前,想复制个文件都不知道该敲什么。实际上,命令行管理文件正是Linux学习从“听说过”走向“能上手”的关键转折点。这篇内容我打算把文件管理这条主线彻底展开:路径思维、文件查看、增删改查、权限体系、批量查找、备份打包,再到硬链接和软链接背后的inode原理,全部用实战口径过一遍。你可以把它当成一份自带避坑提示的操作手册,看完直接在终端里敲,比死记硬背命令有效得多。
这篇内容适合两类人:一类是刚装好Linux发行版、对终端半懂不懂的入门用户;另一类是已经会一些命令、但对文件权限、链接原理、批量处理逻辑还比较模糊的学习者。我用的是目前各大发行版通用的GNU coreutils工具集,所以不管你是Ubuntu、Debian、CentOS还是Rocky Linux,命令和参数基本都通用。
1. 学文件管理前,先搞懂Linux的路径思维
Windows用户第一次打开Linux终端,最容易产生一个疑惑:为什么我找不到C盘和D盘?这里涉及Linux和Windows在文件组织逻辑上的本质差异。Windows用盘符区分存储区域,而Linux把所有东西都挂在同一个根目录“/”下面。这个“一切皆文件”的设计哲学,决定了我们管理文件时首先要改变思维模式。
1.1 “一切皆文件”:Linux文件名里没有盘符与扩展名迷信
Linux里没有“盘符”这个概念。你用ls / 去看根目录,会看到bin、etc、home、usr、var、tmp、dev、proc这一堆目录。U盘、移动硬盘、光驱接入系统之后,也不叫E盘、F盘,而是被挂载到某个目录下,比如/media/username/usb或者/mnt/data。理解了这个基础,你就明白为什么所有路径都从/开始写。
还有一个需要打破的习惯是“扩展名迷信”。在Windows里,.exe是可执行程序,.jpg是图片,很多时候系统靠扩展名决定怎么打开文件。Linux的扩展名更多是给人看的约定,系统内核并不关心你的脚本叫run.sh还是run.py。真正决定文件能不能执行、是什么格式的,是文件自身的属性位和文件头内容。我见过有人把一个Python脚本改名成.txt之后就不会执行了,其实chmod +x权限还在的话,照样能跑。所以后面我会专门讲file命令,它才是判断文件真实类型最可靠的工具。
1.2 绝对路径与相对路径:帮你少打很多字的判断规则
路径分两种:从根目录/开始写的叫绝对路径,从当前所在位置开始写的叫相对路径。举例来说,无论你当前在哪,/home/username/docs/report.pdf都能精确定位一个文件;但如果你当前已经在/home/username,直接写docs/report.pdf就够了。
这里的关键是掌握三个“快捷方式”:
- . 代表当前目录
- .. 代表上一级目录
- ~ 代表当前用户的家目录
我最想提醒的是“..”的用法。很多人输入cd ..没问题,但在cp、mv、rm这些命令里却经常忘记它。比如你人在/home/username/docs,想删除上一级目录里的oldfile.txt,应该写rm ../oldfile.txt。初学阶段最容易犯的错是写rm oldfile.txt,结果系统提示找不到文件,你就开始怀疑是不是文件丢了。其实不是丢了,是路径没写对。
另外,绝对路径和相对路径的选择也有经验可循:跨目录操作频繁时用绝对路径最不容易错,脚本里写死路径基本都用绝对路径;而在自己熟悉的家目录范围内操作,相对路径能让命令短一大截。
1.3 目录树中那几个“非看不可”的角落
Linux目录结构有行业标准(FHS),但并不是所有目录你都需要背。从文件管理学习的角度,我建议先盯住这几个:
| 路径 | 作用 | 与你的关系 |
|---|---|---|
| /home | 普通用户的家目录根区域 | 你的文件默认都放在/home/用户名下 |
| /tmp | 临时文件目录 | 重启后内容可能清空,别放重要资料 |
| /var/log | 系统与程序日志 | 排查故障时最常翻的地方 |
| /etc | 系统与程序配置文件 | 修改前建议先备份 |
| /usr | 系统程序与共享数据 | 正常情况下不需要手动动它 |
这些目录不需要死记,多翻几次自然就熟了。我个人的建议是:平时练习就待在家目录,别没事去删/etc和/usr下的东西,因为你还没建立起“哪些文件是系统运行必需”的直觉,盲目操作极容易搞崩系统。
2. 看清文件真面目:从ls到stat,逐步深入
文件管理的很多问题,根源在于“看不清楚”。看不清楚当前目录里到底有什么,看不清楚文件的类型,看不清楚文件大小、权限、归属。这一节我把查看类的命令按信息量从小到大过一遍。
2.1 ls的常用组合:日常最实用的是哪些参数
ls大概是Linux里用频率最高的命令。裸敲ls只能看到文件名,在脚本和日常操作中信息太少。我建议从第一天起就养成用组合参数的习惯:
ls -l ls -a ls -lh ls -lt ls -ltr-l显示详细信息,-a显示包括隐藏文件在内的所有条目,-h把大小换算成K、M、G这种人性化单位,-t按时间排序,-r反转顺序。我最常用的组合是ls -lhtr,按修改时间从旧到新排列,这样哪个文件刚动过一眼就能扫出来。
ls -l输出里那一长串字段,很多人看一眼就关掉了,其实每个字段都对应一个关键信息。比如drwxr-xr-x,第一位d表示这是一个目录,普通文件是-,软链接是l。后面9个字符分成三组,分别代表属主、属组、其他人的权限。再往后是硬链接数、属主、属组、文件大小、最后修改时间、文件名。我刚开始学习时,特别喜欢用ls -l配合stat来理解文件的完整属性,因为前者适合扫目录,后者适合深挖单个文件。
这里有一个容易迷惑的点:为什么很多目录的硬链接数是2或者更多?因为目录里的子目录会包含指向父目录的..条目,每多一个子目录,父目录的硬链接数就加一。所以看到目录链接数大于2,说明它下面有子目录。这个知识点不一定常用,但能帮你理解硬链接的含义。
2.2 file命令:不该靠后缀猜文件类型
file命令是我强烈建议入门者尽早养成的习惯。用法很简单:
file filename输出会告诉你这个文件到底是什么类型。比如一个没有扩展名的文件,file能判断出它是ELF可执行文件、ASCII文本、JPEG图像还是gzip压缩数据。原理是它读取文件头部的“魔法数字”,而不是看文件名。这个命令的价值在于:下载了来源不明的文件,执行之前先file一下,能预判风险;脚本处理一批文件,先确认类型统一,能省去大量报错排查时间。
我还常用file配合通配符批量查看,比如file *.log,一次把所有日志文件的类型打出来。这种方式在定位“某个文件明明是文本却打不开”的问题时特别实用。
2.3 stat:把文件的家底一次性看光
如果ls -l还不够,那就上stat。这个命令展示的信息比ls -l详细得多,包括文件大小、占用块数、文件类型、inode编号、硬链接数、权限、UID/GID、以及三个时间戳:访问时间(atime)、修改时间(mtime)、状态变更时间(ctime)。
很多人分不清这三个时间,我用一句话概括:cat一下文件会改变atime;vi编辑内容并保存会改变mtime;chmod改权限会改变ctime。atime是读时间,mtime是内容修改时间,ctime是属性或内容变化都会触发的元数据时间。
实操中stat最有用的场景是排查“文件明明没动,为什么备份脚本还是全量备份”这类问题。一查atime和mtime,发现可能是某个监控脚本自动读取了文件,刷新了atime。当然现在的备份工具大多基于mtime或增量快照,但理解这三个时间的差别,能让你少走很多弯路。
3. 增删改查的日常操作:touch、mkdir、cp、mv、rm
到了真正上手操作的环节。这一部分命令不多,但每一个都有不少值得注意的细节。我的建议是:每个命令都自己建一个测试目录反复练,直到形成肌肉记忆。
3.1 新建与补齐:touch、mkdir的实用细节
touch最常见的用途有两个:一是创建空文件,二是把已存在文件的时间戳更新为当前时间。第二点容易被忽略,但它在某些构建脚本和日志轮转场景里很常用。
mkdir用于创建目录,最实用的参数是-p,可以一次性创建多级目录:
mkdir -p /home/username/project/src/utils这条命令会把project、src、utils三层一次性建好,如果中间某一层已存在也不报错。如果不用-p,mkdir只能创建一层,且父目录不存在时直接报错。我见过不少新手在这条命令上报错后手足无措,其实加个-p就解决。
还有个容易被忽略的用法:mkdir后面跟的花括号扩展。比如mkdir -p project/{src,docs,test}/{2024,2025},一条命令生成六个目录。这个写法在初始化项目结构时效率极高。
3.2 复制与移动:cp和mv的快速记忆法
cp和mv的参数高度相似,核心区别在于:cp是“复制一份,原文件还在”;mv是“移动过去或改名,原位置不再保留”。从操作系统的角度理解,cp会读取原文件内容并写入新位置,mv如果在同一个文件系统内只是修改目录项记录,不涉及文件数据搬移。这个原理直接导致两个经验:
第一,mv跨文件系统时,实际执行的是“复制+删除”,所以大文件移动时你会感觉到明显的等待;第二,cp命令多次复制同一个大文件会反复占用磁盘IO,而mv同一个分区内的文件几乎是瞬间完成。
日常高频参数如下:
cp -r source_dir/ target_dir/ # 递归复制目录 cp -a source/ target/ # 归档复制,保留权限和时间戳 cp -u source target # 只有当源文件更新时才覆盖 mv -i source target # 目标存在时先询问 mv -b source target # 覆盖前自动备份目标文件这里我必须提醒一个经典的坑:cp -r /path/src/ /path/dst/的结果可能和你以为的不一样。如果src目录末尾带斜杠,复制的是src目录里的内容;如果不带斜杠,复制的是src这个目录本身。比如cp -r src/ dst/会把src下所有内容放到dst目录里,而cp -r src dst/会在dst下面生成一个名为src的子目录。这个细节很多教程不提,实际使用时却很容易让目录结构乱掉。
3.3 删除的艺术:rm的风险控制与自救预案
rm是Linux文件管理里最“危险”的命令,因为它没有回收站的概念,rm删掉的文件默认无法从系统层面找回。我给自己定的规矩是:先ls确认路径,再执行rm;能用相对路径就不用绝对路径手滑;删除有疑虑的文件先mv到/tmp,而不是直接rm。
rm常用的安全姿势:
rm -i filename # 删除前逐个询问 rm -r dirname # 递归删除目录 rm -rf dirname # 递归强制删除,慎用我见过太多rm -rf删错目录的事故,原因几乎都是路径拼写错误或变量为空。一个典型场景是脚本里rm -rf $DIR/,如果$DIR变量没赋值,命令就会变成rm -rf /,后果不堪设想。所以我的建议非常直接:在交互式终端里,别用rm -rf,要用rm -ri,逐个确认;在脚本里,删除前加判断,确保变量非空且路径包含预期关键字,再用相对路径进入目标目录后执行删除。
另外,如果你真的手滑删了重要文件,不要立刻关机或者继续大量写入,应该马上停止对磁盘的写操作,尝试用debugfs或相关数据恢复工具。这类工具的成功率和文件系统类型、分区使用情况强相关,运气好能救回来一大部分。但坦白说,最可靠的自救方案不是事后恢复,而是平时养成备份习惯。
4. 权限管理:别让chmod和chown变成玄学
Linux文件管理绕不开权限体系。对刚入门的学习者来说,r、w、x和属主、属组、其他人这些概念很容易搞混,但一旦理解了它的逻辑,你会发现这套体系其实是简洁优雅的。
4.1 rwx与数字表示法之间的一次性转换
权限用三个字符一组表示:r(读)、w(写)、x(执行)。三组分别对应属主(u)、属组(g)、其他用户(o)。所以-rw-r--r--翻译成人话就是:这是一个普通文件,属主可读可写,属组和其他人只可读。
数字表示法其实只是字符权限的二进制编码:r=4、w=2、x=1。四个和三个的区别在于,4表示在读权限对应的二进制位上有值,2表示在写位置上有值,1表示执行位置上有值。把三组值分别加起来,rwx就是7,r-x就是5,r--就是4。所以chmod 755 file的含义是:属主7(rwx),属组5(r-x),其他人5(r-x)。chmod 644是最常见的普通文件权限,对应rw-r--r--。
我建议不要死背数字,而是每次使用时在脑子里换算一遍,练上二十次自然就记住了。还有一个实用的相对模式:chmod +x给文件加执行权限,chmod -w去掉写权限,这种相对写法不需要计算具体数字,日常操作很省心。
4.2 谁可以改权限:chown、chgrp的边界与玩法
chmod改的是权限位,chown改的是属主,chgrp改的是属组。但要注意:普通用户只能修改自己拥有的文件的权限,却不能随便把文件改成别人的属主。chown命令一般需要root权限,这也是Linux权限体系的重要约束——你属于谁、能影响谁,系统管得很清楚。
日常场景里最常见的需求是:
sudo chown username:groupname filename sudo chown -R username:username /home/username/project # 递归修改-R参数搭配chown、chgrp时特别容易踩坑,因为一旦写错范围,可能把系统目录的属主改乱,导致服务异常。我每次使用都先把路径列出来检查一遍,再确认范围没有问题才执行。
还有一个小技巧:chown支持用“属主:属组”一次修改两个维度,也可以只写“:groupname”只改属组,或者写“username:”只改属主。这个语法在不同发行版上是统一的,用起来很方便。
4.3 特殊权限与umask:平时不起眼、出事要命的细节
除了r、w、x,权限体系里还藏着三个特殊位:setuid(4,s)、setgid(2,s)、sticky bit(1,t)。普通用户日常用得少,但遇到就有理解门槛。
- setuid:作用于可执行文件,表示执行该文件时,以文件属主的身份运行,而不是以当前执行者身份。比如/usr/bin/passwd就带setuid,普通用户执行它才能修改/etc/shadow里的密码。
- setgid:作用于目录时,子文件或目录会自动继承父目录的属组;作用于可执行文件时,以文件属组的身份运行。
- sticky bit:作用于目录时,只有文件属主、目录属主或root才能删除目录中的文件。/tmp默认就有这个权限,所以你看/tmp里文件一大堆,但谁也不能乱删别人的文件。
umask是另一个容易被忽略的概念。它不是一个“权限”,而是“权限掩码”,作用是决定新建文件或目录时默认去掉哪些权限。比如常见的umask值为022,那么新建文件的默认权限是644(666-022=644),新建目录的默认权限是755(777-022=755)。想确认当前umask值,直接敲umask就能看到。想修改,比如希望新建文件对属组也能写,可以umask 002。
这个知识在排查“为什么新创建的文件别人改不了”时非常有用。很多服务部署完,发现日志文件默认权限太严,服务进程读不了,一查就是umask没调对。
5. 批量查找与打包备份:find、grep、tar的高效搭配
文件管理不只是单点操作,更多时候是“在几百个文件里精准定位目标”以及“批量处理一组文件”。find和grep负责“找”,tar负责“整包带走”,组合起来能解决绝大多数文件管理需求。
5.1 find的常用条件组合与常见误区
find的基本格式是find 路径 条件,常用条件如下:
find /home/username -name "*.log" # 按文件名 find /home/username -type f # 只找普通文件 find /home/username -type d -empty # 找空目录 find /home/username -mtime -7 # 7天内修改过的文件 find /home/username -size +100M # 大于100MB的文件 find /home/username -user root # 属主为root的文件它们可以组合,比如查找所有大于500MB且7天内修改过的日志文件:
find /var/log -type f -name "*.log" -size +500M -mtime -7最常踩的误区是:name后面的模式必须用引号包起来,否则通配符会被当前shell展开,结果完全不对。另一个经典误区是find / -name "xxx" 会扫遍整个文件系统,速度很慢,可能因为没有权限而输出一堆Permission denied干扰视线。遇到这种大量错误输出,可以把标准错误重定向到别处,比如find / -name "xxx" 2>/dev/null,这样屏幕上只剩真正匹配的结果。
find加上-exec参数可以实现“找到即处理”:
find /home/username/downloads -type f -name "*.tmp" -exec rm -i {} \;{}会被替换为每一个找到的文件名,结尾的;是-exec的固定语法。注意这条命令同样有rm的潜在风险,建议先不加-exec执行一遍看列表,确认无误再加删除动作。
5.2 grep在文件管理中的应用场景
grep通常是文本搜索工具,但它在文件管理里也很有用。比如你想在一堆配置文件里找所有包含特定IP的配置文件,或者想查看某个文件里到底有没有某个配置项,grep一下就知道。
grep -r "error" /home/username/logs/ # 递归搜索目录 grep -il "timeout" /etc/ # 只看包含该关键字的文件名 grep -n "root" /etc/passwd # 显示行号grep配合find的典型场景是:先用find限定文件特征,再用grep过滤内容。比如找所有.log文件中出现“ERROR”且修改时间在24小时内的文件:
find /home/username/logs -name "*.log" -mtime -1 | xargs grep -l "ERROR"xargs在这里的作用是把文件名列表作为参数传给grep。注意文件名如果包含空格,这条命令可能出问题,更稳妥的写法是find ... -print0 | xargs -0 grep -l "ERROR"。这是很多脚本里容易忽略的细节。
5.3 tar的压缩备份套路与解压的坑
tar在古代是磁带归档工具,现在则是Linux打包压缩的标准方式。常用套路如下:
tar -czvf backup.tar.gz /home/username/project/ # 打包并压缩 tar -xzvf backup.tar.gz # 解压 tar -tzvf backup.tar.gz # 列出压缩包内容,不解压 tar -xzvf backup.tar.gz -C /tmp/restore/ # 解压到指定目录参数里的c表示创建,x表示解压,z表示通过gzip压缩,v表示显示详细过程,f表示后面跟文件名。f参数必须放在最后,因为它后面的内容被当作文件名处理,这个顺序错误是最常见的tar报错原因。
解压时的坑主要集中在路径上。很多压缩包内部带有一整层顶层目录,解压后内容都放在backup/下面,不会散落得满地都是。但有些包内部路径不规范,解压出来的文件直接铺在当前目录。我的习惯是:先tar -tzvf看一眼包内容结构,再决定解压到哪个目录,尽量避免直接在当前目录解压导致文件混乱。
另外,tar本身也支持增量备份思路,但普通用户更常用的备份工具还有rsync。在后续备份自动化里,rsync比反复tar更高效,因为它支持差异同步。这两者的定位需要分清:tar适合“打包带走、归档保存”,rsync适合“服务器之间同步、定期镜像目录”。
6. 走进inode世界:硬链接与软链接的本质差异
链接这个概念对初学者来说稍微有点抽象,但它恰恰是Linux文件管理里最能体现设计哲学的部分。理解了硬链接和软链接,你就理解了文件名、文件数据和文件元数据三者之间的关系。
6.1 文件名与inode的关系:删掉的只是目录项
Linux文件系统里,文件名只是目录项里的一个字符串,真正的文件实体由inode(索引节点)标识。inode存着文件属性、权限、大小、时间戳以及数据块指针。一个文件同时有多个硬链接时,所有文件名都指向同一个inode,文件数据只存一份。你可以用ls -i或者stat查看文件的inode号,也会发现硬链接数跟着变化。
理解了这点,很多现象就说得通了:
- 为什么rm删掉文件后,如果还有另一个硬链接,数据还在?因为rm删除的是目录项,只要inode的引用计数不为0,数据块就不会被释放。
- 为什么硬链接不能跨文件系统?因为不同文件系统的inode编号各自独立,没有可比性。
- 为什么硬链接不能指向目录?因为如果目录允许硬链接,会形成循环引用,目录树的遍历算法就没法保证终止。
创建硬链接的命令是ln file linkname,注意它默认不带参数就创建硬链接。也正因如此,很多人第一次使用ln时以为创建的是“快捷方式”,实际得到的却是一个和原文件同步更新的新名字。
6.2 软链接与硬链接的选型判断
软链接(符号链接)创建方式需要加-s:ln -s target linkname。软链接相当于一个独立的小文件,里面存储的是目标文件的路径信息,类似Windows里的快捷方式。目标被移走后,软链接就成了“断链”,访问会报No such file or directory。
日常使用怎么选?我给你一个现成的判断标准:
| 场景 | 推荐 | 理由 |
|---|---|---|
| 需要跨文件系统引用(比如/data分区到/home路径) | 软链接 | 硬链接跨不了文件系统 |
| 需要指向目录 | 软链接 | 硬链接不能指向目录 |
| 需要同一个文件有多个可访问路径,且必须保持同一份数据 | 硬链接 | 软链接会因目标移动失效 |
| 目标文件会被替换、重命名 | 软链接 | 替换目标时硬链接关系可能被破坏 |
| 想要备份、同步时“跟随真实文件” | 软链接 | 备份工具默认跟随符号链接 |
还有一个容易被忽略的坑:软链接文件本身的权限没有意义,真正起作用的是目标文件的权限。所以ln -s创建链接后,你chmod链接文件发现权限没变,别慌,这是正常现象,应该去改真实目标。
我也遇到过一种情况:在脚本里head/tail/cat某个软链接指向的文件,如果目标有一天被替换成了别的类型,脚本行为会跟着变化,排查起来很费劲。所以在脚本里使用软链接之前,最好先确认链接目标仍然存在且类型符合预期。
7. 实际工作中最常踩的文件管理坑(附应急清单)
命令学得再多,实战中还是会有各种意外。这一节我梳理几个典型的高频坑,每个都是我或身边同事真实碰到过的,值得记下来。
7.1 文件名带空格或特殊字符时的处理方案
Linux允许文件名包含空格、中文、括号甚至换行符。但shell默认按空格分词,所以直接敲文件名经常出错。比如有一个文件叫my report.pdf,你直接rm my report.pdf,shell会当成两个文件去删。
处理方式有三种,按推荐程度排列:
rm my\ report.pdf # 反斜杠转义空格 rm "my report.pdf" # 双引号包裹 rm 'my report.pdf' # 单引号包裹如果文件名以-开头,命令会误认为这是参数,需要加双引号或加上路径。比如删除名为-demo.txt的文件,最好写成rm ./-demo.txt。
批量文件包含空格时,用find加-delete或者-print0协同处理更稳妥。手工一条条双引号太慢也容易漏。
7.2 手滑删文件、路径写错、权限拒绝的补救办法
手滑删文件后,第一时间停止对这个分区的一切写操作。如果文件系统是ext4,可以尝试debugfs或相关恢复工具;如果使用了支持快照的文件系统或虚拟机快照,优先回滚快照。比恢复更重要的,我强调一遍:重要文件一定做异地备份,或至少放到版本管理工具里。
路径写错最常见的表现是“No such file or directory”。这时候不要急着怀疑文件没了,先用pwd确认当前路径,再用ls逐层确认。我调试别人的脚本时发现,很多路径错误根本原因是脚本里用了相对路径,而相对路径是相对于脚本运行时的当前目录,不是脚本文件所在目录。所以脚本里尽量用绝对路径,或者用dirname "$0"这类手段把脚本所在目录算出来。
权限拒绝时,先判断你是文件属主、属组成员还是其他用户,然后用ls -l看当前是谁拥有这个文件。如果你确定自己应该有权限,用sudo临时提升权限,但不要养成全程sudo的习惯——真正的问题是属主或权限设置错误,应该chown或chmod纠正,而不是靠sudo硬闯。
7.3 跟终端效率相关的几个小习惯
文件管理命令敲久了,效率差异其实来自习惯。我总结几个每天都在用的:
- 用Tab补全路径,不要自己敲全路径终端地址。Tab不仅能补全文件名,还能提示候选列表,专治拼写错误。
- 用history和Ctrl+R反向搜索历史命令。想重复执行之前某条复杂命令,不用重新敲,Ctrl+R输入关键字就能找回。
- 给高频命令设置alias。比如把rm -i设置为rm别名,防止手滑;把ls -lh设置为ll别名。具体配置写在~/.bashrc或~/.zshrc里,source一下立即生效。
- 用pushd、popd在几个目录之间穿梭。频繁在多个目录间切换时,一直cd来回跳很累,pushd把目录压栈,popd跳回上一目录,非常顺手。
- 能用通配符和花括号展开就不要写循环。很多批量化需求用*.txt、{a,b,c}.log这种模式一行搞定,比写for循环更直观。
这些小习惯单独看没什么,但累积下来,同样一批文件操作,熟手和新手的耗时可差好几倍。
写到这里,规划里的文件管理主线基本都覆盖完了:路径思维、查看工具、增删改查、权限体系、查找与备份、链接原理、常见坑与自救。我自己学Linux时最大的体会是:命令可以一点一点积累,但思维模型越早建立越好——“文件名只是目录项”、“权限决定你能做什么”、“数据安全靠备份兜底”,这些认知一旦建立,后续学管道、学Shell脚本、学系统服务管理都会顺很多。这篇文章所有的命令建议你在自己的系统里动手敲一遍,随便建个practice目录,把每个参数都试一次,比看十篇教程都管用。