
不得不说,Claude code、codex 让 cli 再次伟大
但是,很多开发者明明每天都住在终端里,却还是把终端当成一个很原始的一次性输入框在用。
输错了,就按半天退格。 想回到刚才那个目录,就把整条路径再打一遍。 忘了上条命令怎么写,就开始疯狂按上箭头。 任务跑到一半,才想起来自己没开 tmux,于是整个人都紧张起来。
说人话就是:我们不是不会用 shell,而是长期忍受了太多本来可以避免的小摩擦。
我的看法是,shell 技巧真正有价值的地方,不在“炫”,而在减少重复动作、保住上下文、降低犯错概率。你学到的不是几个快捷键,而是一种更省脑子的工作方式。
很多人提到 shell,会想到命令多、参数多、记忆负担大。但我觉得,日常里最烦人的其实不是这些。
最烦人的是状态不断丢失。
你刚刚已经输入了一长串命令,只是前面有个路径写错了; 你刚刚才切到一个很深的目录,下一秒又得回来; 你明明五分钟前跑过一条正确命令,现在却又得从历史里把它挖出来; 你已经让一个长任务跑起来了,却发现它还绑在当前 terminal 上。
这类问题的共同点是:你不是不会做,而是在反复恢复刚刚已经拥有过的上下文。
所以我更愿意把命令行技巧分成三类:
这个分类比“记 20 个快捷键”更有用,因为它直接对应你每天最常见的痛点。
不要再按字符级别和自己较劲。
最值得马上上手的,是这几个:
Ctrl + W:删掉光标前一个词Ctrl + U:删掉光标到行首Ctrl + K:删掉光标到行尾Ctrl + Y:把刚才 cut 的内容粘回来Ctrl + A / Ctrl + E:跳到行首 / 行尾如果你经常在命令里改路径、改参数、改文件名,这套东西几乎立刻见效。
举个很普通的场景。
你写了一条很长的 rsync 或 docker run,结果发现前面的目标路径错了。很多人的默认反应还是:按住 Backspace,慢慢删回去。问题不是这会多花 3 秒,而是这 3 秒会反复发生,而且它会不断打断你的思路。
Ctrl + U 的价值就在这儿。它不是让你“更专业”,而是让你保住那条已经写好的命令,再回来继续。
我尤其喜欢 Ctrl + U 配合 Ctrl + Y 的感觉,因为它本质上是在告诉你:不用每次都重来。
这比单纯快一点更重要。
另外一个我觉得被低估的,是 fc。
很多复杂的一次性命令,其实已经不适合在 prompt 里硬改了。你加一个 pipe,再加一个 awk,再加一个 xargs,命令很快就会长得像意大利面。这个时候,与其在一行里左右横跳,不如直接 fc,把上一条命令扔进 $EDITOR 里正经改。
这件事的价值,不只是舒服,而是它把“临时命令”升级成了“可认真编辑的文本”。
这也是 shell 体验的一个分水岭:
很多人觉得终端低效,是因为路径太长、命令太碎、上下文切得太快。我同意一半。
更准确地说,是大家没有把 shell 提供的上下文复用机制用起来。
我最喜欢的几个例子是:
cd -:回到上一个目录pushd / popd:把目录切换做成一个栈$_:取上一条命令的最后一个参数!$:把上一条命令的最后一个参数拿出来用这些看起来都不复杂,但它们解决的是一种特别常见的低级体力活:你明明刚刚已经输入过、定位过、创建过,为什么还要再打一遍?
比如:
mkdir -p /some/really/long/path/newdir && cd"$_"这里 $_ 指向上一条命令最后一个参数,也就是你刚创建的目录。看起来只是少打一段路径,但真正省下来的不是字符数,而是注意力切换。
你不用再确认一次路径是否一致,不用担心复制错一层目录,也不用把精力花在重复劳动上。
cd - 也是一样。
我觉得它是那种“知道以后会后悔自己为什么这么晚才知道”的命令。你在两个目录之间来回看配置、日志、代码时,用它切换比手打路径自然太多。很多人以为自己缺的是更高级的 shell 知识,实际上你可能只是缺一个能减少来回折返的动作。
如果你的工作经常要在多个目录之间穿梭,pushd / popd 甚至比 cd - 更稳。因为它不是二选一切换,而是显式维护一个目录栈。说白了,它让目录跳转从“碰运气记忆”变成“有结构的返回”。
这也是我对 shell 的一个基本判断:好用的终端,不是更快输入,而是更少重新定位。
Ctrl + R:别再考古了如果你还在靠上箭头翻历史命令,那基本等于拿目录树当老虎机。
Ctrl + R 做反向历史搜索,是 shell 里最值得养成肌肉记忆的功能之一。你只需要记住命令中的一个关键词,历史就能自己浮上来。
它厉害的地方不是“快”,而是它把“我以前肯定写过,但我不记得完整写法”这件事,变成一个可搜索的问题。
很多终端焦虑,本质上都是检索能力太差。Ctrl + R 就是在帮你把过去的自己变成可调用的资源。
bg + disown:别让长任务绑架你这个场景太真实了:
你开了个长任务,可能是导数据、跑训练、同步文件,过了一会儿才发现,自己居然没在 tmux 或 screen 里开。
Ctrl + Z 暂停bg 放到后台继续跑disown 脱离当前 shell这套组合不能替代 tmux,但在“已经犯错了”的瞬间,它是救命的。
我喜欢这种技巧的原因是,它不是教你如何完美,而是教你如何在不完美的情况下把损失降下来。
这比很多“最佳实践”更接近日常工作。
|& tee file.log:别让错误信息只在眼前闪一下command |& tee file.log 这个小技巧,我觉得每个经常跑脚本的人都该会。
普通的 | 只接 stdout,很多真正关键的错误都在 stderr 里。如果你一边想看输出,一边又想把它完整存下来,|& tee 真的很省事。
它的价值不是日志更漂亮,而是当任务失败时,你能回头定位,而不是只记得“刚才屏幕上好像闪过一个报错”。
对开发者来说,很多所谓的效率,其实都不是跑得更快,而是出错以后还能追得回来。
命令行效率,不主要取决于你会多少命令,而取决于你有没有把那些反复打断自己的小动作消掉。
少删一点。 少重打一遍。 少丢一次上下文。 少把日志和任务弄丢。
这些事情听上去都不“高级”,但它们比再背 20 个炫技命令更值得普通开发者投入。
值不值得用?看你是不是每天都在终端里生活。
如果是,那我建议别试图一口气记住所有技巧。挑两个就够了:
比如 Ctrl + U + Ctrl + R,或者 cd - + |& tee。
你会很快发现,真正改善体验的不是某个神奇命令,而是你开始把 shell 当工作台来布置,而不是继续把它当毛坯房硬住。