news 2026/10/3 1:10:39

Linux常用指令实战指南:从场景出发,避开常见坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux常用指令实战指南:从场景出发,避开常见坑

说实话,很多朋友让我推荐Linux学习资料时,上来就问“Linux常用指令有哪些”,然后甩给我一张密密麻麻的命令大全截图。但我做了这么多年运维和开发,最深的体会是:只背命令清单是没用的,真正值钱的是理解每条指令在什么场景下该用、用的时候要注意什么坑。这篇文章不想做成那种复制粘贴的命令字典,而是挑出我日常工作中使用频率最高、且最容易用错或理解偏的指令,从“为什么这么用”的角度拆开讲透。无论你是刚进运维岗的新人、准备面试的大学生,还是被领导临时抓去处理线上服务器问题的后端开发,这篇文章都适合你按顺序读一遍,能帮你省下不少试错时间。

1. 文件和目录操作:LS、CD、CP这些基础指令背后的判断逻辑

1.1 路径处理:最容易埋雷的相对路径与通配符

很多人觉得ls和cd简单到不值一提,但线上事故里相当一部分就栽在这两个“简单指令”的组合使用上。核心要理解的是绝对路径和相对路径的区别,以及通配符(*、?、[])会被Shell在命令执行前展开。

我举个真实踩坑的例子。某次清理日志脚本,原本要删除7天前的日志文件,我写的命令是:

