Linux 基础指令与内核思维构建系列(一):rm 删除机制、路径相对性与“一切皆文件”的真相
目录前言一、从基本指令到文件本质1.1 详解 ls 命令与选项组合1.1.1 常用选项解析 (-l, -a 等)1.1.2 选项的自由组合1.2 透过指令看本质Linux 核心理论1.2.1 重新定义“文件” (一切皆文件)1.2.2 路径的唯一性1.3 Linux 文件系统基础与路径概念1.3.1 树形结构与绝对/相对路径1.3.2 Windows 与 Linux 的路径差异1.4 详解 pwd 与 whoami 命令1.4.1 pwd我在哪里1.4.2 whoami我是谁1.5 详解 cd 命令自由穿梭于目录之间1.5.1 实践总结二、文件的创建与属性初探2.1 touch 命令创建一个普通文件2.2 stat 命令与文件的本质ACM 时间2.3 Linux 的文件类型所见即所得2.3.1 Linux 不靠后缀名识别文件2.3.2 gcc ! Linux操作系统三、目录的高级操作与软件安装3.1 mkdir 的进阶用法递归创建3.2 补充命令安装 tree 查看目录结构四、文件的删除与路径概念进阶4.1 rmdir 命令仅用于删除空目录4.2 rm 命令删除文件与目录结语 云泽Q个人主页 专栏传送入口: 《C语言》《数据结构》《C》《Linux》《蓝桥杯系列》《笔试算法》《AI赋能》《STM32》⛺️遇见安然遇见你不负代码不负卿~前言大家好啊我是云泽Q欢迎阅读我的文章一名热爱计算机技术的在校大学生喜欢在课余时间做一些计算机技术的总结性文章希望我的文章能为你解答困惑~本篇内容就开始讲Linux 的基本操作了回想一下各位仁兄刚开始接触 Windows 操作系统的时候大概率是在小学或者初中那时候你们刚接触肯定不是一上来就用 Windows 打游戏也不是在里面写代码编程你最先做的是学会双击、单击、右键、删除、复制、粘贴学会用记事本学会用 Word。说白了接触任何一款新操作系统第一件事永远是掌握它的基本交互方式。现在我们面对的是 Linux。在 Windows 里你的鼠标点击就是操作而在 Linux特别是我们这种没有图形界面的服务器环境里指令就是控制系统的唯一方法。指令的本质其实就对应着我们在 Windows 里的各种鼠标动作。我们前几篇文章的目标很明确学习 40 条以上的基础指令。这些指令不需要死记硬背后面用得多了自然就记住了。但比指令更重要的是指令背后蕴含的Linux 系统理论知识。这才看文章的核心目的为了让兄弟们心里有个底我们先快速过一遍接下来要讲的 6-8 个最基础的指令clear清屏相当于把黑板擦干净。pwd显示当前所在的路径Print Working Directory。ls列出当前目录下的文件。mkdir创建新目录Make Directory相当于 Windows 的新建文件夹。cd切换目录Change Directory相当于双击进入文件夹。cd ..返回上一级目录。这几个指令大家先混个眼熟接下来我们要像剥洋葱一样把其中最核心的ls命令和它背后的理论讲透。一、从基本指令到文件本质1.1 详解 ls 命令与选项组合ls是文中第一个详细讲解的命令它的功能很简单罗列当前路径下的所有文件名。但在 Linux 中光看文件名是不够的我们需要更多信息。这就涉及到了选项的概念。1.1.1 常用选项解析 (-l, -a 等)ls -l(等价于ll)这里的-l是一个选项用来使用指定命令的扩展功能。加上它之后不仅显示文件名还会把文件的详细属性信息全部列出来比如权限、所有者、大小、修改时间等。ls -a这个选项用于显示隐藏文件。在 Linux 中以.点开头的文件都是隐藏文件比如.hello或者代表当前目录的.和代表上级目录的..。默认情况下ls是不显示它们的加上-aall才能看到全貌。1.1.2 选项的自由组合这里有个非常重要的点选项是可以自由组合的并不是说学了ls -a就只能单独用它学了ls -l就只能单独用它。你可以把它们结合起来ls -a -l先显示隐藏文件再显示详细信息。ls -l -a顺序颠倒效果一样。ls -la或ls -al这是我们的最佳实践写法。把短选项合并在一起既省事儿又能同时达到“显示隐藏文件”“显示详细信息”的目的。图中我们现在能理解的就是如图文件大小和文件创建时间[rootiZ... 118]#最后的 118 就是我当前所在的路径。后面的文章中只要不涉及冲突我们都会采用这种组合写法因为这样打字最少效率最高。1.2 透过指令看本质Linux 核心理论讲完ls我们不能只停留在“怎么用”上更要理解“为什么”。通过ls命令我们要建立起两个非常朴素的 Linux 核心认知。1.2.1 重新定义“文件” (一切皆文件)在 Windows 里你可能觉得文件就是里面的内容。但在 Linux 的视角下这个理解是不完整的。大家可以思考一个问题在 Windows 里新建一个空文件它占不占磁盘空间肯定是占的哪怕只有几 KB。既然内容为空那占用的空间存的是什么这就引出了我们的第一个核心理论公式文件 文件的内容 文件的属性 \text{文件} \text{文件的内容} \text{文件的属性}文件文件的内容文件的属性文件的内容就是你写在里面的文字、代码或者数据。文件的属性元信息包括文件的大小、创建时间、修改时间、权限、所有者等等。文件的属性数据也叫做元信息Metadata。它们也是数据也需要被保存在硬盘上。所以当我们学习文件操作时本质上无非就是对内容或者对属性做操作。以后大家再看ls -l输出的那一长串信息就要反应过来这就是在查看文件的属性1.2.2 路径的唯一性第二个理论关于路径。为什么要有路径因为路径具有唯一性。这就好比现实生活中的地址。你要去访问一个文件就像要去拜访一个人你必须知道他在哪条街、哪个小区、哪栋楼、几号房。这个地址必须是唯一的否则系统就找不到它了。访问文件必须通过路径来定位。当前路径你默认所处的位置就叫当前路径。就像你现在站在自家客厅你的“当前路径”就是客厅。关于路径的唯一性原理我们后面还会深入展开但现在只需要记住一点在 Linux 的世界里每一个文件都有一个独一无二的“身份证地址”这就是路径。1.3 Linux 文件系统基础与路径概念接下来在说其余指令之前我们得先建立一个核心认知Linux 是如何管理文件的大家在接触 Linux 之前都是使用 Windows 的在Windows里我们有 C 盘、D 盘、E 盘。但在 Linux 的世界里没有“盘符”的概念。1.3.1 树形结构与绝对/相对路径正如我们在下图中看到的 Linux 目录结构Linux 管理文件使用的是标准的树形结构。根节点Root整个文件系统的起点是/也就是根目录。这就像一棵大树的树干所有的枝叶都从这里生长出来。路径的唯一性在这棵树中任何一个文件或者目录从根节点出发去寻找它这条路是唯一的。比如我们要找good.txt它的绝对路径就是/usr/local/good.txt。因为父节点具有唯一性所以逆向追溯回去的路径也是唯一的。这就保证了你在系统中定位一个文件时绝对不会产生歧义。图中那个复杂的树状图虽然分支很多像/bin,/etc,/home等但逻辑非常清晰。叶子节点通常是普通文件或空目录而路上的节点一定是目录。理解了这张图你就理解了 Linux 的“世界观”。1.3.2 Windows 与 Linux 的路径差异作为“互联网土著”大家对 Windows 肯定很熟悉。我们在 Windows 的资源管理器上方看到的地址栏比如C:\Users\23927这就是当前路径。这里有一个极其重要的细节需要区分这也是新手最容易踩坑的地方路径分隔符。操作系统路径分隔符示例Windows反斜杠\C:\Users\Name\DesktopLinux正斜杠//home/whb/Desktop注意在 Linux 中千万不要习惯性地去敲反斜杠\那是转义字符或者是 Windows 的用法。在 Linux 里只有正斜杠/才是用来分割目录层级的。1.4 详解 pwd 与 whoami 命令接下来我们进入实操环节。没吃过猪肉咱们先见见猪跑。这两个命令是我们在这个“树形迷宫”里不迷路的基础。1.4.1 pwd我在哪里pwd是Print Working Directory的缩写。它的作用非常简单粗暴显示当前你处在哪一个路径下。当你在终端里迷失了方向不知道自己在哪个文件夹里操作时敲一下pwd系统就会告诉你当前的绝对路径。Windows 类比相当于你看了一眼资源管理器顶部的地址栏。Linux 表现[rootbite-alicloud118]# pwd/root/118这就告诉你你现在正处于根目录/下的root目录下的118目录中。1.4.2 whoami我是谁光知道“在哪”还不够还得知道“我是谁”。whoami命令用于显示当前登录的用户名。为什么要结合这两个命令因为在 Linux 中不同的用户其默认的家目录是不同的。如果你是 root超级用户你的家目录通常在/root。如果你是普通用户比如 ran你的家目录通常在/home/ran。所以pwd 告诉你位置whoami 告诉你身份两者结合你才能完全掌控当前的操作环境。1.5 详解 cd 命令自由穿梭于目录之间cd是Change Directory的缩写。如果说pwd是眼睛那cd就是腿。它的功能是改变工作目录将你从当前位置移动到指定的位置。基本语法cd[目录名/路径]1. 切换路径的方式绝对路径切换从根目录/开始写起。例如cd /usr/local相对路径切换基于当前所在目录进行跳转。例如你现在在/root想去/root/118直接输入cd 118即可。2. 特殊符号的妙用在 Linux 的命令行操作中有几个特殊的符号能极大提高效率这也是面试和实战中的高频考点..(上级目录)代表当前目录的上一级父目录。操作cd ..场景你在/root/118想回退到/root不需要重新输一遍长路径直接cd ..回车即可。原理补充如果你执行ls -al你会看到每个目录下都有.和..两个隐藏项。.可以快速进行路径定位来执行可执行程序 代表当前目录..代表上级目录。-(上一次目录)代表上一次所在的目录。操作cd -场景这是一个“快速往返”的功能。假设你在/root和/usr/local两个目录之间反复横跳修改配置不用一次次复制粘贴路径只需交替使用cd -就能在两个目录间瞬间切换。~(家目录)波浪号~代表当前用户的家目录 (Home Directory)。操作cd ~或者直接输入cd回车。深度解析如果是root用户~等同于/root。如果是普通用户比如ran~等同于/home/ran。这就像 Windows 里的“用户文件夹”。不管你在电脑里怎么乱跑只要你想“回家”系统都知道你的家在哪里。登录系统后默认所处的路径就是家目录。1.5.1 实践总结在实际开发和运维中我们遵循以下原则相对路径通常在进行日常命令行操作、编译代码时使用因为更短、更方便。绝对路径通常在编写脚本、配置文件如 Nginx 配置、Systemd 服务文件时使用因为它是唯一的不会因为执行脚本时的当前位置不同而导致找不到文件。好的根据您提供的录音内容、图片信息以及目录结构要求我为您整理了这篇博客的后续部分。这部分内容紧接在“1.5.1 实践总结”之后保持了讲师通俗易懂、循循善诱的风格同时修正了口语中的冗余将核心知识点进行了系统化的梳理。二、文件的创建与属性初探接下来就要知道如何在 Linux 中创建文件和目录。2.1 touch 命令创建一个普通文件在 Linux 中如果我们想在当前目录下创建一个空的普通文件最常用的命令就是touch。命令格式touch文件名示例演示假设我们要创建一个名为file.txt的文件只需输入[rootbite-alicloud118]# touch file.txt执行后系统不会有任何提示Linux 哲学没有消息就是好消息此时如果你再使用ls查看就会发现file.txt已经静静地躺在那里了。同理你可以继续touch hello.txt它会立即被创建出来。touch这个英文单词本意是“触摸”、“抚摸”。在 Linux 的设计哲学里它的逻辑很有趣如果文件不存在我就“摸”出一个新文件如果文件已经存在我再“摸”它一下它就会更新它的时间戳这一点我们后续文章会深入讲。现阶段只需要记住touch后面跟文件名就是新建一个空文件。这是最基础也是最常用的用法。2.2 stat 命令与文件的本质ACM 时间当我们用touch创建了文件或者用ls -l查看文件时我们看到的只是表象。在 Linux 系统中文件 内容 属性。如果你想深入了解一个文件的“内在”比如它的大小、权限、所有者以及更详细的时间信息我们需要用到stat命令。命令格式stat文件名输出解读重点当你执行stat test.c时你会看到类似下面的输出其中有三行关于时间的信息至关重要我们称之为ACM 时间Access: 2025-09-27 10:59:46.720235732 0800 Modify: 2025-09-27 10:59:03.957774399 0800 Change: 2025-09-27 10:59:03.957774399 0800这三个时间分别代表了不同的含义是理解 Linux 文件系统的关键Access time (atime)访问时间。指文件最后一次被读取或访问的时间。比如你用cat后续文章会说查看了文件内容这个时间就会更新。Modify time (mtime)修改时间。指文件内容最后一次被修改的时间。这是最常用的时间比如你编辑并保存了文件mtime 就会变。Change time (ctime)改变时间注意不是 Create。指文件的**元数据属性**最后一次发生变化的时间。比如你修改了文件的权限chmod、所有者chown或者文件名哪怕内容没变ctime 也会更新。文件权限后面的文章也会系统性来说核心概念在 Linux 中并没有一个专门记录“文件创建时间”的属性这与 Windows 不同。通常我们所说的“文件时间”默认指的是Modify time (mtime)。2.3 Linux 的文件类型所见即所得很多刚接触 Linux 的兄弟有一个误区认为文件类型是靠后缀名如.exe,.txt来区分的。2.3.1 Linux 不靠后缀名识别文件Linux 区分文件类型不关心文件后缀在 Linux 中文件能不能执行是不是文本完全取决于它的属性权限位而不是名字。哪怕你把一个可执行程序命名为hello.txt只要它的权限允许执行它依然可以运行后缀名如 .txt, .c, .exe主要是给人看的。这就是 Linux 的“所见即所得”——看属性不看名字。我们可以通过ls -l输出的第一列第一个字符来判断文件类型d开头代表Directory目录/文件夹。例如drwxr-xr-x。-开头代表普通文件Regular File。这包括了文本文件、二进制程序、动态库等。例如-rw-r--r--。还有很多文件属性这里不展开来说前期文章先把基本框架搭起来所以当你看到test.exe和test.c时不要只盯着后缀看要看它们前面的权限位那才是它们在 Linux 世界里的真实身份。2.3.2 gcc ! Linux操作系统虽然 Linux 不靠后缀名识别文件但我们在 Linux 下编译 C 语言代码时常用的编译器叫 gcc它是靠后缀名识别文件的当我们用gcc编译.c文件时默认生成的可执行文件通常叫a.out他会识别文件后缀若不是.c文件时无法编译的。如果我们指定输出名字比如 gcc test.c -o test.exe那么生成的可执行文件就会叫 test.exe三、目录的高级操作与软件安装学会了创建文件我们自然也要学会更高效地管理目录以及如何让 Linux 变得更强大——安装软件。3.1 mkdir 的进阶用法递归创建之前我们提到过mkdir用于创建目录Make Directory。但在实际开发中我们经常需要创建一串嵌套很深的目录比如a/b/c/d。错误示范如果你直接输入mkdir a/b/c/d系统会报错“No such file or directory”。因为系统发现连父目录a都不存在它无法直接在虚空中创建子目录。正确做法使用-p选项mkdir-pa/b/c/d这里的-p代表parents父母/父目录。加上这个参数后mkdir就会变得非常智能它会检查路径如果父目录不存在就自动帮你把父目录、祖父目录一路创建出来直到生成最终的d目录。在实际工作中养成使用mkdir -p的习惯可以避免很多不必要的报错。3.2 补充命令安装 tree 查看目录结构为了更直观地看清我们刚才创建的a/b/c/d这种层级结构光靠ls是不够的我们需要一个指令——tree命令。它可以像树一样把目录结构画出来。但是tree并不是所有 Linux 发行版默认自带的。这就涉及到了 Linux 的一个重要技能软件包管理。如何安装tree这取决于你的 Linux 发行版DistributionCentOS / RHEL 系列使用 yumyuminstall-ytreeinstall表示安装。-y表示自动确认Yes不需要你在安装过程中手动输入y确认。Ubuntu / Debian 系列使用 aptaptinstall-ytree这里我不打算深入讲解yum或apt的底层原理那是后续文章的内容。现阶段大家只需要知道Linux 是一个可以通过命令行安装软件的系统。就像我们在 Windows 上双击安装包一样在 Linux 里一行命令就能把工具装好。安装完成后你就可以在终端输入tree来查看目录结构了好的根据您提供的录音内容、截图以及现有的目录结构我为您整理了博客的后续内容。这部分内容主要涵盖了文件的删除操作rm与rmdir以及对相对路径概念的深度解析。为了保持讲师的风格我在行文中保留了口语化的引导和强调重点的语气同时修正了录音中的口误如将rmgr修正为rmdir并去除了无关的直播互动话术。以下是为您生成的博客内容四、文件的删除与路径概念进阶光会新建文件可不够作为 Linux 系统的使用者我们不仅要学会“生”还得学会“杀”——也就是删除文件。如果你只建不删磁盘空间迟早会被占满。接下来我们要讲的这两个命令非常关键分别是rm和rmdir。4.1 rmdir 命令仅用于删除空目录首先我们来看rmdir。这个命令非常简单一句话就能概括它只能用来删除空目录。我们在之前的操作中在当前路径下新建了一堆文件和目录。现在我想把它们清理掉。如果我要删除一个名为dir的空目录直接输入rmdir dir回车你会发现它瞬间就被删除了。同理如果有一个dir1也是空的照样能删掉。但是如果我们尝试用rmdir去删除一个非空目录比如里面还有文件的a目录系统就会报错directory not empty。这就说明rmdir的功能非常单一且受限它只是为了进行删除空目录而存在的。在实际开发中我们很少单独使用它因为大多数时候我们要删除的目录里多少都会包含一些内容。把它放在这里讲主要是为了让大家理解 Linux 命令设计的严谨性——建目录有专门命令删空目录也有专门命令。4.2 rm 命令删除文件与目录既然rmdir删不掉非空目录那该怎么办这时候就要请出我们的主角——rm命令了。1. 删除普通文件rm命令最基本的功能是删除普通文件。比如你想删除一个编译生成的a.out文件或者一个file.txt文件直接使用rm 文件名即可。注意如果你当前是root账号系统在删除时可能会出于安全考虑询问你“是否真的要删除这个文件”。这是一种保护机制防止手滑误删重要文件普通用户就会直接删掉。2. 递归删除目录rm -r如果要删除一个包含内容的目录比如刚才那个删不掉的a目录我们需要给rm加上-r选项recursive递归的意思。命令格式rm -r 目录名这样系统就会进入目录内部把里面的文件一层一层地删干净最后再把目录本身也删掉。3. 强制删除rm -rf在实际操作中我们经常遇到那种嵌套很深、文件很多的目录。如果用rm -r系统可能会针对每一个文件都问你一遍“确定要删吗”这会让你点到怀疑人生。为了效率我们通常使用最佳实践组合拳rm -rf。-r递归删除目录及其内容。-fforce强制删除不弹出任何确认提示。警告严禁执行rm -rf /这里必须给大家做一个极其严肃的扩展说明。Linux 的文件系统整体是一颗树形结构最顶层是根目录/。如果你一时手快在终端输入了rm -rf /这意味着你要强制递归删除根目录下的所有内容。后果这会搞挂你的操作系统虽然正在运行的系统核心文件可能因为被占用而暂时删不掉但大量的配置文件、库文件、用户数据会被瞬间清空。即使系统没有立即崩溃这种“半死不活”的状态也是最危险的因为你不知道下一秒哪个服务会突然罢工。正确做法如果你想删除某个具体路径下的文件一定要写全路径例如rm -rf /home/whb/hello.txt千万不要让/孤立存在。4. 交互式删除 (rm -i) —— 安全卫士刚才提到root用户删除时会询问但普通用户默认可能不会问直接删了就找不回了。为了防止误操作我们可以主动使用-i选项即 interactive交互式。当你执行rm -i filename时无论你是不是 root系统都会停下来问你“你真的要删这个文件吗”你需要输入 y (yes) 确认或者 n (no) 取消。最佳实践建议对于新手或者在处理重要代码时强烈建议使用rm -i多一次确认少一次后悔。结语