尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

从零开始学Linux(四)

从零开始学Linux(四)
📅 发布时间:2026/7/3 13:00:20

完成了Linux环境搭建、远程连接配置和基础命令学习之后,我终于进入了系统管理层面。如果说之前学的是"怎么在Linux里走路",那现在要学的就是"怎么知道系统在干什么、怎么让它干得更好"。课程推进到了"更多的bash shell命令"这一章,内容涵盖了进程管理、磁盘挂载与空间查看、数据排序与检索、文件压缩归档等。这些命令在日常开发和运维中几乎是天天要用到的,掌握它们意味着从"会用Linux"向"管好Linux"迈出了关键一步。这篇文章就是我完整的实践记录,包含命令用法、实操截图和踩坑心得,希望能给同样在进阶路上的同学一些参考。

当程序运行在系统上时,我们称之为进程。想监测这些进程,首先需要熟悉ps命令的用法。ps命令能输出运行在系统上的所有程序的许多信息。最基本的用法就是在终端里直接敲ps,但这时候只显示了当前终端会话中运行的进程,比如bash shell本身和刚执行的ps命令自己,信息非常有限。真正有用的是带参数的版本。我用的第一个组合是ps -ef,-e参数指定显示所有运行在系统上的进程,-f参数则扩展了输出列,包含了更丰富的信息。输出依次包含UID(启动进程的用户)、PID(进程ID)、PPID(父进程ID,如果该进程是由另一个进程启动的)、C(进程生命周期中的CPU利用率)、STIME(进程启动时的系统时间)、TTY(进程启动时的终端设备)、TIME(运行进程需要的累计CPU时间)和CMD(启动的程序名称)。这个命令的输出会非常长,我通常配合grep来过滤特定的进程,比如ps -ef | grep sshd就能只查看与sshd相关的进程。除了-ef,我还试了ps aux这个组合,它显示的内容和-ef类似但列名稍有不同,提供了更多关于内存使用和CPU占比的信息,在实际使用中这两个组合各有适用场景。

ps命令虽然有用,但它只能显示某个特定时间点的信息。当我需要持续观察系统的动态变化时,top命令就派上用场了。在终端里敲top,它会启动一个全屏的交互界面,信息会持续刷新。输出的第一部分显示的是系统概况。第一行显示了当前时间、系统运行时间、登录用户数以及系统的平均负载,平均负载有三个值,分别是最近1分钟、最近5分钟和最近15分钟的平均负载,值越大说明系统负载越高,由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。第二行显示了进程概要信息,top把进程叫作任务,这里会显示有多少进程处在运行、休眠、停止或是僵化状态,僵化状态是指进程完成了但父进程没有响应,这种进程虽然不再消耗CPU资源但会占用进程表条目,如果堆积太多需要处理。第三行显示了CPU的概要信息,top根据进程的属主(用户还是系统)和进程状态(运行、空闲还是等待)将CPU利用率分成几类输出,包括us(用户空间)、sy(内核空间)、ni(低优先级用户)、id(空闲)、wa(等待IO)、hi(硬件中断)、si(软件中断)等。最后两行说明了系统内存的状态,Mem行显示物理内存的总量、已用量和空闲量,Swap行显示交换空间的状态。在top界面中我试了几个交互操作。按下大写E,内存显示的单位会在KB、MB、GB之间循环切换,这对于查看大内存机器非常方便。按下u键后,top会提示输入用户名,输入后界面只显示该用户的所有进程,在排查某个用户的资源占用问题时特别有用。按下q键即可退出top。我还试了-u参数直接在启动时就指定用户过滤,比如top -u root直接查看root用户的进程。

作为系统管理员,很重要的一个技能就是知道何时以及如何结束一个进程。有时进程挂起了,只需要动动手让进程重新运行或结束就行了,但有时有的进程会耗尽CPU且不释放资源,这时候就需要能控制进程的命令。kill命令通过进程ID给进程发信号。默认情况下,kill命令会向命令行中列出的全部PID发送一个TERM信号,TERM信号告诉进程可能的话就停止运行,这是一种礼貌的终止方式,进程可以捕获这个信号并做一些清理工作再退出。用法格式是kill [option] [PID号]。如果遇到进程无法正常结束的情况,可以添加-9参数发送KILL信号,这个信号强制内核立即终止该进程,进程无法捕获或忽略。但这个命令需要慎用,因为它不给进程任何善后机会,可能导致数据丢失或资源泄漏。实际工作中我会先尝试不带参数的kill,如果没反应再用-9。实操中我做了个小实验,在后台启动一个sleep 1000进程,然后用ps -ef | grep sleep找到它的PID,先用kill PID尝试终止,再用ps确认进程是否还在,对于某些模拟的顽固进程,我用了kill -9 PID来强制结束。