rm -rf /data/logs/*.log

看起来没问题对吧?但当天线上服务日志目录下有一个软链接叫current.log,指向另一个目录下的活动日志文件。这条命令执行完,活动日志也被删了,服务瞬间写不了日志。为什么会这样?因为rm -rf遇到软链接时,删的是软链接指向的目标文件,而不是软链接本身。这个坑的核心在于:写生产环境命令前,先用ls -l看清楚目标路径下有没有软链接、有没有子目录,再用echo或ls把通配符展开后的结果列出来确认一遍。

路径处理还有一个高频场景是脚本里拼接路径。强烈建议用$(pwd)或$HOME这样的命令替换来获取绝对路径,而不是硬编码/home/user/...。因为你的脚本可能在别的机器上跑,硬编码路径一换环境就炸。

1.2 查看文件的正确姿势:Tail看日志、Less看大文件、Cat看小文件

cat命令是新手最爱,但生产环境千万别用cat查看大文件。一个几百MB的日志文件,cat直接输出几万行,终端直接卡死,还会把SSH会话拖垮。正确的做法是:

  • 看日志最新内容用tail -f或tail -100
  • 看大文件但需要翻页搜索用less(进入后按/搜索关键字,按G跳到最后,按g跳到开头)
  • 文件确实很小才用cat,或者用cat -n带行号查看配置

这里要特别提一个细节:tail -f在文件被轮转(logrotate)之后会停止输出,因为文件描述符变了。现在大部分服务器上建议用tail -F(大写),它能在文件被轮转后自动重新打开新文件继续跟踪。本地调试用-f没问题,但线上长期挂屏观察日志,务必用-F。

less这个工具还有个容易被忽略的快捷键:按v可以直接进入vi编辑器编辑当前文件,按F可以进入类似tail -f的实时跟踪模式,按q退出。排查问题的时候,less + F组合能代替tail -f + grep的很多操作,效率高不少。

1.3 文件查找:Find和Locate的选择策略

find是检索文件的神器,但很多人只会用最基本的find / -name "xxx",这其实是最慢且最容易出问题的方式。性能优化和实用性上有几个值得关注的维度:

  • find / -name会在整个系统里扫一遍,非常慢。更合理的策略是用find /data /home /var -name限定范围
  • 按时间筛选很重要,排查问题经常要问“最近改了哪些文件”,命令是find /etc -mtime -1(24小时内修改过的文件)
  • 按类型筛选:find / -type f只查普通文件,find / -type d只查目录,配合-name效率非常高
  • 删除查出来的文件前,一定要先find /xxx -name "*.log" | head -20看看结果对不对

相比之下,locate基于数据库查询,速度快到飞起,但它的数据库默认每天更新一次,刚创建的文件查不到。如果你接受这个时效性延迟,locate是个不错的补充工具。很多系统默认没装,用包管理器装一下即可。

2. 进程管理:PS能看到的信息远比你想的多,Kill也别只会Kill -9

2.1 PS aux输出里每个字段的实用解读

面试考Linux,ps aux是必考题。但光背出“显示所有进程”没有意义,关键是看懂各字段并从中发现问题。ps aux输出里:

  • USER:进程由哪个用户启动,如果root用户跑了个名字看起来像业务服务的进程,要留个心眼
  • PID:进程号,配合kill使用
  • %CPU和%MEM:CPU和内存占用百分比,排查性能问题第一眼就看这两列
  • STAT:进程状态,S是休眠、R是运行、Z是僵尸、D是不可中断的磁盘等待
  • TIME:进程累计消耗的CPU时间,如果这个值非常大但%CPU不高,说明这个进程存在很久了,可能是泄露或积累问题

这里有个实用技巧:ps aux --sort=-%cpu可以直接按CPU使用率降序排列,ps aux --sort=-%mem按内存排序。不用每次敲完ps aux再做人工扫描,一条命令就能定位是哪个进程在吃资源。

还有个小技巧:ps -fp PID只看指定进程的信息,配合pgrep(按名字查进程号)和pstree(查看进程父子关系)能很快梳理出进程间的依赖结构。

2.2 Kill信号选择:为什么Kill -9不是首选

我见过太多人排查故障时直接kill -9 PID,这其实是下下策。kill发送的是信号,不同信号对进程的影响完全不同:

  • kill PID(默认发送TERM信号):请求进程正常退出,进程可以清理资源、保存状态,是优先选择
  • kill -9 PID(发送KILL信号):操作系统强制杀死进程,进程没有任何机会做清理,可能导致数据损坏或文件残留
  • kill -15 PID:和kill PID等价,请求优雅退出

实际线上操作时,正确顺序应该是:先kill PID,等个几秒钟,如果进程还没退出,再kill -9 PID。另外还要提一个killall命令,按进程名批量终止,但用之前务必确认名字没写错,否则可能批量误杀合法进程。比如你想杀java进程,写成killall jav——这样杀不掉任何进程,还好;但如果你写的是killall j,而有个进程恰好叫j,那就误杀了。

2.3 僵尸进程和孤儿进程的处理思路

ps aux里看到STAT为Z的进程,很多人紧张得不得了。僵尸进程是子进程退出后,父进程没有正确回收其资源导致的。它本身不占用CPU和内存(严格说是占用了进程表的条目),无法用kill -9杀掉,因为进程已经“死”了,只是在等待父进程收尸。

处理思路只有一个:杀父进程,让孤儿的僵尸子进程被init进程(PID 1)收养并清理。用pstree -p看父子关系,然后kill -9 父进程PID。如果父进程是systemd或init,那说明僵尸列表是临时状态,过一会系统会自动清理,不用干预。

另外有个实用命令是top -p PID实时观察单个进程的资源占用,比反复敲ps方便得多。按M键按内存排序,按P键按CPU排序,按E切换内存显示单位(K/M/G),这些交互快捷键比参数更高效。

3. 系统状态排查:Load、内存和磁盘的“红绿灯”判断标准

3.1 Load Average怎么读:不是越低越好,也别只看数字

uptime命令输出的三个load average数值,是面试和运维排查都绕不开的硬指标。很多新手以为load低于1就是健康,这其实要分情况看。

load average的准确含义是“处于可运行状态和不可中断睡眠状态的进程平均数量”。判断负载是否偏高的正确姿势是结合CPU核数看:

nproc # 查看CPU核数

如果load长期超过核数的70%-80%,比如8核机器load跑到了7-8以上,说明CPU资源出现瓶颈或大量进程在等待IO。如果是4核机器load只有2,但业务已经卡得不行,那问题大概率不在CPU,而是磁盘IO、锁竞争或网络。这种情况uptime不足以定位,要用top或iostat进一步看。

坑点在于:单核机器load 1.0算满载,8核机器load 1.0其实很空闲。所以判断负载一定要先知道机器核数,这是大家最容易忽略却又最关键的一步。

3.2 Top命令交互式用法和性能瓶颈定位流程

排查性能问题,top是主战场。运行后上面的统计区有us(user cpu)、sy(system cpu)、id(idle cpu)、wa(iowait)几个关键参数:

  • us高:应用程序CPU密集,可能是代码效率问题或流量增长
  • sy高:系统调用过多,可能是频繁切换上下文、中断过多、锁竞争
  • wa高:大量时间在等待磁盘IO,日志写太多、swap频繁、数据库没调优都可能导致
  • id高但业务卡顿:大概率是锁或网络等待

top面板下面的进程列表默认按CPU排序,但这常常有误导性。排查内存问题时要按M切到内存排序。还有一个很实用的交互:在top里按1可以查看每个CPU核心的使用率,排查多核负载不均问题时有奇效。

实际排查流程我更推荐:先top看整体负载形态,按1看多核是否均衡,再按M或P定位具体进程,然后ps -fp PID确认进程细节。离开屏幕后还可以用top -b -n 1以批处理模式输出一次快照,方便把数据存到日志里。

3.3 DF和DU的常见误判及清理思路

磁盘满了是运维日常。

df -h查看文件系统使用率时有个容易忽略的细节:如果某个目录是挂载点,df -h显示的是该挂载点所在磁盘的使用率。判断“磁盘满没满”用df -h没有争议,但要找“哪个目录占用了大量空间”,就得用du。

du -sh /data/*可以列出/data下每个子目录的大小,du -sh /data只显示总共大小。查找大文件时,du配合sort是绝配:

du -h /data/* 2>/dev/null | sort -rh | head -20

注意2>/dev/null把权限不足的错误信息扔掉,避免干扰结果。

这里有个真实案例。某次磁盘报警,删除了一堆日志文件,但df -h依旧显示100%。原因是deleted但仍在被进程占用的文件,用lsof | grep deleted能找到这些“僵尸文件”,本质是文件已被删除但文件句柄没关闭。这种情况下必须重启或让对应进程重新打开文件才能释放磁盘空间。

4. 文本处理三剑客:Grep、Sed和Awk组合起来才是生产力

4.1 Grep的进阶参数:不只是“找一行”

grep是所有运维工具中使用率最高的指令,但多数人只用过grep xxx这一种形式。它真正有价值的用法远不止如此:

  • grep -v xxx:反向匹配,排除掉某些行,排查日志时非常常用
  • grep -i xxx:忽略大小写
  • grep -r xxx /path/:递归搜索目录下所有文件,但注意线上大目录慎用,会很慢
  • grep -A 5 -B 5 xxx:显示匹配行前5行和后5行,看异常日志时能带出上下文,方便定位问题
  • grep -o '正则':只输出匹配到的部分,配合正则提取IP、时间戳等字段特别好用
  • grep -c:统计匹配行数

日志分析场景我几乎每次都会这样组合:

grep -i "error" app.log | tail -50

先过滤错误,再看最后的50条。如果错误刷得太快,先grep -c "error" app.log看数量级,再进一步取样分析。线上排查第一原则是别把日志全文拉到屏幕上刷屏,而是先过滤再取样。

4.2 Sed流编辑器的核心套路:替换、删除、定点输出

s在sed中存在最频繁的场景是替换:

sed -i 's/old/new/g' file.conf

两个重点:-i代表直接修改原文件(默认只输出到屏幕不写入文件),g代表全局替换每一行里的所有匹配(不加g只替换每行第一个匹配)。生产环境改配置文件前,务必先不加-i跑一遍看输出,确认没有替换错,再加-i执行。

另一个常用场景是删除指定行。比如要删除配置文件里的注释行和空行,可以写成:

sed -i '/^#/d;/^$/d' file.conf

^#匹配以#开头的行,^$匹配空行,d表示删除。执行前同样建议先输出检查。

还有按范围打印的用法:sed -n '10,20p' file.txt,只看第10到20行。排查超大日志时比head、tail切片段更灵活。

4.3 Awk的字段处理思路:日志里提取数据的利器

awk的核心能力是按列处理。日志通常是空格或制表符分隔,awk默认按空格拆字段,$1是第一列,$2是第二列,$0是整行。最常见的场景是提取访问日志里的IP、时间、状态码:

awk '{print $1, $4, $9}' access.log | head -20

但awk真正比cut强的原因在于它支持条件过滤:只打印状态码为500的行:

awk '$9 == 500 {print $1, $4}' access.log

甚至可以做简单的统计聚合。比如统计每个IP访问多少次:

awk '{count[$1]++} END {for (ip in count) print ip, count[ip]}' access.log | sort -k2 -rn | head -10

新手不要求一步到位写出这种组合,但从“会看”开始,逐渐模仿,很快就能掌握。

4.4 Pipeline管道组合:小命令串成大工具

上面很多例子已经用了管道|。管道的本质是让前一个命令的输出成为后一个命令的输入。这是Linux命令的“组合拳”思想,单独学每个命令的价值有限,组合起来才够效率。《Linux常用指令》的核心就在这里:不是记十几个孤立命令,而是学会把命令串起来解决一个具体问题。

举例,要查系统里占用内存最大的前10个进程,一条组合就搞定:

ps aux --sort=-%mem | head -11

要看日志里某个接口的最新报错并带上下文:

grep -A 5 "/api/order" app.log | tail -30

要统计每个访问者的请求次数并降序输出:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

要查找所有大于500MB的文件并显示大小:

find /data -type f -size +500M -exec ls -lh {} \;

这些组合的威力远超单个命令,建议多练多拆解。

5. 网络排查基本功:Ping、SS和Curl的使用边界

5.1 Ping能测通不代表网络没坏,也不能代替连通性测试

ping是最常用的网络排查工具,但有两个常见误判场景:

第一,ping不通,不代表服务端口不通。很多云服务器安全组默认禁ICMP,导致ping超时但你用curl访问服务完全正常。反过来,ping通了,也不代表业务正常,因为ping只验证ICMP层通,TCP层可能被防火墙拦截,或服务本身挂了。

正确排查连通性的方式是用ss或telnet测试端口。公司内网环境常用telnet IP 端口看是否能连上,但有些环境没装telnet,这时用curl更通用:

curl -v http://ip:port/health

-v会详细输出连接过程中的每一步,能清楚看到TCP握手是否成功、HTTP响应码是多少。curl -I只取响应头,比下载整个页面轻量很多,做健康检查时更推荐。

5.2 SS命令替代Netstat:查看端口监听和连接状态

老教程让你用netstat,但现代Linux发行版推荐用ss(socket statistics),速度更快且参数兼容性好。最常用的:

ss -tlnp

这个命令列出所有TCP监听端口(-tTCP、-llistening、-n不解析域名、-p显示进程信息),是排查端口冲突和“端口到底被谁占了”的第一选择。

比如你启动服务报“端口被占用”,马上执行ss -tlnp | grep 8080,输出会直接告诉你PID和进程名,顺手ps -fp PID就能确认是什么进程。

排查连接数异常时看连接状态:

ss -s

这个命令显示系统的TCP连接统计,能看到established、time_wait、syn_sent各有多少。如果time_wait数量异常高(几万个),说明服务端大量主动关闭连接,可能需要调整内核参数或检查连接复用。

5.3 Curl的高频参数:Header、超时和重试

curl不只是下载工具,排查接口、调试API时它是必备武器。几个高频参数值得记牢:

  • -H:指定请求头,比如curl -H "Content-Type: application/json" -X POST -d '{"name":"test"}' http://ip/api
  • -m 10:设置超时时间为10秒,脚本里必须加,防止卡死
  • -o /dev/null -w "%{http_code}":只看HTTP状态码,做探测时最省事
curl -o /dev/null -s -w "%{http_code}\n" http://ip/health

这段输出只有状态码(200或503等),很适合写进监控脚本里做健康检查。

其他场景:

  • -k:忽略SSL证书校验,自签名证书测试时常用
  • -u user:pass:带基础认证访问接口
  • -L:自动跟随重定向
  • --connect-timeout 5:单独设置连接超时,比-m更精细

6. 文件传输和远程操作:SCP、Rsync与后台任务管理

6.1 SCP传文件的前提与替代方案

scp把文件从本机传到远程服务器,命令很直观:

scp localfile.txt user@remote_ip:/data/

但有几个实际注意点:如果端口不是默认22,要用-P 端口号(大写P,注意和ssh的小写-p区分)。生产环境修改过SSH端口很常见,不加-P会连接失败。

scp的问题在于不支持断点续传,传大文件传到一半网络断了,只能重新来。所以大文件或者频繁同步的场景,建议换rsync:

rsync -avP localdir/ user@remote_ip:/data/dir/

-a保留权限和时间戳,-v输出过程,-P显示进度且支持断点续传。中断后重跑同一条命令会从断点继续,这是scp做不到的。

6.2 后台运行远程任务:Nohup和Screen/Session的管理

在远程服务器执行一个耗时任务,直接ssh user@ip "command"的话,SSH连接一断任务就没了。正确做法是使用nohup配合&:

nohup ./long_running_task.sh > run.log 2>&1 &

解释一下:nohup让命令忽略挂断信号,> run.log把标准输出重定向到文件,2>&1把错误输出也并入同一个文件,最后的&让命令立即回到后台。这样即使SSH断开,任务也会继续执行,后续用tail -f run.log就能看进度。

但nohup只适合一条命令。如果需要交互式操作(比如启动服务后还需要确认、切换用户等),更推荐用tmux或screen:

tmux new -s mysession # 在里面执行长任务 tmux detach # 离开但不结束会话 tmux attach -t mysession # 重新连回来

tmux的优势是即使SSH断了,会话里的进程照样跑,重新连接后还能看到完整输出,非常适合远程排查问题时开多个窗口。

6.3 查看后台任务和清理残留进程

用&挂到后台的任务,可以用jobs查看(仅当前shell),fg调回前台,bg继续在后台跑。但这个只在当前SSH会话有效,断开后jobs就看不到了。要查看系统全局的后台任务,还是得ps aux | grep 进程名。

这里有个常见的收尾问题:后台任务跑完了,但你还挂着一个tail -f在跟踪日志,如果不再需要这个跟踪,按Ctrl+C退出就好。如果忘了退,SSH会话里挂着多个tail -f,关掉SSH时会有提示,也容易导致下次登录时旧连接占着资源,习惯性清理掉再断开是好习惯。

7. 权限和用户管理:别把Chmod 777当万能钥匙

7.1 权限位和Umask的逻辑:为什么默认新文件是644

Linux权限模型分为读r(4)、写w(2)、执行x(1)三组,分别对应属主、属组、其他人。644代表属主可读写、组和其他人只读,755是属主可读写执行、组和其他人可读执行,777是所有人可读写执行。背数字背后其实是二进制位的组合:r=4、w=2、x=1,加起来就是权限值。

新文件默认权限由umask控制,默认值通常是0022(root用户)或者0002(普通用户)。文件创建时实际权限是666减掉umask得到的(666-022=644),目录是777减掉umask得到755。理解了这套逻辑,就不会在配置文件因权限不足启动失败时一头雾水了。

7.2 Chmod和Chown使用场景:什么时候用递归,什么时候别用

修改权限最常用的是:

chmod -R 755 /data/www/html chown -R www:www /data/www/html

-R递归会影响目录下所有文件。这里有个重要提醒:生产环境的执行文件、密钥文件、配置文件,权限务必保守。比如SSH私钥(id_rsa),OpenSSH明确要求权限不能超过600,私自改成777会直接导致SSH拒绝使用该密钥,提示权限太开放。类似这样的隐藏规则,光记住命令是不够的,关键要形成“最小权限”的思维习惯。

实际工作中还有一个高频需求:给目录下所有文件统一改权限,但目录结构里有大量文件且大小不一,直接用chown -R虽然快,但遇到几十万的量级也可能卡一会儿。替代方案是配合find:

find /data/www/html -type f -exec chmod 644 {} \; find /data/www/html -type d -exec chmod 755 {} \;

文件统一644,目录统一755,这比无脑-R 775更符合web目录的规范权限结构。

7.3 用户管理基础:Useradd、Usermod和Passwd的常用配合

新增用户、改密码是权限模块的基础操作:

useradd -m -s /bin/bash zhangsan passwd zhangsan

-m创建家目录,-s指定默认shell。如果忘记指定-s,有些系统默认用/bin/sh,虽然也能用,但缺省bash的补全和历史功能体验差别很大。

给已有用户加sudo权限,主流方式是把它加入sudo或wheel组:

usermod -aG wheel zhangsan

注意-a(append)很关键,它表示追加到组,不会把用户已有的其他组踢掉。不加-a就要覆盖用户的附加组列表,容易出问题。

查看用户属于哪些组用groups 用户名,查看用户信息和UID位置用id 用户名。当调试出现“权限不足”问题时,第一反应应该是id看当前用户身份、ls -l看目标文件的属主属组,理清“谁在操作”和“目标是谁的”,基本就能定位权限类问题的症结。

8. 日志和系统服务的日常:对管理Linux实例尤为关键

8.1 Journalctl查系统日志:别再只翻/var/log/messages

现代服务器基本都用systemd管理服务,系统的所有服务日志可以由journalctl统一查看。最常用的几个:

journalctl -u nginx.service # 查看nginx服务的日志 journalctl -u nginx.service --since "1 hour ago" # 最近1小时 journalctl -u nginx.service -f # 实时跟踪 journalctl -p err # 只看错误级别以上

-u指定服务单元名非常实用,一个服务一个日志视图,比在/var/log/下翻各种文件方便得多。-p err过滤错误级别让日志量瞬间缩减。

有个细节:journalctl默认读取的是内存/临时文件里的日志,系统重启后旧日志可能丢失。如果希望持久化保留,需要创建/var/log/journal目录并设置权限。虽然不同发行版有差异,但大致方向是确保journal的日志目录存在,否则容易排查问题时发现“日志只能追溯到最近一次启动”。

8.2 Systemctl管理服务状态:理解Enable和Start的区别

日常启停服务就围绕systemctl:

systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl status nginx systemctl enable nginx

很多新人搞不清start和enable的区别。start是立即启动(只影响当前),enable是设置开机自启(对当前状态无影响)。想让服务立刻运行且开机也自动运行,要两个都执行:

systemctl enable --now nginx

--now相当于同时执行enable和start,一条命令一步到位。

排查服务启动失败时,systemctl status 服务名会输出最近几条日志,但如果问题出在启动早期或日志不够,接着用journalctl -u 服务名 -e(-e跳转到日志末尾)能看到更多细节。有权限问题的,结合ls -l检查二进制文件权限和属主;依赖缺失的,错误信息里通常直接列出缺少的库。

8.3 定时任务Crontab:写对时间,避开注释坑

crontab -e编辑当前用户的定时任务。基本格式是五个时间字段加上要执行的命令:

*/5 * * * * /opt/scripts/health_check.sh >> /var/log/health.log 2>&1

