研发效率破局之道
葛俊
前 Facebook 内部工具团队 Tech Lead
34093 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
开篇词 (1讲)
研发效率破局之道
15
15
1.0x
00:00/00:00
登录|注册

27 | 命令行:不只是酷,更重要的是能提高个人效能

安装和设置方法
Tmux的工作流程
Fish的配置
Zsh的配置
Bash的配置
配置主题和插件
安装oh-my-fish
配置主题和插件
安装oh-my-zsh
难点和配置文件
Mosh
Tmux和Screen
其他配置
命令行提示符的配置
Fish
Zsh
Bash
iTerm2的功能和特点
常见替代工具
特征
思考题
远程SSH的处理
具体的Shell配置
选择Shell
选择模拟终端
命令行工具的环境配置

该思维导图由 AI 生成,仅供参考

你好,我是葛俊。今天,我要与你分享的主题是,命令行下的高效工作技巧。
我先和你讲一个有意思的话题吧。命令行工具常常会给人一种黑客的感觉,好莱坞的电影里面常常出现命令行窗口的使用。不知道你听说过没有,很多好莱坞电影在拍摄时使用的其实是一个叫作nmap的工具。这个工具是做安全扫描的,只不过因为它的显示特别花哨,所以被很多电影采用。在 nmap 官方网站上,还专门列出来了这些电影的名单。
类似这种可以让自己看起来很忙的工具还有很多,比如Genact。下面是一个使用 Genact 的录屏,当然这里的命令并没有真正运行。这可能是整个专栏中,唯一一个让你看起来效率很高,实际上却是降低效率的工具,但说不定对你有用,你懂的。
讲完这个娱乐性的话题,我们进入正题吧。

为什么要使用命令行?

