news 2026/10/17 20:53:20

从场景出发掌握Linux常用命令:文件、权限、进程与日志排查实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从场景出发掌握Linux常用命令:文件、权限、进程与日志排查实战

说实话,Linux 常用命令这东西,我在不同场合反复提过很多次。每次带新人或者帮朋友排查服务器问题,翻来覆去用的也就是那么二三十条命令。但奇怪的是,很多刚接触 Linux 的朋友最容易卡住的地方,恰恰不是命令本身有多难,而是根本不知道“这条命令能解决什么问题”“什么时候该用哪条命令”,甚至把一堆命令背下来,到了真实环境里依然两眼一抹黑。

这篇文章我打算换一种方式来讲。不搞那种“一行命令配一句解释”的字典式罗列,而是直接从真实使用场景出发,把 Linux 最常用的文件操作、权限管理、进程排查、日志分析和系统诊断串成一条线。你跟着这条线走一遍,基本就能应付日常开发、部署、运维里 80% 的需求。适合刚入门的开发者、自学 Linux 的学生,也适合从 Windows 思维转过来的新手,哪怕你之前完全没碰过命令行,按这个思路练上几天,也会有明显感觉。

1. 为什么我建议你按“场景”而不是“字母表”来学命令

很多人学 Linux 命令最大的误区,就是拿着一张命令速查表从头背到尾。今天背了ls、cd、pwd,明天背cp、mv、rm,后天背chmod、chown、ps、grep……背完就忘,忘了再背。不是因为你记性差,而是因为这些命令在你脑子里是孤立的,没有挂靠在具体的任务上。

1.1 命令背后的两条主线:文件系统和进程

如果你把 Linux 命令拆开看,会发现绝大多数命令都围绕两个核心对象转:一是文件,二是进程。文件系统解决的是“数据放哪、怎么找、怎么改、怎么管权限”,进程管理解决的是“程序跑没跑、占了多少资源、出问题了怎么处理”。想明白这一层,命令的归类就自然出来了。

举个例子,ls、cd、cp、mv、rm、find、grep、cat、tail、chmod、chown、df、du这些,本质上都是文件系统这个主题下的操作。而ps、top、kill、free、ss,包括配合日志排查时用的systemctl、journalctl,都是进程和系统状态这个主题下的产物。

1.2 学命令最好的抓手是“问题”

我自己带人时的习惯是,不急着教命令,而是先抛问题。比如“我想看当前目录下都有哪些文件”“我想把一个目录打包传到另一台机器”“我想知道是哪个进程把 CPU 吃满了”,有了问题再引出对应的命令,命令的记忆就不需要刻意背了——它变成了解决问题的“工具手感”。

还有一种特别有效的学习路径,就是亲手去部署一套服务。不管是你写了一个简单的网页应用,还是搭一个数据库,部署过程中必然要经历文件移动、权限调整、日志查看、进程启停、端口检查这一整套流程。走完一遍,这些命令基本就刻在脑子里了。

1.3 先学会看帮助,再谈其他

Linux 下有个天然的学习资源,就是命令自带的帮助文档。很多人遇到不会的命令第一反应是上网搜,其实先执行man 命令名或命令名 --help往往更快,而且信息更准确。

man的输出虽然有时候很长,但你只需要抓住几个关键段:命令语法(SYNOPSIS)、参数说明(OPTIONS)、示例(EXAMPLES)。我见过很多新人被 man 的长篇大论吓到,其实完全不用从头看,先跑一遍命令 --help拿到简版说明,遇到某个参数不懂再去 man 里查细节,效率高很多。

还有个小技巧:不确定某个参数是什么意思,可以在man页面里直接输入斜杠/加关键词搜索,比如/recursive,回车就能定位到相关位置,按n跳到下一个匹配项。这比鼠标滚轮慢慢翻要省事得多。

2. 文件与目录操作:使用频率最高的核心命令

文件操作是 Linux 使用里最基础也是最频繁的部分。别小看这几个命令,参数用得好不好,直接决定你工作效率高低。

2.1 先搞清楚自己在哪:ls、cd、pwd

pwd就一个作用,告诉你当前所在的绝对路径。刚上手时多用pwd,能帮你减少“我在哪”的迷茫感。

cd是切换目录,除了常见的cd /etc、cd ~回到当前用户家目录、cd -回到上一次所在目录之外,我更常用的是cd ..返回上一级。你们知道吗,cd -这个用法在排查问题时特别好用——你从很深的一个目录切到另一个目录看配置,看完想回去,直接cd -就回来了,不用重新打一长串路径。

