ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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 -124小时内修改过的文件按类型筛选find / -type f只查普通文件find / -type d只查目录配合-name效率非常高删除查出来的文件前一定要先find /xxx -name *.log | head -20看看结果对不对相比之下locate基于数据库查询速度快到飞起但它的数据库默认每天更新一次刚创建的文件查不到。如果你接受这个时效性延迟locate是个不错的补充工具。很多系统默认没装用包管理器装一下即可。2. 进程管理PS能看到的信息远比你想的多Kill也别只会Kill -92.1 PS aux输出里每个字段的实用解读面试考Linuxps aux是必考题。但光背出“显示所有进程”没有意义关键是看懂各字段并从中发现问题。ps aux输出里USER进程由哪个用户启动如果root用户跑了个名字看起来像业务服务的进程要留个心眼PID进程号配合kill使用%CPU和%MEMCPU和内存占用百分比排查性能问题第一眼就看这两列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发行版推荐用sssocket 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 userremote_ip:/data/但有几个实际注意点如果端口不是默认22要用-P 端口号大写P注意和ssh的小写-p区分。生产环境修改过SSH端口很常见不加-P会连接失败。scp的问题在于不支持断点续传传大文件传到一半网络断了只能重新来。所以大文件或者频繁同步的场景建议换rsyncrsync -avP localdir/ userremote_ip:/data/dir/-a保留权限和时间戳-v输出过程-P显示进度且支持断点续传。中断后重跑同一条命令会从断点继续这是scp做不到的。6.2 后台运行远程任务Nohup和Screen/Session的管理在远程服务器执行一个耗时任务直接ssh userip command的话SSH连接一断任务就没了。正确做法是使用nohup配合nohup ./long_running_task.sh run.log 21 解释一下nohup让命令忽略挂断信号 run.log把标准输出重定向到文件21把错误输出也并入同一个文件最后的让命令立即回到后台。这样即使SSH断开任务也会继续执行后续用tail -f run.log就能看进度。但nohup只适合一条命令。如果需要交互式操作比如启动服务后还需要确认、切换用户等更推荐用tmux或screentmux new -s mysession # 在里面执行长任务 tmux detach # 离开但不结束会话 tmux attach -t mysession # 重新连回来tmux的优势是即使SSH断了会话里的进程照样跑重新连接后还能看到完整输出非常适合远程排查问题时开多个窗口。6.3 查看后台任务和清理残留进程用挂到后台的任务可以用jobs查看仅当前shellfg调回前台bg继续在后台跑。但这个只在当前SSH会话有效断开后jobs就看不到了。要查看系统全局的后台任务还是得ps aux | grep 进程名。这里有个常见的收尾问题后台任务跑完了但你还挂着一个tail -f在跟踪日志如果不再需要这个跟踪按CtrlC退出就好。如果忘了退SSH会话里挂着多个tail -f关掉SSH时会有提示也容易导致下次登录时旧连接占着资源习惯性清理掉再断开是好习惯。7. 权限和用户管理别把Chmod 777当万能钥匙7.1 权限位和Umask的逻辑为什么默认新文件是644Linux权限模型分为读r4、写w2、执行x1三组分别对应属主、属组、其他人。644代表属主可读写、组和其他人只读755是属主可读写执行、组和其他人可读执行777是所有人可读写执行。背数字背后其实是二进制位的组合r4、w2、x1加起来就是权限值。新文件默认权限由umask控制默认值通常是0022root用户或者0002普通用户。文件创建时实际权限是666减掉umask得到的666-022644目录是777减掉umask得到755。理解了这套逻辑就不会在配置文件因权限不足启动失败时一头雾水了。7.2 Chmod和Chown使用场景什么时候用递归什么时候别用修改权限最常用的是chmod -R 755 /data/www/html chown -R www:www /data/www/html-R递归会影响目录下所有文件。这里有个重要提醒生产环境的执行文件、密钥文件、配置文件权限务必保守。比如SSH私钥id_rsaOpenSSH明确要求权限不能超过600私自改成777会直接导致SSH拒绝使用该密钥提示权限太开放。类似这样的隐藏规则光记住命令是不够的关键要形成“最小权限”的思维习惯。实际工作中还有一个高频需求给目录下所有文件统一改权限但目录结构里有大量文件且大小不一直接用chown -R虽然快但遇到几十万的量级也可能卡一会儿。替代方案是配合findfind /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注意-aappend很关键它表示追加到组不会把用户已有的其他组踢掉。不加-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的区别日常启停服务就围绕systemctlsystemctl 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 21五个字段依次是分钟0-59、小时0-23、日1-31、月1-12、周0-70和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 userremote_ip tar -xzf - -C /data/restore/这种方式不落本地文件流量直接通过网络传输又能省掉中间磁盘占用适合传输超大目录。9.2 Shell快捷键和别名手感提升的细节日常操作效率提升很多时候不靠新命令而是靠快捷键CtrlA/CtrlE光标移到行首/行尾CtrlU/CtrlK删除光标前/后的内容CtrlR搜索历史命令不记得完整名字时很管用!!执行上一条命令!$取上一条命令的最后一个参数alias可以给长命令起短名字常用示例alias llls -lh alias grepgrep --colorauto想永久生效写到~/.bashrc或~/.bash_aliases文件中然后source ~/.bashrc。有自己顺手的别名配置日常操作效率能提升很多。注意alias只在当前shell生效写脚本或定时任务时别依赖别名脚本里必须用完整命令避免在非交互环境下别名不生效而报错。9.3 环境变量和命令定位PATH、Export和Which的关系执行命令时系统通过PATH环境变量查找可执行文件。which 命令名可以显示该命令的完整路径比如which python3返回/usr/local/bin/python3。echo $PATH可以查看当前的查找路径列表。如果需要让新装的软件生效常见做法是把路径加到PATHexport 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常用指令》的核心不在“常用”而在“指令是死的场景是活的”。希望你们在练习时多问自己一句这条命令解决的是什么场景下的什么痛点想清楚这个问题任何命令都能变成你自己的技能。
返回列表