前两天帮一位刚转运维的朋友排查问题,他卡在一个特别基础的环节上:日志目录里有百来个文件,他需要把每个文件里的错误行筛出来,再统计一下各个错误类型出现的次数。他还在用cat打开、滚轮翻页的老办法,折腾了半个多小时。Linux常用命令到了这个场景,不该是一条条敲,而是应该用管道把命令组合起来,让终端替你把活干了。这篇内容不打算把Linux命令从头到尾背一遍,而是按你实际工作里的高频场景来梳理:文件操作、系统排查、文本处理、权限和软件管理,再到Docker、Git这些现代工作流里的常用命令,每一段除了讲命令本身,更多的会讲它在什么场景下用、有哪些坑要绕。不管你是刚开始学Linux的入门者,还是做测试、运维、开发想补基础的从业者,沿着这条路走一遍,基本能应对绝大多数日常问题。
1. 文件与目录操作,先把组合拳练熟
1.1 ls、cd、pwd里那些看起来懂,其实没吃透的细节
文件操作可能是很多人觉得最简单的地方,入职第一天就会ls、cd。但真到用的时候,照样一堆人卡壳——比如ls -l输出的第一列那一串rwxr-xr-x到底怎么读,比如为什么自己设置的文件权限总是不生效。
先说说ls。日常工作中我默认加参数:ls -lh,这是最常用的。你看到的大小是K、M这种单位,不用自己在脑子里换算字节。要看隐藏文件(以.开头的)加-a;要按时间从新到旧排序用-lt,配合head -n 10就能快速看到目录下最近被改动的文件。这个用法在找"刚刚生成的日志文件"时特别顺手。
ls -l输出的第一列里,第一个字符表示文件类型,-是普通文件,d是目录,l是软链接,剩下的b和c对应块设备和字符设备。后面九个字符每三个一组,分别是属主、属组、其他人的权限。r是读,w是写,x是执行。这一列如果你读不顺,后面学chmod、chown会非常吃力,建议先停下来对着一个文件一行一行读清楚。
cd也有几个容易被忽略的用法。cd -会回到上一次所在的目录,配合"在两个目录之间来回切换"非常高效,我第一次被人安利这个参数时还觉得无所谓,后来发现比一遍遍敲完整路径省事太多。cd ~直接回当前用户家目录,cd ..回上级目录,这些不用多说。pwd通常看着没什么用,但如果你在脚本里需要知道当前目录,pwd -P的作用就出来了——它显示的是物理路径,而不是带软链接的路径。比如/opt/link指向/data/app,直接cd /opt/link后pwd显示/opt/link,但pwd -P会告诉你真正的/data/app,这在写自动化脚本时能避免不少"路径明明对却找不到文件"的诡异问题。
命令行的操作习惯比你想的重要。Tab键自动补全是我判断一个人Linux熟练度的第一指标,不管是路径还是命令,只要不嫌麻烦把Tab用起来,错误率会低很多。history能翻你敲过的历史命令,!$代表上一条命令的最后一个参数,!!代表上一条整条命令,这几个小技巧虽然细,但真正用起来能省很多重复劳动。
1.2 cp、mv、rm:每个都有隐藏规则,也都有能救命的参数
cp复制文件,mv移动文件,rm删除文件,听起来都不用教。可实际出问题的场景,往往就出在"我以为它很简单"的地方。
cp复制目录必须加-r,比如cp -r config /backup/config,不加递归参数,它只会给你报一句"omitting directory"然后跳过目录。要保留文件的权限、时间戳这些属性,用cp -a,这个参数在备份、迁移场景下几乎是标配。如果你经常需要覆盖文件,建议给cp加个别名:alias cp='cp -i',这样每次覆盖前它会问你一次,能在手滑的时候拦你一道。
mv的隐藏规则在于"同一个文件系统"和"跨文件系统"的差异。mv在同一块磁盘的目录之间移动文件,本质上只是修改目录项,瞬间完成;一旦跨磁盘(比如把/home下的数据移到/data挂载的盘),它就变成"复制一份再删掉原文件",几GB的大文件会等很久,这时候你应该改用rsync,还能看进度。另一个高频场景是用mv来"改名",mv oldname newname,Linux里没有单独的rename命令,mv即改名。想快速把一个不需要的文件挪走,又不敢直接删,mv file /tmp/也是一个很实用的临时代替方案。
rm -rf的危险性不用多强调,几乎每个运维都听过删库跑路的段子。我的原则是:凡是要递归删除的目录,先ls看清楚里面是什么,再执行rm -r。更稳妥的办法是给rm加-i,让系统在删除前问一句。如果你删除一个目录时提示"directory not empty"或者权限被拒,先确认自己是不是搞错了目录,不要顺手就在前面加sudo。另外,rm -rf后面千万别接变量,特别是脚本里,如果变量没赋值成功,变成rm -rf /,整台机器就没了。我见过一次同事在脚本里踩到这个问题,数据恢复花了整整一天。
1.3 find、locate、which:找文件命令怎么选
查命令位置用which,这个没什么好说的,which python3能告诉你用的到底是/usr/bin/python3还是某个虚拟环境里的解释器。查文件,find是最强的,没有之一,因为它直接在文件系统层面遍历,绝对可靠。缺点是慢,但大目录下用对了参数,效率也能接受。
find的常用组合我得写全一点:find /data/logs -name "*.log"表示找指定路径下所有.log结尾的文件;-type f表示只找普通文件,-type d表示目录;find /data -mtime -7表示七天内有改动的文件,这个在清理过期日志时很常用;find /data -size +1G直接筛出超过1G的大文件,磁盘告警时定位元凶特别快。
find和后续操作结合是精髓。find /data/logs -name "*.log" -mtime +30 -exec rm {} \;这一串命令的含义是:找出/data/logs下三十天前的日志文件并删除。{}是find把匹配到的路径传进去的位置,\;表示-exec命令的结束。每次写这种命令我都建议先运行不含-exec的那半段,确认结果没问题,再把删除接上去。另外一个常用组合是find ... | xargs,xargs会把前一命令的输出分批传给后一个命令,适合做批量压缩、批量改权限。
locate基于数据库查询,速度比find快很多,但数据库不是实时更新的,新创建的文件可能查不到。它的角色更像"我隐约记得有个文件叫这个名字"的辅助工具。至于搜文件内容,grep -r "keyword" /path才是正确姿势,很多人会在某个目录里直接grep却不加-r,结果一个文件都不匹配,还以为日志里没有这个关键字。
1.4 vim的常用编辑命令:不改配置也能救命
在服务器上改文件,逃离vim是不可能的。很多人一进vim就懵,不知道怎么写、怎么退。有一说一,vim入门不需要把整个教程背下来,记住这几个就够日常活命了:i进入插入模式,Esc退出插入模式,:wq保存并退出,:q!不保存强制退出,dd删除当前行,yy复制当前行,p粘贴,/关键词搜索并回车后用n向下跳转、N向上跳转。这十个操作覆盖了90%的改配置场景。
有一个细节新手特别容易卡住:文件如果只是只读权限,你改完w会报错,这时候先Esc,输入q!退出,然后确认文件权限和属主。如果你真的需要改,用sudo或换用户,不要在vim里硬扛。还有一个使用习惯是:改完重要配置后先:q退出,再用grep确认一下内容确实改了,避免"以为自己保存了"的幻觉。vim的配置文件在~/.vimrc,可以设置set number显示行号,有人觉得这不算命令,但从实用角度看,没有行号的时候你连"错误出在第几行"都说不清。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统状态与进程管理,服务器出问题时的第一反应
2.1 top、free、df、du四件套,先学会"看现象"
排查服务器问题,我个人习惯是先用四个命令把整体状态摸一遍:top看负载,free看内存,df看磁盘,du看目录。顺序基本就是CPU、内存、磁盘这三板斧,大多数"机器变慢"的问题都能在这层看出来。
top进入交互界面后,第一行load average后面有三个数字,分别代表过去1分钟、5分钟、15分钟的平均负载。看这个值不能只看大小,要结合CPU核数:一共8核的机器,负载如果一直在8以上,说明CPU一直处于打满状态;如果核数少但负载很高,就要看是哪个进程在吃CPU。top默认按CPU占用排序,按P也可以按CPU排,按M按内存排,按数字1可以看到每个CPU核心的使用情况,这个细节很多人不知道,所以看top只看了个热闹。
内存这一部分,free -h是最直观的。它里面的buff/cache一栏经常让人误判"内存不够用了"。实际上buff/cache是内核把空闲内存拿去做磁盘缓存和页缓存,这部分内存在应用需要时会被自动回收,高并不代表有问题,真正要警惕的是swap这一行的used明显变大,说明内存真的吃紧,系统开始往交换分区倒腾数据了。top里看到的是进程维度的占用,free和top可以对照着看。
磁盘问题经典的"症状"是:df -h显示某个分区100%,但你用du去目录里找,怎么都找不到特别大的文件。这时候大概率是某个大文件被删除,但进程还一直持有它的文件描述符。排查命令是lsof | grep deleted,能看到被删掉但仍被占用的文件,然后顺着PID找到对应进程,重启或释放即可。这个坑我踩过好几回,不写出来对不起读者。
du用来看目录占用的顺序是:先du -h --max-depth=1 /data查出第一层里谁最大,再一层一层往下定位。如果目录结构特别深、文件特别多,du会有点慢,这也是正常的,它得遍历整个目录树。
2.2 进程管理:ps、kill、systemctl,关键时候别用错信号
查看具体进程,ps -ef和ps aux基本等价,输出内容略有点区别但影响不大。习惯用ps -ef | grep java | grep -v grep来确认某个服务进程是否存在。最后的grep -v grep是把grep自己这条进程过滤掉,不加的话你总会看到一条带着grep关键字的假进程,新手很容易误判"服务明明没有了,怎么进程还在"。
看到进程后,处理方式一般分两种:前台任务直接Ctrl+C,后台任务用kill。kill默认发的是SIGTERM,也就是第15号信号,给进程一个机会做清理动作然后自行退出,这是体面的结束方式。kill -9发SIGKILL,内核直接把进程干掉,进程没有任何机会保存状态。能用kill尽量先kill,kill -9是最后手段。一些服务对SIGTERM的处理很到位,比如Nginx会平滑退出,MySQL会先刷日志再关,你上来就-9,很可能丢数据。
进程列表里如果看到状态为Z的僵尸进程,意味着子进程已经退出,但父进程没有调用wait来回收它的退出状态。僵尸进程杀不掉,因为它本来就"已死",要处理只能把它的父进程一起处理掉,或者让父进程正常退出,由1号进程(init/systemd)接管回收。常见的僵尸进程来源是脚本fork出来的子进程没被正确管理,属于程序层面的问题。
现代系统管理服务,systemctl早就取代了那些手动initscript。systemctl status nginx能直接看到服务状态、运行时间、最近日志;start/stop/restart/reload四个操作里,reload常用于Nginx这类支持配置热加载的服务,触发动作比restart温柔。enable用来设置开机自启,这个是部署新服务时必做的。如果服务启动失败,journalctl -u 服务名 -n 100看最近日志是最快的定位方式,比去/var/log下翻文件省事。
2.3 网络排查:先从"通不通"和"端口开没开"两个层面想
网络问题排查,我给自己总结的顺序是:先ping目标IP,确认网络层通不通;再用端口工具确认目标端口是否可达;最后才考虑防火墙和应用层的问题。不要一上来就抓包。
ping通了只代表主机之间网络层能通,不代表目标端口上的服务可用。排查端口,传统写法是telnet ip port,但很多最小化安装的机器没有telnet客户端,用nc(netcat)或者直接看本地监听状态更实在。查看本机端口监听情况,netstat -tlnp是最经典的一个,-t只看TCP,-l只看监听状态的端口,-n不做反向域名解析所以快,-p会显示占用进程的PID和名字。新一点的系统里net-tools不一定预装,ss -tlnp就是它的替代品,属于iproute2包,功能完全覆盖netstat在这类场景的需求。
"本机端口明明在监听,外部就是连不上"——这种情况十有八九是防火墙。不同发行版的防火墙命令差别很大,先明确你用的是哪套方案再动手。使用systemctl查看firewalld状态,或者查看ufw status,确认规则后再调整。测试HTTP接口,curl是必备工具,curl -i看得响应头,-v看完整交互过程,-X POST配合-H和-d发接口请求,基本满足日常调试需求。连接被拒和连接超时是两种不同的错误,前者通常意味着端口没人监听或直接被防火墙拒绝,后者意味着包根本没到对方机器,网络路径有问题。
3. 文本处理三板斧,日志排查的真正主力
3.1 grep:过滤、统计、上下文追踪,三分钟上手
日志排查是Linux日常里最频繁的工作,而grep是这里面使用率第一的命令。它可以搜文件,也可以从管道里接收内容:tail -n 100 app.log | grep -E "ERROR|Exception",先拿尾巴100行,再过滤出错误相关的行,这是我最常用的组合之一。如果不加tail直接grep整个日志文件,文件大了会又慢又吵,先缩小范围再过滤是基本素养。
grep常用参数需要在实战中形成肌肉记忆。忽略大小写用-i,比如搜error同时匹配Error和ERROR;-v是反选,批量排除某个关键字很好用;-c直接统计匹配多少行而不打印内容;-n显示行号,配合编辑器定位问题特别方便;-w做单词精确匹配,搜"in"的时候不会把"install"拽出来。还有一个容易被忽略但很实用的,-A和-B,分别显示匹配行的后面几行和前面几行。比如你搜到一条异常堆栈,异常信息往往在报错行后面十几行里,grep -A 20 "Exception" app.log能让上下文一起出来。
多条件组合的思路也要打开:grep -E "ERROR|WARN" app.log,匹配任一关键字;grep "ERROR" app.log | grep "user_123",在第一次过滤结果里再做二次过滤。这种管道串联很符合Linux"命令只做一件事,组合完成复杂任务"的哲学。
3.2 sed:批量替换和抽取指定行,比文本编辑器靠谱
sed严格来说是流编辑器,它不打开文件,而是按行处理输入流,所以处理大文件时非常稳。最核心也最常干的活是替换。配置文件里批量改IP、改端口,手动一个个改既容易漏又容易错,一条命令解决:sed -i 's/192.168.1.10/10.0.0.5/g' *.conf。-i表示直接写回原文件,s/old/new/g表示把每行里所有old替换成new,最后的g就是全局替换,不加它每行只替换第一个匹配。安全习惯:第一次用可以加-i.bak,比如sed -i.bak 's/.../.../g',它会先把原文件备份成.conf.bak再改,确认没问题再删备份。
sed还能抽取指定区间的内容,sed -n '20,50p' app.log看第20到50行,-n表示不默认输出,p表示打印匹配的行。这个用途是定位某个时间段的日志时,结合less开行号找到范围再用sed精准抽取。删除行也简单,sed -i '/^#/d' config.conf表示删除所有以#开头的注释行。正则的能力在这里是完整可用的,想匹配行尾、匹配数字区间,都要靠sed的正则。
3.3 awk:按列提取和统计,做日志聚合的隐藏高手
awk比sed更进一步,它把每一行按分隔符拆成字段,天然适合处理"有结构的文本"。日志、配置文件、命令输出,很多都是带分隔符的表格结构,awk就是为这种场景而生的。
基础用法是-F指定分隔符,然后按$1、$2取列。看/etc/passwd文件,一行代表一个用户,冒号分隔,第一个字段是用户名,最后一个字段是登录shell,命令awk -F: '{print $1, $7}' /etc/passwd能把所有用户的这些信息拉出来,这是awk入门的经典例子。如果你想统计一个日志里各类型错误出现的次数,可以这么做:grep "ERROR" app.log | awk -F']' '{print $2}' | sort | uniq -c | sort -rn。意思是从日志里过滤出ERROR行,按反括号切分取第二段当作错误类型,然后排序、去重统计、按数量倒序。这一条组合命令,往往能顶一个小时的Excel手工活。
awk还支持累加类统计。比如从nmon或top输出里提取某一列的CPU使用率并求平均,awk '{sum+=$1} END {print sum/NR}'就行,NR是awk内建的行号,这里恰好代表行数。条件过滤放在{}前面,比如awk '$3 > 100 {print $1}'会只在第三列大于100时才打印第一列。awk对大多数人来说不需要学得很深,把取列、求和、条件判断这三样用熟,日常就非常能打了。
3.4 tail、head、less,看日志文件的基本功不能丢
文件大了以后,vi打开是灾难,动辄几百MB的日志会让编辑器卡到怀疑人生。less是我看日志的首选工具,原因很简单:它按需加载,翻到哪再读哪,大文件也秒开。进入less后可以按/输入关键字搜索,n和N跳转到下一个/上一个匹配,G直接跳到文件末尾,g回到开头。与其导到Windows上用编辑器翻,不如直接在远端less里操作,效率不是一个量级。
需要持续观察日志增长时,tail -f 日志文件会实时输出新增内容。调试服务启动失败的场景,先启动服务再另开一个终端tail -f,能看到日志一行行打出来,比反复重启省心。如果只想看一眼文件最后多少行,tail -n 100不加f;想从文件头部看配置说明,head -n 50。tail和head的组合还能做切片:head -n 5000 huge.log | tail -n 100,取前5000行里的最后100行,这在日志分段分析时很好用。
4. 用户、权限、软件安装,从"会敲命令"到"会管系统"
4.1 用户和组:不只是useradd和passwd
Linux是多用户系统,这个特性在实际运维中意味着权限边界。useradd是创建用户的入口,但光useradd还不够,系统通常建议加参数:useradd -m -s /bin/bash username,-m要求同时创建家目录,-s指定登录Shell为用户指定为bash。创建完立刻用passwd username设置密码,否则这个用户只能看着,什么都干不了。用户创建错误的补救,usermod可以修改参数,比如usermod -aG docker username把用户加入docker组,-aG务必带着,因为加组不带-a会把用户从其他组里踢出去。
理解权限体系前,得先明白Linux把用户信息放在哪。用户信息放在/etc/passwd,密码散列在/etc/shadow(普通用户看不到),组信息在/etc/group。当你用id username可以查看某个用户属于哪些组,这在排查"为什么没有权限访问某个目录"时是第一个要确认的东西。
chmod的数字写法是权限管理的基础:r=4,w=2,x=1,相加得到某个角色的权限数字,chmod 755 file就表示属主rwx(7),属组rx(5),其他人rx(5)。目录的x权限其实是"进入目录"的权限,这跟文件不同,经常有人给目录只设r权限,发现自己ls能看到文件名但进不去,就是这个原因。改属主属组用chown user:group file,严格来说也是运维必备,尤其在部署服务时,让服务账号拥有对应目录的权限,而不是一言不合给777,这是生产环境安全的基本素养。sudo的配置在/etc/sudoers里,日常不建议手改,用visudo命令编辑它,保存前会做语法检查,防止把我自己锁在门外。
4.2 软件包管理和打包压缩:装机之后最常打交道的一环
在Debian系的Ubuntu/Debian上,软件管理用apt;在RedHat系(CentOS、Rocky、Fedora)上,用yum或dnf。两个系统的命令大同小异,核心思路都是先更新索引、再搜索、再安装:apt update更新软件源缓存,apt install nginx -y装包,apt search关键词找包。yum的对应关系是yum makecache、yum install、yum search。
软件安装另一种常见路子是编译源码安装,经典三步:./configure --prefix=安装路径设置编译参数,make实际编译,make install安装到系统。编译安装主要用来装那些包管理器里没有或者版本太旧的软件,但对新手来说,装依赖往往是最大的坑,缺一个库就报一个错,我建议小白优先从apt/yum装,真要编译也尽量找维护好的构建脚本。
打包压缩同样是高频操作。tar本身是打包工具,配合压缩算法就是"打包+压缩":tar -zcvf app-backup.tar.gz /data/app,-z表示gzip压缩,-c创建包,-v显示处理过程,-f指定包文件名。解压对应tar -zxvf app-backup.tar.gz,如果不带路径,它会解压到当前目录。别的压缩格式里,-j对应bzip2,J对应xz。想和CentOS老版本或者Windows互相传文件,zip是更通用的格式:zip -r archive.zip 目录、unzip archive.zip。看到.tar.xz这类文件也别慌,tar -xJf就行。压包之前用du看看这个目录多大,可以避免打出一个好几个GB的大包都不知道。
4.3 虚拟机或新机器装好Linux后的最初几步
很多人的Linux旅程从虚拟机开始。安装好系统后,别急着敲一堆花哨命令,先把这几件事做对,后面会省很多事。
第一步确定网络。用ip addr看当前分配到的IP地址,注意和旧版命令的差异:CentOS 7及以前还常见ifconfig,新系统里不一定装net-tools,ip addr更通用。如果要用SSH从宿主机连过去,先确保sshd服务启动:systemctl status sshd,没启动就systemctl start sshd并systemctl enable sshd设置为开机自启。云服务器或虚拟机里,网络配置改完以后,重启网络服务或用ip link set dev eth0 up,这个动作出现的频率特别高。
第二步更新软件源。新装的系统源指向官方,从国内下载速度通常不理想。很多开源镜像站会提供系统软件源的同步服务,配置后下载速度会好很多。换成合适的镜像源之后记得执行一次apt update(或yum makecache)让索引生效。我见过有人配了源忘了刷新,结果安装任何包都报404,多半就是缓存没更新。
第三步设置主机名和普通用户。生产环境从来不建议直接用root跑服务,创建一个普通用户,加入sudo组,日常工作用这个账号登录,需要提权的时候才sudo。这不仅是习惯问题,更是不给自己留"一个手滑删库"的机会。
5. 现代Linux工作流里的高频命令,以及那些面试爱问的题
5.1 容器、Git、数据库,这几类命令几乎是日常必需品
现在做开发和运维,光会传统的命令不够,Docker、Git、数据库操作已经成了Linux终端里最常见的场景。
Docker维护服务最常用的就是docker ps看运行中的容器,docker images看本地镜像,docker logs -f 容器名跟踪容器日志,docker exec -it 容器名 bash进容器内部排查。容器起不来时,先docker ps -a看退出状态码,再docker logs看启动日志,大多数问题都能定位。docker compose在当前环境下用得更多,docker compose up -d能一键拉起一组服务,改动配置后docker compose restart xx重启某个服务。
Git在联调发布环节绕不开。git status看当前分支和改动文件,git add和git commit把改动提交到本地,git pull和git push同步远端,git log --oneline看提交历史。分支操作在多人协作时很频繁,git branch -a看全部分支,git checkout -b新分支从当前分支拉出一个新分支。发布代码前git diff先看一眼改动内容,这个习惯能帮你拦截至少一半的误提交。
数据库命令也要顺手。以MySQL为例,mysql -u root -p进入客户端,show databases;看库,use database_name;选库,show tables;看表,然后就是标准的SQL查询。写SQL时永远记得带WHERE条件,大表上不带条件的select *可能直接把数据库拖垮,这是生产经验。
K8s是运维向同学的进阶项目,kubectl get pods看Pod状态,kubectl logs -f pod名跟踪日志,kubectl describe pod查看事件和详细状态。Big Data场景里,HDFS也常出现在日常命令清单:hdfs dfs -ls /列目录,hdfs dfs -put 本地文件 /目标路径上传文件,hdfs dfs -cat /路径查看文件内容。这类命令不需要背很多,但从get开始,按需查命令手册即可。
5.2 面试与上岗最常被问的命令,本质是考排查思路
面试Linux命令题,面试官大概率不只是要你背参数,而是在考你遇到问题时的思考顺序。我把最常见的几个场景理一下。
"查看某个端口被哪个进程占用"——标准答案netstat -tlnp | grep 8080,新系统上用ss -tlnp | grep 8080,注意有些环境权限不够看不到-p,需要加sudo。扩展问法是"端口没监听但我感觉服务启动了",这时要去看进程是否存在,ps -ef | grep 服务名,再去看日志确认启动是否成功。
"磁盘满了怎么办"——先df -h确认哪个分区满了,再du -h --max-depth=1从根开始往下找大目录,找到后清理日志或用find -mtime +30加上-exec删除过期文件。还没找到就lsof | grep deleted查被删除但仍被占用的文件。这个思路链很长,但每一步都是命令组合的自然推进。
"CPU飙高怎么定位"——top找到那个CPU占用高的PID,然后可以top -H -p PID看这个进程内部的线程。很多公司考的其实是"你知不知道怎么从进程定位到线程",这背后是数不清的实际故障经验。
"分析一个超大日志文件"——先别用vim开,提一下less按需加载,然后tail、grep、awk、sort、uniq组合来做聚合统计,这些命令本身不高级,但能把思路串起来用的人,才是面试官真正想要的。
我个人在实际项目里的感触是,Linux命令的学习路径,永远是"场景驱动"最管用。别试图把几百个命令的参数都背下来,把你工作里遇到的那些重复劳动,一个一个用命令组合去替代掉,用着用着,这些命令就成为肌肉记忆了。哪怕遇到不会的,man手册、--help随时能查,关键是脑子里得有"这件事能用命令做"的意识。