五个字段依次是分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)、周(0-7,0和7都代表周日)。

实际坑点主要有两个:一是脚本执行结果最好重定向到日志文件,否则cron会把输出发到用户邮箱(很多服务器不读邮箱,等于丢消息);二是cron执行脚本时的环境变量和交互式shell不同,PATH经常不包含/usr/local/bin。脚本里用绝对路径调用命令能避开大量“脚本手动执行正常、cron执行就报错”的问题。

# 错误示例:cron环境可能找不到python */5 * * * * python3 /opt/scripts/test.py # 正确示例:用绝对路径 */5 * * * * /usr/local/bin/python3 /opt/scripts/test.py

修改crontab之后,可以用crontab -l确认已生效。调试定时任务最有效的思路是先把脚本手动执行一遍确认正常,再检查时间表达式是否有逻辑错误,最后看日志输出判断cron是否真的跑了脚本。

9. 压缩、打包和Shell技巧:最后一公里的效率提升

9.1 Tar命令:打压缩包和传文件的配合

打包压缩是文件传输的前提,高频命令是:

tar -czvf backup.tar.gz /data/app/ tar -xzvf backup.tar.gz -C /tmp/restore/

记忆方法是:c创建、z用gzip压缩、v显示过程、f指定文件名,解压是x替换c。-C指定解压目录,避免解压到当前位置造成混乱。