ls的常用组合我给你列一下,基本都是日常高频:

  • ls:平铺列出当前目录下文件名。
  • ls -l:列出详细信息,包括权限、属主、大小、修改时间。
  • ls -a:显示隐藏文件(以.开头的文件)。
  • ls -lh:把文件大小显示为人类易读格式,比如 1.5K、230M,这个我基本每次都会带-h。
  • ls -lt:按修改时间排序,最新的在最上面,排查“哪个文件刚被动过”时很有用。

我看很多人会忽略ls -l输出的第一列。拿-rw-r--r--来说,第一位-表示这是普通文件(如果是d就是目录,l是软链接),后面九位分成三组,分别对应属主、属组、其他人的权限。看懂这个,后面学chmod就顺理成章了。

2.2 文件复制、移动和删除的隐藏坑

cp、mv、rm这三条命令看起来很直白,但坑都不少。

先说cp。日常用cp 源文件 目标路径没问题,但有几种情况要注意。复制目录必须加-r,不然会报错;想要保留文件的属性(比如时间戳、权限),建议用cp -a;如果目标路径已经存在同名文件,默认会直接覆盖,某些重要场景建议加-i参数让它覆盖前先询问一下,避免手滑。

mv我倾向于把它理解成“移动或重命名”。在同一个文件系统内,mv只是修改一下路径记录,速度极快;但跨文件系统移动时,它实际上会经历“复制到目标→删除源文件”的过程,大文件会有明显耗时。记得有一次我在某台机器上把一个 20G 的日志文件从数据盘mv到系统的/tmp,结果卡了很久,就是因为这两个分区属于不同的文件系统。

rm是三条命令里最需要谨慎对待的。我跟新手反复强调:不要轻易用rm -rf,尤其不要在根目录或者路径写错的情况下用。平时我会先用ls确认自己要删的路径,再用绝对路径去删(比如rm -rf /home/某个用户/某个目录),而不是在某个不确定的路径下用相对路径操作,以免手滑删错地方。一些关键目录的删除操作,至少做到删之前心里有数。

2.3 找文件这件事,find、grep、locate 各有分工

找文件是另一个高频需求。我的习惯是:按文件名找用find,按文件内容找用grep。

find的写法是find 路径 -name "名字"。比如find /opt -name "*.conf"就能找出/opt下所有.conf结尾的文件。还可以用-mtime按修改时间找,比如find /var/log -mtime -7找出 7 天内有改动的文件,排查日志是否更新时很好用。

grep是文本内容过滤高手。常用参数有-i忽略大小写、-n显示行号、-r递归搜索目录。找工作里最经典的用法是grep -r "关键字" /etc/,一条命令就把整个目录下包含该关键字的文件和行都列出来。比如你想知道某个端口是哪个配置在控制,直接搜配置目录,效率非常高。

locate走的是系统预建索引,速度极快,但新创建的文件索引可能没更新,需要先执行updatedb刷新。平时找文件我优先用find,因为它实时扫描,结果准确。

2.4 查看文件内容,别只会用 cat

cat适合查看小文件,一屏能放下就用它。文件一大,cat会把内容哗啦一下全刷出来,想往上翻都困难。这时候用less就舒服多了:按空格翻页、按/搜索、按q退出,还能用G跳到文件末尾。

tail -f是我盯日志文件最常用的命令,没有之一。它的作用是持续跟踪文件新增内容并实时打印出来,部署服务、排查报错时基本离不开。比如你启动了一个服务,日志写到/var/log/app.log,开一个终端跑tail -f,启动过程出现任何异常都能第一时间看到。tail -n 100则是查看最后 100 行内容,日志文件特别大时比cat高效得多。

head -n和tail -n是对应的,从文件头开始看指定行数。偶尔我会用sed -n '20,30p' 文件来查看第 20 到第 30 行之间的内容,既有行号定位,又不会整个文件刷屏。

3. 用户、权限与磁盘:系统管理必须跨过的三道坎

到了这一层,你就从一个单纯“使用命令的人”变成了“管理这台机器的人”。用户和权限的理解,直接关系到系统安全策略能不能落地,而磁盘知识则能帮你在一台机器“写不进东西”时快速找到根源。

3.1 用户和用户组:理解 Linux 权限的前提

Linux 里每个文件都有“属主”和“属组”,默认情况下,文件创建者就是属主。但对于一台要给多人使用的服务器,你不可能让所有人都用 root 操作,所以需要给不同的人分配不同用户。

创建用户用useradd或adduser,后者在部分发行版里会更友好地引导设置密码。查看当前登录用户用whoami,查看用户所属组用id 用户名。切换到其他用户用su - 用户名,临时用管理员权限执行单条命令用sudo。