搞清楚了进程管理,接下来进入磁盘管理部分。Linux文件系统将所有的磁盘都并入一个虚拟目录下,在使用新的存储媒体(如外接硬盘、U盘等)之前,需要把它放到虚拟目录下,这项工作称为挂载。Linux上用来挂载媒体的命令是mount。默认情况下,mount命令会输出当前系统上挂载的设备列表,输出提供了四部分信息:媒体的设备文件名、媒体挂载到虚拟目录的挂载点、文件系统类型、以及已挂载媒体的访问状态(如rw表示可读写)。要手动在虚拟目录中挂载设备,需要以root用户身份登录,或使用sudo命令。手动挂载媒体设备的基本命令是sudo mount -t vfat /dev/sdb1 /mnt/usb,其中-t参数指定了磁盘被格式化的文件系统类型(如vfat、ext4、ntfs等),后面两个参数定义了存储设备的设备文件位置以及挂载点在虚拟目录中的位置。从Linux系统上移除一个可移动设备时,不能直接从系统上拔掉,而应该先卸载,命令是sudo umount /mnt/usb。这里要特别注意,如果有任何程序正在使用设备上的文件,系统将不允许卸载设备。如果在卸载设备时系统提示设备繁忙,通常是有进程还在访问该设备或使用设备上的文件。这时可用lsof命令获得使用它的进程信息,比如lsof /mnt/usb,输出会显示进程名、进程ID、所属用户、文件描述符、文件类型、设备ID、进程大小、文件Inode号、路径或链接。找到占用进程后,可以终止该进程或让其停止使用该设备,然后再尝试卸载。

查看磁盘空间方面,df命令可以方便地查看所有已挂载磁盘的使用情况。df的输出依次为设备的设备文件位置、能容纳多少个1024字节大小的块、已用了多少个块、还有多少个块可用、已用空间所占比例、设备挂载到了哪个挂载点上。为了让输出更直观,我强烈推荐加上-h参数,df -h会把输出中的磁盘空间按照用户易读的形式显示,通常用M替代兆字节,用G替代吉字节,这样一眼就能看到哪个分区快满了。df命令很容易发现哪个磁盘的存储空间快没了,但发生这种情况时要怎么办?du命令可以显示某个特定目录(默认当前目录)的磁盘使用情况,用来快速判断系统上哪个目录下有超大文件。默认情况下,du命令会显示当前目录下所有的文件、目录和子目录的磁盘使用情况,以磁盘块为单位来表明每个文件或目录的占用量,对标准大小的目录来说这个输出会是一个比较长的列表。为了让du命令用起来更方便,我用了这几个参数:du -h以人类可读格式显示大小,du -sh只显示当前目录的总大小,du -ch显示所有列出的文件或目录的总大小汇总并在最后输出一个总和行,du -h --max-depth=1限制显示的深度只看第一层子目录。这些组合起来可以快速定位大目录。

系统命令很容易输出过量的信息,Linux提供了一些命令行工具来处理大量数据。首先是sort命令,它是对数据内容进行排序,一定要掌握。需要注意的是,sort只是将数据在显示的时候进行了排序,实际上文件内部的数据并没有改变。我创建了一个测试文件来尝试各种参数,文件里包含了5、23、100、8、45、3、67、12、89、34这些数字。默认情况下,sort命令会把数字当作一个个字符来执行标准的字符排序,结果100排在了12前面,因为字符'1'小于'2',这正是字符排序的特征。用-n参数后,sort命令把数字识别成数字而不是字符,并且按数值大小排序,这样3、5、8、12、23、34、45、67、89、100就按正确的数值顺序排列了。用-r参数则可以将结果按降序输出。如果需要对多列数据按指定列排序,可以用-k参数指定列号,比如有一个包含"姓名 年龄 成绩"三列的数据文件,想按年龄排序就用sort -k2 -n students.txt。