网络传输大目录时,推荐先打包再传,或者直接用管道打包并传输一步到位:

tar -czf - /data/app/ | ssh user@remote_ip "tar -xzf - -C /data/restore/"

这种方式不落本地文件,流量直接通过网络传输,又能省掉中间磁盘占用,适合传输超大目录。

9.2 Shell快捷键和别名:手感提升的细节

日常操作效率提升,很多时候不靠新命令,而是靠快捷键:

  • Ctrl+A/Ctrl+E:光标移到行首/行尾
  • Ctrl+U/Ctrl+K:删除光标前/后的内容
  • Ctrl+R:搜索历史命令,不记得完整名字时很管用
  • !!:执行上一条命令
  • !$:取上一条命令的最后一个参数

alias可以给长命令起短名字,常用示例:

alias ll='ls -lh' alias grep='grep --color=auto'

想永久生效,写到~/.bashrc或~/.bash_aliases文件中,然后source ~/.bashrc。有自己顺手的别名配置,日常操作效率能提升很多。注意alias只在当前shell生效,写脚本或定时任务时别依赖别名,脚本里必须用完整命令,避免在非交互环境下别名不生效而报错。

9.3 环境变量和命令定位:PATH、Export和Which的关系

执行命令时系统通过PATH环境变量查找可执行文件。which 命令名可以显示该命令的完整路径,比如which python3返回/usr/local/bin/python3。echo $PATH可以查看当前的查找路径列表。如果需要让新装的软件生效,常见做法是把路径加到PATH:

export PATH=/usr/local/mysql/bin:$PATH

但这样只对当前终端生效,想永久生效建议写入~/.bashrc或/etc/profile。这里注意:修改/etc/profile是全局生效,影响所有用户,非必要不修改;个人用户改自己的~/.bashrc更稳妥。调试命令找不到时,第一反应用which确认路径,再用echo $PATH确认查找范围,路径包含就可以执行,不包含就加到环境变量里。

我自己在实际运维中见过太多因为环境变量没配对而折腾半天的案例,先把路径确认好,很多问题都迎刃而解。

10. 写在最后:把指令变成肌肉记忆的练习方式

先有指令,后有组合,最后才是系统性排查问题。很多人高估了背命令清单的价值,低估了“在真实场景里反复使用”的价值。我的建议是:不要一次性想把几百条命令吞下去,而是选10-20条最高频的命令,在自己的机器上刻意练习组合。比如每天用ps aux --sort=-%cpu看一遍系统进程、用ss -tlnp看端口、用journalctl -u 服务名 --since "1 hour ago"排查一次服务日志,把这些动作变成习惯。

遇到新问题时的排查思路优先级,我个人经验是:先看top确认资源水位,再用journalctl/日志文件定位错误信息,然后ps和ss确认进程和端口状态,最后配合find、grep、tail快速定位文件级问题。这套组合拳熟练之后,大部分日常故障都能在十分钟内摸清方向。

《Linux常用指令》的核心不在“常用”,而在“指令是死的,场景是活的”。希望你们在练习时多问自己一句:这条命令解决的是什么场景下的什么痛点?想清楚这个问题,任何命令都能变成你自己的技能。

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

ROS2+YOLOv5s桌面级立体仓储系统工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 1:10:35

Faster R-CNN技术因果链:从R-CNN到RPN的工程演进

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 1:09:55

数据中心运维标签规范:从命名到落地全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 1:09:44

数字光纤放大器实战指南:从选型参数到安装调试与故障排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 1:09:18

ESP32-S3与C3 Mini差异解析:PSRAM、USB及选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 1:08:59

银河麒麟V10 SP1桌面版SSH服务安装配置与远程管理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华