我在实际使用中强调一点:日常操作尽量少用 root。上服务器第一件事是创建一个普通用户,加入wheel或sudo组,这样既满足日常管理需要,又不会因为 root 的权限太大造成误操作。很多安全事故,追根溯源都和“直接用 root 跑服务”有关。

3.2 权限位 rwx 的底层逻辑

以文件权限为例,rwx分别表示读(4)、写(2)、执行(1)。我说的数字对应关系,是chmod命令的基础。比如chmod 755 文件,意思是属主对文件具备全部权限(4+2+1=7),属组成员和其他人只具备读和执行权限(4+1=5),这是一个非常常见的可执行文件权限设置。

chown用来修改文件属主和属组,比如chown zhangsan:staff 文件,就把文件的属主设为 zhangsan、属组设为 staff。需要在目录上递归生效时加-R。

关于目录权限,我想多提一句,因为很多新手在这里栽过跟头:目录的“执行权限”和文件的意义不同,它表示能否“进入”这个目录。所以一个目录如果只有读权限而没有执行权限,你是ls不了里面内容的;反过来,只有执行权限没有读权限,你能进去但列不出目录项。理解了这一点,那些“明明有权限却访问不了”的报错就不再神秘了。

3.3 磁盘占用:df 和 du 的区分

df -h查看文件系统整体占用情况,输出里能看到每个挂载点用了多少、剩多少,-h把数字转成 G/M 这样易读的格式。服务器磁盘告警时,第一反应就是执行df -h,确认是哪个分区满了。