GUI 图形界面的出现是计算机技术的变革,极大方便了用户。但在这么多年后的今天,命令行工具为什么仍然有如此强大的生命力呢?
在我看来,对软件工程师来说,想要高效开发就必须掌握命令行,主要原因包括:
虽然鼠标的移动和点击比较直观,但要完成重复性的工作,使用键盘会快捷得多。这一点从超市的结算人员就可以看出来,使用键盘系统的收银员总是噼里啪啦地很快就可以完成结算,而使用鼠标点击的话明显慢很多。
作为开发人员,可以比较容易地使用命令行的脚本,对自己的工作进行自动化,以及和其他系统工具联动。但使用 GUI 的话,就会困难得多。
命令行通常可以暴露更完整的功能,让使用者对整个系统有更透彻的理解。Git 就是一个典型的例子,再好的 GUI Git 系统都只能封装一部分 Git 命令行功能,要想真正了解 Git,我们必须要使用命令行。
有一些情况是必须使用命令行的,比如 SSH 到远程服务器上工作的时候。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了命令行工具在提高个人效能方面的重要作用,以及环境配置的关键步骤。作者首先强调了命令行工具的魅力和软件工程师掌握命令行的重要性,包括高效的键盘操作、脚本自动化、系统功能暴露和远程工作需求。随后,文章详细介绍了命令行工具的环境配置步骤,包括选择模拟终端和Shell,并推荐了iTerm2、Bash、Zsh和Fish等工具及其配置方法。此外,还分享了关于远程SSH处理的优化建议,包括使用Tmux和Mosh来保持连接不中断。最后,作者强调了优化和统一命令行工作环境对提升个人和团队研发效能的重要性。整体而言,本文内容丰富,涵盖了命令行工具的重要性和环境配置的关键步骤,对读者快速了解命令行工具的概览具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《研发效率破局之道》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 我来也
    这篇文章我也有些想说的. ----- 我用这些工具可以做到的事情有: 1.每次即使是重启了系统(虽然mac不长重启),也能在有限的4步后恢复到工作状态. 之前的各种连接,打开的文件,执行的程序都还在,路径都不用切换,相对位置都一样. 2.由于使用了mosh,即使是电脑断网了,休眠了,只要网络恢复了,连接依旧还在那里. 3.每次vi的窗口太多了,只需要退出后重新执行 `vi -S .workspace` 就可以恢复到最初的状态. 4.即使电脑忘记了携带,换了另外一台电脑,只要能ssh/mosh到服务器上, 执行mux命令就可以进入到之前服务器上的工作状态.比较方便快速处理线上问题. ----- 我的开发工具,老师的文章几乎都覆盖了,写的也很详细了.我就不重复了. 但是有一个工具tmuxinator,我想要着重推荐下. 这个可以使用yaml文件自定义执行的操作命令. 编辑好配置文件后,可以一条命令,同时开启很多tmux窗口,并布局好,执行好一系列的命令. 有了tmuxinator,即使是重启了电脑,也不怕终端丢失,有限的几步就可以恢复现场了. ----- 我工作中的使用场景是这样的: 1.开启iTerm2 2.本地执行mux(tmuxinator的别名),开启多个标签,分别执行预定义的命令.[重点] 3.在mux打开的窗口中执行Ctrl+d.(临时端口该会话 为一下步做准备) 4.使用`tmux ls && read session && tmux -CC attach -t ${session:-default} || tmux -CC new -s ${session:-default}` (这个命令可放在iTerm2的Profile-Command中 不用记) 执行后,选中tmux的会话名,会在新的iTerm2窗口中打开该tmux的各标签. 几乎不用记tmux的各种命令,像原生使用iTerm一样切换各标签. 关于第2步,我想着重说一下. 我一般是开启9个窗口. 前几个标签使用mosh登录到服务器上(测试&预生产&线上环境), 再在服务器上使用mux开启多个标签页.不同的标签页可能切换到不同的路径,执行不同的命令. 再用一个标签在本地执行mux.把会用到,但不那么频繁命令集成进去.(比如本地测试时的几个目录,避免频繁的切换路径.) 后面的几个标签就会打开最常使用的路径.比如项目目录. 另外我用VIM开发项目,我一般都会为项目配置一个文件(比如叫.workspace). 使用`vi -S .workspace`就可以直接进入到工作状态.比如打开常用文件,执行常用命令. 这个文件实际上就是vi中的命令,避免每次重新输入.我的文件内容大致如下 ``` " 加载文件 badd app/init.go badd main.go " 切换buffer 打开侧边栏 buffer 2 bdelete 1 call tagbar#OpenWindow() ``` ----- 推荐阅读的博文(也是我在网上找的,写的非常详细) Alfred 强烈推荐阅读:http://louiszhai.github.io/2018/05/31/alfred/ Tmux 强烈推荐阅读:http://louiszhai.github.io/2017/09/30/tmux/ tmuxinator 初步了解下:https://www.jianshu.com/p/49b70f705acf Swish 初步了解下:https://sspai.com/post/55285 ----- 我的工作环境 我的装备是:Macbook Pro 13' + 4K显示器 + HHKB蓝牙键盘 我的开发工具是:iTerm2 + oh-my-zsh(比老师多一个autojump插件) + mosh + tmux + tmuxinator(配合tmux使用.使用yml配置文件) + vim 另外的系统工具是:Alfred + SizeUp + Swish(这个是用鼠标的 但也强烈推荐). 为了使用mosh,我才换的苹果电脑.现在也才使用了一年时间. ----- 题外话 我是十一期间在池老师的twitter上看到的<特别放送 | 每个开发人员都应该学一些VIM>推荐,然后连着看了四篇. 觉得比较适合我吧.虽然老师讲的东西我大多都懂,但是系统的跟着老师来一遍,也觉得蛮过瘾的. 我工作了十年,但周边可交流的人并不多.他们大都是用的IDE. 就我比较独特,用的VIM,对命令行和一些工具也比较感兴趣.较少用鼠标. 今天早上等优惠劵到账后就来买了专栏,接着看.(都忘记使用返现链接了😁)

    作者回复: 这个回复和@Johnson的回复都非常高质量。在进行讨论的时候该给出了很好的建议和工具。 关键字:Workspace as Code!! tmuxinator 我还是第一次听说。看了一下,确实对保持Tmux Session做了进一步的工作。总的来说,你这样的配置可以说是把工作环境作为Code。Workspace as Code :) 对减少环境的设置很有效!!推荐你写一篇博文把这个分享给大家。 另外几个链接也不错。推荐大家都看看 :)

    2019-10-26
    2
    13
  • Johnson
    tmux和screen之间的区别还真没怎么注意过,不过从开始用的时候感觉screen就比较老了,tmux更新好像更积极一些,可能区别在于tmux更强调强大的交互?session,window,pane 反正tmux给我的感觉就是分屏好用强大。 Terminal 在MacOS上大多数人都会选择iTerm2,我以前也是,不过现在我发现它大部分的功能我都用不到,而且它对xterm支持的并不是很全,我想让spacemacs在terminal中的光标的形状和颜色跟着模式变,这样非常棒,如果是iTerm2的话我就没法用xterm的控制字符序列来改变光标的形状和颜色,得用它自己的控制序列。所以我现在就直接用MacOS自带的terminal+MacForge(扩展管理)+MouseTerm plus(实现了xterm的OSC 12/112),仅供大家参考。 Windows上的terminal很多,爱用什么的都有,但我感觉在Windows上没有类linux系统的搭配光有terminal是不够的。我是用Msys2,它自带的mintty就我的尝试来说,是唯一能满足我所有需求的terminal,作者维护开发也很积极,能让spacemacs完美的工作。Msys2可以让我们使用ssh sshserver,mosh,tmux以及常用的linux命令,体验很好,虽然比起WSL稍微慢点儿,但这个方案可以让你在windows很多版本上都能有同样的体验,不像WSL你必须得起码是win10。 Linux上的terminal更多了,感觉所有的服务器都有xterm,但是它确实太老了,gnome-terminal算是不错的选择吧,之前比较喜欢用xbuntu,所以觉得xfce-terminal好,gnome-terminal和mac上的terminal的配置不支持配置文件的方式真是蛋疼,没法把配置放到dotfiles的git仓库里面,xfce-terminal就可以,但后来发现xfce-terminal对xterm控制序列支持的更差。不过现在看来我都是在windows或mac登到linux上,所以对linux上的terminal需求不是很大,感觉还好。 Shell 自己开发机还是zsh最合适,尤其是oh-my-zsh的git, zsh-syntax-highlighting, zsh-autosuggestions这三个插件,绝对对得起这篇的题目。这里提醒大家git插件使用的时候,如果进入一个code量特别大的repo比如LLVM这种,你会发现git插件把shell拖得特别卡,解决方法在https://blog.csdn.net/a_ran/article/details/72847022。 Bash在服务器上最常见了,大家支持的比较多,好多公司发布一些软件产品中的脚步也是用bash执行,有时候工作需要编个小脚步也是不错的。 Csh或者叫tcsh在一些EDA工具或者硬件芯片开发的服务器上基本都是默认,我勒个天,在bash或zshrc里面一句话的功能,在csh里面能把你搞死,就编脚本而言,我们还是远离它吧,哈哈哈。 SSH/Mosh+Tmux Mosh + tmux 绝对是绝配,只可惜好多公司内部安全部门不给开放端口没法用,这里有个有趣的小问题,既然Mosh肯定能连回到server,那按理上为什么我们还需要tmux呢?大家可以想一下,答案见keithw在https://github.com/mobile-shell/mosh/issues/394的回答。 如果没有mosh,可以用autossh来自动重新发起ssh连接并且自动attach到当时断掉的那个tmux session,具体方法请看我的github仓库https://github.com/Johnson9009/dotfiles/blob/master/shell/zsh/local.alias.zsh.template#L36。不过即使这样也没法跟mosh比。 最后说我认为最重要的 dotfiles,也就是用github仓库管理这堂课讲的所有工具的配置,它是一种可以把linux系统的home目录用git仓库管理的思路。如果这些工具的配置文件不用git仓库管理起来的话,个人效能还是不够高,管理好的话,到了一个新公司,也许只需要一两个小时你就可以将你高效的环境建立起来。更关键的是,这种用github管理起来的方式,可以让你不断的优化你的这套个人高效能环境。我现在就切身体会到了它的好处,只不过我太懒,没有什么文档说明我的dotfiles仓库,如果大家有兴趣借鉴可以去看commit message和注释,这两个写的还是蛮认真的。 说了这么多,欢迎大家一起分享,以及拍砖,哈哈哈。

    作者回复: 这个回复和“我来也”的回复都非常棒。下面是我的一点反馈: 1. 这个关于Tmux vs. Mosh的解释的确很清楚:“Well, first off, if you want the ability to attach to a session from multiple clients (or after the client dies), you should use screen or tmux. Mosh is a substitute (in some cases) for SSH, not for screen. Many Mosh users use it together with screen and like it that way.” 2. “我想让spacemacs在terminal中的光标的形状和颜色跟着模式变,这样非常棒,如果是iTerm2的话我就没法用xterm的控制字符序列来改变光标的形状和颜色,得用它自己的控制序列。所以我现在就直接用MacOS自带的terminal+MacForge(扩展管理)+MouseTerm plus(实现了xterm的OSC 12/112),仅供大家参考。” 这个推荐写一篇博文解释一下。我没有看太明白。 3. dotfiles 这种方法我有使用。我没有使用GitHub宫内宫开仓,用的是GitLab的一个私有仓中。效果还不错。后面可以考虑公开出来 :)

    2019-10-26
    4
    7
  • hexinzhe
    请葛大展开讲讲ipad ssh 工作流

    作者回复: iPad上SSH,我使用的是Termius(https://apps.apple.com/us/app/termius-ssh-client/id549039908)。它支持Mosh。 这里我放了一张截图: https://sharemyfiles.s3-ap-southeast-1.amazonaws.com/iPad-termius.png 我后面专门写一篇iPad上的工作流的文章。

    2019-10-25
    3
  • Hills录
    coder (vs code 的web 版本)+ tmux,用了很久了,随时随地任何设备恢复开发环境。

    作者回复: coder 这个蛮酷的!谢谢分享

    2019-11-25
    2
  • 技术修行者
    这篇很实用!赶紧把自己的工作台配置优化一下!

    作者回复: 我现在会在极客部落中偶尔分享一些类似的小技巧。有空你可以看看 :) https://horde.geekbang.org/channel/list/5

    2020-02-26
    1
  • 一品凡心
    对于一些内部工具,我有时候拿screen管理轮询进程,随时可以穿梭进去,看现场log,也不用tail,有问题,直接杀掉,处理,再启动运行,退出screen

    作者回复: Screen/Tmux是利器!

    2020-05-27
  • Jxin
    🤣手贱买的surface。压着重装黑苹果的想法,周末去研究下win的窗口先。

    作者回复: 哈哈,研究回来给大家介绍一下 :)

    2019-10-25
  • Alan He
    iTerm2+Tmux的使用分享可以讲下就更香了,iTerm2现在集成了Tmux
    2022-05-01
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部