然后是grep命令,它会在输入或指定的文件中查找包含匹配指定模式的字符的行,grep的输出就是包含了匹配模式的行,一定要掌握。我创建了一个测试文件,内容包含apple、banana、apple pie、grape、orange、Apple、APPLE、pineapple这些词。基础搜索是grep "apple" test.txt,它区分大小写,只匹配小写的apple。加上-i参数后忽略大小写,Apple和APPLE也会被匹配到。加上-v参数进行反向搜索,输出不匹配该模式的行。加上-n参数会显示匹配模式的行所在的行号。加上-c参数则只统计有多少行含有匹配的模式而不输出具体内容。加上-e参数可以指定多个匹配模式,比如grep -e "apple" -e "grape"就能同时匹配apple和grape。grep的真正威力在于支持正则表达式,比如grep "^a" test.txt能匹配所有以字母a开头的行。

最后是压缩和归档工具。gzip命令会压缩你在命令行指定的文件,也可以在命令行指定多个文件名甚至用通配符来一次性批量压缩文件。gzip largefile.txt会生成largefile.txt.gz并替换原文件,解压时用gzip -d largefile.txt.gz或者gunzip largefile.txt.gz。tar命令最开始是用来将文件写到磁带设备上归档的,但现在在Linux上已经普遍用来归档数据了。下载开源软件或数据文件之后,经常会看到以.gz或者.tar.gz结尾的压缩文件,最常用的两种解压命令是tar -zxvf filename.tar.gz和gzip -d filename.gz。tar的几个典型用法我也都试了一遍:tar -cvf usr.tar /home把home目录备份为usr.tar,tar -czvf usr.tar.gz /home在备份的同时进行压缩,tar -xzvf usr.tar.gz把压缩包还原解压,tar -tvf usr.tar | more分屏查看备份文件的内容。

整个实践过程中遇到了几个值得记录的问题。第一个是在虚拟机中ps -ef输出太多,终端直接滚动了几百行,根本找不到自己想要的进程,后来学会了用管道配合grep来过滤,一下子就定位到了目标。第二个是在测试kill -9的时候不小心用ps -ef | grep test输出中的PID去杀了一个系统进程,还好那个进程不是关键服务,不然可能导致系统异常,从此以后我每次kill之前都会仔细确认PID对应的进程名称。第三个是使用du命令时默认输出是以KB为单位的数字,一大串数字看着非常费劲,加上-h参数后直接显示为1.2G、345M这样的格式,可读性提升了不止一个档次。第四个是sort默认按字符排序的特性一开始让我很困惑,为什么100会排在3前面,后来认真看了文档才明白字符排序和数值排序的区别,-n参数从此成了我的必加项。第五个是用grep搜索时没加-i导致漏掉了大写形式的结果,排查了半天还以为数据有问题,这也提醒我在做文本搜索时要根据实际情况考虑是否忽略大小写。

回过头来看,进程管理这块有ps用来查看进程快照、top用来实时监控系统状态、kill用来终止进程,磁盘管理这块有mount和umount用来挂载和卸载设备、df和du用来查看磁盘和目录的空间使用情况,数据处理这块有sort用来排序数据、grep用来搜索文本模式、gzip和tar用来压缩和解压归档文件。这些命令覆盖了日常Linux系统管理中最核心的操作场景,从判断系统状态到控制进程,从挂载新磁盘到查看存储空间,从排序数据到检索特定信息,再到压缩和解压大型文件,基本上已经构成了一个完整的工具箱。虽然Linux的学习之路还很长,但每往前走一步,视野就开阔一点。这些命令我打算在后续的实践中反复使用,让它们真正成为肌肉记忆。希望我记录的这些命令用法和踩坑过程能给同样在进阶阶段的同学一些帮助,如果有哪里写得不准确或者有更好的操作方式,也欢迎一起来讨论,共同进步。

相关新闻

  • 如何5分钟找回丢失的QQ空间记忆:终极完整数据恢复指南
  • 8款真正离线可用的AI工具:告别订阅制,回归工作本质
  • 《系统管理必备:Bash Shell 核心命令全解+实操框架》

最新新闻

  • RTSP摄像头接入AI分析性能优化指南
  • MC6470 IMU与PIC32MZ微控制器的运动控制方案
  • windows 直接下载docker镜像压缩包
  • AI驱动的渗透测试工具PentestGPT:从原理到实战的完整指南
  • 开发者必读:Compass-CI 微服务开发规范与最佳实践
  • 纯视觉OCC技术原理与性能评测全解析

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号