du -sh 目录查看某个目录的总大小。du -sh *能列出当前目录下所有子目录和文件各自占用的空间,排查“哪个目录把磁盘塞满了”特别好用。我跑排查时通常这样:先df -h锁定分区,再du -sh /分区路径/*找最大目录,一层一层往下钻,很快就能定位到大文件所在的路径。

sort在这个场景里常作为配合命令出现,比如du -sh * | sort -h按大小排序,把最大的一眼排在最后。这个组合我用的频率很高。

3.4 挂载与开机自动挂载

新磁盘要使用,得先分区、格式化,再挂载到某个目录。日常使用中用blkid查看块设备的 UUID 和文件系统类型,用mount 设备 挂载点临时挂载。开机自动挂载需要把信息写入/etc/fstab,里面每一行格式大概是“设备UUID 挂载点 文件系统类型 参数 是否备份 是否检查”。

我想给你一个提醒:修改/etc/fstab之前,好习惯是先备份原文件,比如cp /etc/fstab /etc/fstab.bak。如果改坏了导致无法启动,用安装介质进去把备份改回来就行。这个文件一旦写错,系统大概率起不来,我身边同事踩过不止一次。

4. 进程与系统状态:排查问题的核心手段

文件搞懂了,接下来就是进程。你需要知道自己这台机器上到底在跑什么、哪个程序出了问题、端口有没有正常监听。这些技能在服务上线和故障处理时是救命的。

4.1 ps 和 top:一个是快照,一个是动态视图

ps -ef是我查看进程信息的首选,它把所有用户进程列成一堆多列的表格,有 PID(进程号)、PPID(父进程号)、CPU、内存、启动命令等信息。想找某个具体进程,配合grep就行:ps -ef | grep 关键字。

top是一个会实时刷新的进程视图,默认按 CPU 占用从高到低排列。输入top后按P按 CPU 排序,按M按内存排序,这两个快捷键是排查资源占用最常用的操作。top顶部能看到整体负载、CPU 使用百分比、内存以及交换分区的使用情况,比单看进程列表信息量大得多。

4.2 kill:进程退出的最后手段

kill PID默认发送 TERM 信号,让进程“体面地退出”。如果进程卡死不响应,可以用kill -9 PID强制终止。但我要提醒:kill -9是最后一招,因为它不给进程任何清理机会,可能导致数据不一致或者留下临时文件。能用默认方式尽量用默认方式,实在不行再上 -9。

杀进程之前,最好先用ps -ef | grep确认你要杀的就是目标进程。我曾经见过同事在 A 服务器上kill -9一个 PID,结果那个 PID 在另一台机器上对应的是重要服务,误杀之后服务直接挂掉。听起来像低级错误,但操作一紧张真的会发生。

4.3 看系统资源,不只是 free

free -h看内存和交换分区使用情况,注意要看available这一列,它才代表实际可用的内存,而不是简单地看free列。Linux 系统会把空闲内存用作缓存,所以 free 列偏小是正常的,没你想的那么严重。

CPU 负载可以用uptime看,它输出的一分钟、五分钟、十五分钟负载,能粗略反映系统近期繁忙程度。更细的 CPU、内存、磁盘读写统计,可以用vmstat和iostat,不过这两个命令在部分系统上需要额外安装。排查性能问题时,我一般先看top定位到进程,再用vmstat看系统整体层面有没有明显瓶颈。

4.4 网络排查的基本盘

服务部署完成后,最关心的就是端口有没有监听、外部能不能访问。查看监听端口用ss -lntp:-l只看监听状态,-n不解析服务名直接显示端口号,-t只看 TCP,-p列出对应的进程信息。老一点的机器可能用netstat -lntp,功能类似,但ss是更现代的工具,信息更全。

外网连通性测试用ping,但很多云服务器禁 ping 不代表服务有问题。真正测试端口通不通,可以用telnet 目标IP 端口,如果连接被拒绝或者超时,说明端口不通。还有更简单的curl -v 目标地址,能看到详细的 HTTP 交互过程,排查 Web 服务时信息量很大。

网络排查我建议遵循一个顺序:先看本机端口(ss),再测试本机回环(curl 127.0.0.1),最后才从外部访问。一层层排除,最不容易绕弯子。

5. 实操过程与排查套路

命令拆开讲容易显得零散,所以我给你整理三条完整流程,你可以照着走一遍,感受一下命令是怎么串联起来干活的。

5.1 从零开始部署一个服务的标准流程

假设你拿到了一台全新的 Linux 服务器,想在上面跑一个 Web 应用。大致流程是这样的:先确认系统版本cat /etc/os-release,再创建一个普通用户用于日常管理,useradd加设置密码,然后安装基础工具。

应用文件放到指定目录后,给目录和文件设置合理的属主权限:chown -R 用户名:用户组 目录,避免服务进程因权限不足读不到文件。启动服务用发行版的系统服务命令,启动后立刻用ss -lntp确认端口在监听,再用curl在本地访问一次,验证服务确实响应了。

这一步跑通,一个服务的基本部署闭环就完成了。你回头看,这里涉及的useradd、chown、ss、curl就是前面那些命令的典型组合。

5.2 日志排查的完整套路

排错时日志是最直接的帮手,我的套路通常是:先用tail -n 200 日志文件看最近日志,找到报错关键行。如果日志在持续刷新,用tail -f挂在那里实时观察。需要根据某个关键词过滤,就grep -n "关键字" 日志文件,配合head、tail截取上下文。

我曾经处理过一次数据库连接数被打满的问题,就是通过grep "too many connections"找到错误关键字,再统计出现次数确认规律,最后通过ss -ant | grep 3306分析连接来源,一步步把问题缩小到具体调用方。

日志文件通常增长很快,这里必须提醒你:用logrotate做好日志轮转,避免单个日志文件无限膨胀撑爆磁盘。很多线上事故,根因就是日志把磁盘写满了,服务直接停止响应。这一点太常见了,值得牢记。

5.3 排查误区与执行习惯

我最想强调的执行习惯有三个:

第一,删文件、改配置前先备份。备份不一定多复杂,一条cp xxx xxx.bak就够了,但关键时刻能救命。

第二,用绝对路径操作重要文件。相对路径会受当前目录影响,一旦cd到了意外位置,后面基于相对路径的所有操作都可能偏离预期。

第三,定时用history回顾自己的操作。Linux 的history命令会记录你用过的所有命令,发现自己输入过的完整历史后,既能复盘也可以在某些情况下确认是否误操作。

6. 常见问题与排查技巧实录

这一部分我整理几个在真实环境里反复遇到的问题,以及对应的排查思路,你可以直接当速查表用。

6.1 “明明有权限却写不进去”是怎么回事?

遇到这类问题,第一步不是怀疑系统出 bug,而是确认你当前登录的用户身份。执行whoami看看自己是哪个用户,再ls -l看目标文件或目录的属主和权限位。很多时候是文件属主是 root 而你用普通用户登录,又没有 sudo 权限,自然写不进去。

还有一种情况是目录权限没问题,但目录所在文件系统被挂载为只读了。执行mount | grep 挂载点,如果输出里有ro字样,说明这个分区是以只读方式挂载的。这种情况常见于文件系统有异常自动进入了只读保护模式,需要先修复底层问题。

6.2 磁盘明明没满,却提示空间不足

磁盘空间不足不只是df -h看到的容量满了,还可能是 inode 耗尽了。inode 是文件系统记录文件元数据的结构,每个文件或目录都会占用一个。文件特别多但单文件都很小的情况下,可能出现容量还有富余、inode 却耗尽的问题。

排查用df -i,看到IUsed%接近 100%,基本就是 inode 满了。解决办法通常是清理无用的缓存文件、缩小文件数量,比如删除一些没用的临时小文件。这个问题在跑大量缓存文件的服务器上很常见,别只知道查大文件。

6.3 进程明明杀掉了,端口还是被占用?

你说kill -9 PID之后,ss一看端口依然被占用,这是怎么回事?常见原因是:你杀掉的进程有子进程还活着,或者该端口被其他进程占用了。这时候用ss -lntp | grep 端口号再查一遍,拿到具体的 PID 再处理。

如果确认父进程和子进程都清理干净了,端口依然显示被占用,可能连接处于 TIME_WAIT 状态。TCP 连接释放后的 TIME_WAIT 会持续一段时间,这是正常现象,等待片刻或者调优内核参数就能缓解,不用过度惊慌。

6.4 网络排查怎么快人一步?

最快的排查办法是“由近及远”。先ping 127.0.0.1确认本机协议栈正常,再ping 网关确认局域网通不通,然后ping 外网域名确认公网连通性。每一跳都是逐步缩小范围。

对外提供服务时,外网访问不通,优先查云平台或网络设备的安全策略,其次查本机防火墙和端口监听。很多新手一上来就怀疑是程序问题,其实程序可能跑得好好的,就是防火墙没放行端口而已。在排查之前,先回忆一下最近有没有做过防火墙或安全组变更,这条线索往往比从头检查效率高得多。


最后分享一点个人的体会。Linux 命令的学习曲线确实不是一条直线,刚开始会觉得很碎片化,今天学明天忘。但我带过不少人后发现,只要真正独立处理过一两次故障,或者完整部署过一套服务,那些命令自然就记住了。命令不是靠背的,是靠在真实环境里一遍遍用出来的。建议你拿到一台自己可以折腾的实验机器,放心去试,勇敢地敲,就算把系统弄到起不来也正好练习一下如何修复。经历一次“从慌乱到搞定”的过程,你对 Linux 命令的理解会往前走一大截。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 15:12:14

PyCharm快捷键高效编程:从编辑导航到重构调试的完整指南

写代码这件事,做久了就会发现,卡住你的往往不是某个语法写不出来,而是手速跟不上脑速。我见过不少同事,PyCharm开了一堆窗口,切文件用鼠标点,改代码用鼠标选,重构靠肉眼找,一天下来代…

作者头像 李华
网站建设 2026/10/17 8:26:05

Java SSM与Flask协同构建线上旅游体验系统:从架构到实战

线上旅游体验系统这个题目,这几年在不少课程设计和毕业设计里都能看到。我最近刚好完整实现了一个基于JavaSSMFlask的版本,从数据库设计到后端接口再到前端页面全部自己搭,前后折腾了大概三周。简单说,这套系统把景点展示、线路规…

作者头像 李华
网站建设 2026/10/13 17:55:17

Spring Boot餐厅点餐系统开发实战:数据模型、订单状态与并发避坑

简介:基于Spring Boot的餐厅点餐管理系统毕业设计论文参考文档,面向需要完成Java方向毕业设计或课程论文的高校学生,解决论文结构规划、技术选型论述与写作表达方面的难题。内容覆盖摘要、目录、绪论、开发环境、需求分析、系统设计等核心章节…

作者头像 李华
网站建设 2026/10/16 14:22:24

轻量机房管理系统实战:从数据建模到自动化运维

简介:机房管理系统数据库设计完整项目资料,面向高校数据库课程设计学生及需要开发机房管理系统的开发者。资源围绕机房信息、设备信息、用户信息、预约信息、使用记录五个核心实体展开,涵盖ER模型设计、关系模式转换、范式规范化、索引优化与…

作者头像 李华
网站建设 2026/10/15 5:01:05

CJ60lib 实战:MFC 老项目界面换肤与避坑指南

简介:CJ60lib是一套面向MFC开发者的经典界面库资源,适合具备一定C与Windows编程基础、希望快速搭建专业桌面应用界面的开发者使用。它封装了对话框、工具栏、菜单、状态栏等常用组件,并提供控件扩展、布局管理、资源加载、事件处理及托盘图标…

作者头像 李华
网站建设 2026/10/17 18:10:43

JSP SSM生鲜超市进销存系统:从数据库设计到保质期预警实战

简介:一套面向毕业设计场景的JSPSSM生鲜超市进销存管理系统完整源码包,适合计算机相关专业学生用于课程设计、毕业答辩或项目二次开发。系统覆盖商品信息管理、基本档案管理、进货采购管理、销售出库管理四大模块,前端采用JSP,后端…

作者头像 李华