从零开始学Linux(三)

发布时间:2026/7/2 11:03:48
从零开始学Linux(三) 完成了虚拟机的安装和远程连接配置之后我的Linux学习之旅终于进入了最核心的操作环节。前两天的实践中我已经通过Xshell成功连接到了虚拟机看着终端里那个不断闪烁的光标说实话既兴奋又有些不知所措。图形界面的鼠标点按在这里完全失效了一切操作都要靠敲击键盘输入命令来完成。但我知道这正是Linux的精髓所在几乎所有的服务器管理、开发部署都要在命令行环境下进行早一天熟悉就早一天掌握主动权。于是借着课程进度我翻开了Linux基础命令这一章从最基础的文件系统结构开始逐步把日常操作需要用到的命令都过了一遍。这篇文章就是我整个学习过程的完整记录既包含了每个命令的用法和参数也记录了我在操作中遇到的错误和排查思路。在开始敲命令之前我觉得有必要先理解Linux是怎么组织文件的。这和Windows有本质的区别Windows为每个物理磁盘分配一个盘符比如C盘、D盘每个盘符都有自己的根目录访问文件的时候要先指定盘符再指定路径。而Linux采用了一套完全不同的虚拟目录结构整个系统只有一个根目录用正斜线/表示所有的文件和目录都从这根目录开始层层展开。不管物理硬盘有多少块它们都会通过挂载点的方式整合到这一个统一的目录树中比如第一块硬盘可能挂载在/根目录下第二块硬盘挂载在/home下用户访问/home目录时实际上是在访问第二块硬盘的数据但从路径上看完全察觉不到底层的物理差异。这种设计让文件路径变得非常清晰和一致不管系统里接了多少存储设备路径的写法永远是从根目录开始的绝对路径或者相对于当前所在位置的相对路径。登录系统之后每个用户都会被分配一个主目录通常位于/home/用户名用波浪号~来简写表示这就是我们每次打开终端默认停留的地方。理解了文件系统的结构之后第一个要掌握的就是如何在目录之间切换这要用到cd命令。cd的全称是change directory它接受一个路径参数可以是绝对路径也可以相对路径。绝对路径是从根目录/写起的完整路径比如cd /etc/nginx就是直接跳转到nginx的配置目录无论当前在什么位置都能准确到达。相对路径则是相对于当前目录的写法比如当前在/home/user执行cd Documents就会进入/home/user/Documents这里隐含了一个前提就是Documents是当前目录下的子目录。相对路径中有几个特殊符号需要牢牢记住单点符.代表当前目录本身双点符..代表父目录也就是上一级目录波浪号~代表自己的主目录减号-代表上一次所在的目录。使用cd ..返回上一级是最常用的操作之一而cd -则在两个目录之间来回切换时特别方便比如从/var/log切换到/etc后想再回到/var/log输入cd -就可以了shell会记住你从哪里来的。掌握了这些在目录树里穿梭基本上就没有什么障碍了。知道了怎么切换目录接下来自然需要知道当前目录下到底有什么东西这就是ls命令做的事情。ls是list的缩写不加任何参数的时候它会列出当前目录下的所有非隐藏文件和目录默认按字母顺序排列。但这个输出太简略了实际使用中几乎总是会搭配各种参数来获得更详细的信息。-l参数是我用得最多的一个它会产生长列表格式的输出每一行代表一个文件或目录从左到右依次显示文件类型、权限字符串、硬链接数量、所有者用户名、所属组名、文件大小以字节为单位、最后修改时间以及文件或目录的名称。文件类型的标识位在第一列的第一个字符如果是-表示普通文件d表示目录l表示符号链接文件c和b分别表示字符设备和块设备。权限字符串由九位字符组成每三位一组分别代表所有者、所属组和其他用户的读、写、执行权限r表示可读w表示可写x表示可执行如果某个权限被禁止则显示为-。除了-l-a参数也非常有用它会把所有以点号开头的隐藏文件也显示出来Linux中大量配置文件都以隐藏形式存放在用户主目录下比如.bashrc、.profile等不加-a根本看不到它们。把这两个参数组合起来写成ls -al就能一次性获得最完整的目录信息。如果要查看子目录里的内容可以使用-R参数进行递归列出它会逐层深入地展示整个目录树下的所有文件和目录对于了解一个陌生项目的结构非常有帮助。当目录里的文件特别多而我只想找特定的一部分时可以用通配符来构建过滤器问号?匹配任意单个字符星号*匹配零个或多个字符方括号[]用于指定字符范围感叹号!用来排除匹配项。比如ls *.txt列出所有文本文件ls file?.log匹配file1.log、file2.log等ls [a-c]*列出所有以a、b或c开头的文件和目录这些通配符极大提升了文件筛选的效率。能够看到文件之后接下来就要学习如何对文件进行各种操作了。创建新文件最简单的方式是touch命令它后面跟一个文件名如果该文件不存在就会创建一个大小为零的空文件如果文件已经存在则只会更新它的访问时间和修改时间而不会改变内容。复制文件用cp命令格式是cp 源文件 目标文件如果目标文件已经存在cp会直接覆盖而没有任何提示这是非常危险的。所以我在实际操作中几乎都会加上-i参数这样当目标文件已存在时shell会询问是否覆盖输入y确认或输入n取消可以有效防止误覆盖重要文件。cp命令也可以复制整个目录但需要加上-r或-R递归参数否则会报错跳过目录。移动文件和重命名文件使用的是同一个命令mv它本质上做的事情是把文件从一个位置挪到另一个位置如果目标和源在同一个目录下只是名字不同那就实现了重命名的效果。mv命令同样支持-i参数来进行覆盖前的确认而且它在移动整个目录时不需要像cp那样加递归参数直接就能处理。删除文件用rm命令我必须要提醒自己和其他初学者的是Linux的shell里没有回收站的概念被rm删除的文件不会像Windows那样被临时存放而是直接从文件系统中移除数据恢复的难度极大。因此我在执行删除操作时总是先加上-i参数确认一遍确认无误之后再删。如果要删除的是目录rm默认是不允许直接操作的需要加上-r或-rf参数递归删除目录及其所有子内容其中-f表示强制删除且不给出任何确认提示这是一个非常强大的参数使用前必须三思而后行我曾经在练习中不小心用rm -rf *删除了当前目录下的所有文件那种瞬间消失的感觉让人记忆犹新从那以后我对这个命令始终保持着敬畏之心。创建和删除目录也有专门的命令。mkdir用来创建新目录最基本的用法就是mkdir 目录名但如果要创建的多级目录中某些父目录并不存在直接mkdir会报错。这时候需要加上-p参数它会自动创建路径中缺失的所有中间目录比如mkdir -p project/src/main/java一下子就能把整个嵌套目录结构建好省去了逐层创建的繁琐。删除空目录用rmdir命令这个命令比较挑如果目录里面还有任何文件或子目录它会拒绝执行并报错提示目录非空。要删除非空目录要么先用rm把里面的文件清理干净再用rmdir要么直接用rm -r一步到位我个人的习惯是优先采用前一种方式因为分步操作给了自己多一次检查的机会。Linux里还有一种特殊的文件操作叫做链接分为硬链接和软链接也叫符号链接。硬链接通过ln 源文件 硬链接名来创建它的本质是在文件系统中为同一个数据块再增加一个入口执行ls -li查看inode编号时会发现源文件和硬链接文件拥有完全相同的编号这意味着它们指向的是同一份物理数据。硬链接的一个显著好处是删除源文件或删除任意一个硬链接都不会影响数据的完整性只有当所有的硬链接和源文件都被删除后数据块才会被真正释放。但硬链接有限制它不能跨文件系统创建也不能为目录创建硬链接。软链接则通过ln -s 源文件 软链接名创建它存储的是源文件的路径信息类似于Windows下的快捷方式因此它的inode编号和源文件不同文件类型标识为l。软链接可以跨文件系统也可以指向目录灵活性更高。但它的缺点是如果源文件被移动或删除软链接就会失效在终端中显示为红底白字的闪烁样式这时候需要用ls -l查看它的指向路径根据情况决定是恢复源文件还是删除这个失效的链接。查看文件内容有好几种工具可选根据文件大小和查看需求来选择。cat命令是最直接的它把整个文件内容一次性全部输出到屏幕上适合查看内容较短的配置文件或文本文件加上-n参数可以为每行显示行号-b参数则只给有实际文本的行编号而跳过空白行。对于内容较多的日志文件或数据文件cat会让内容像流水一样哗哗地滚过屏幕根本来不及看这时候就要用分页工具了。more命令会一页一页地显示内容每显示满一屏就暂停下来屏幕底部会显示当前的进度百分比按空格键翻到下一页按回车键逐行向下滚动按q键随时退出。less命令是more的增强版它的设计理念甚至被称为less is more因为它比more提供了更多的功能。less允许按上下箭头逐行滚动按PageUp和PageDown翻页按斜杠/加上关键字可以在文件中向前搜索按问号?加上关键字则向后搜索这些功能让less成为了我查看大型文件时的首选。如果只关心文件的开头或结尾部分head和tail命令就派上了用场。head默认显示文件的前十行tail默认显示末尾十行通过-n参数可以指定显示的行数比如head -n 20 access.log显示前20行tail -n 50 error.log显示最后50行。tail还有一个非常实用的-f参数它会持续监视文件末尾并实时输出新增的内容这在排查系统问题时特别有用比如在另一个终端启动一个服务程序让日志不断写入某个文件然后用tail -f实时观察日志输出服务崩溃或者报错都能第一时间看到。在实操过程中当然免不了碰到各种错误我把遇到的典型问题都记录了下来。第一个是权限不够的报错当尝试用cd进入/root目录或者用cat查看系统日志时经常会看到Permission denied的提示这是因为普通用户对系统核心目录没有读取权限。解决方法有两种要么切换成root用户执行su -要么在命令前加上sudo临时提权但这需要当前用户具有sudo权限。第二个是路径写错的问题Linux的命令行对大小写敏感Documents和documents是完全不同的两个目录新手很容易在这里栽跟头。养成良好的Tab补全习惯可以大幅降低这类错误输入路径或文件名的前几个字符后按一下Tab键shell会自动补全剩余部分如果匹配项不止一个再按一次Tab就会列出所有候选这个功能不但能避免拼写错误还能加快输入速度。第三个是误删文件的惨痛教训有一次我本来想删除test.txt但因为手快输入了rm -rf test/结果把整个test目录都删掉了。从那以后我对任何删除操作都改用带-i的交互模式虽然每次多按一个y确实麻烦了一点但多出来的安全性完全值回这点时间成本。第四个是在创建硬链接时碰到了Invalid cross-device link错误查阅资料之后才知道硬链接不能跨越不同的文件系统分区这时改用了软链接就解决了问题。这次Linux基础命令的学习和实践花了我一整天的时间从刚开始对着终端发呆不知道从何下手到后来能够熟练地在目录之间切换、查看文件、进行复制移动和删除操作进步是肉眼可见的。我把这些命令按照功能分成了几个类别在脑海中形成了自己的知识框架导航类的有cd和pwd查看类的有ls、cat、more、less、head和tail文件操作类的有touch、cp、mv、rm目录管理类的有mkdir和rmdir链接类的有ln和ln -s帮助类的有man和--help。在后续的学习中我还会接触到权限管理、进程控制、网络配置和Shell脚本等更深入的内容但至少现在我已经有了一个稳固的起点以后每次进入终端看到那个美元符号$提示符的时候心里是踏实的因为我知道它背后是可控的、可操作的一个完整世界。希望我记录的这些命令用法和错误排查过程能给同样在入门阶段的同学一些帮助如果有哪里写得不准确或者有更好的操作方式也欢迎一起来讨论共同进步。