为什么程序员都该学点命令行?[视频]

251 阅读3分钟
原文链接: zhuanlan.zhihu.com

今天看到一个知乎问题, 为什么总有人极力推荐使用命令行操作而非图形界面?。因为平常使用终端和命令行工具比较多,录个小视频介绍下我的一点经验。

对于开发者来说,你或多或少地都会接触到命令行,甚至很多用 mac/linux 的程序员只在终端下就能完成大部分工作。 那为什么现在 GUI 工具这么丰富的情况下我们还要学习使用一些命令行工具呢? 笔者觉得命令行有这样一些优势,我会在视频里进行演示。

为什么程序员都该学点命令行

自动化

终端下的一大优势就是你可以用 shell/python 等脚本来完成很多自动化工作,比如进程自动重启,定时任务等。 比如我有这样一个需求,每次修改代码的时候重新跑单测。我们可以用一个文件监控工具监控文件变动之后自动执行测试命令。

pip install when-changed

然后我们把一下代码保存到一个 test.sh 的文件里,加上可执行权限 chmod +x test.sh

#!/usr/bin/env bash

# pip install when-changed, 监控文件变动并且文件修改之后自动执行 pytest 单测,方便我们边修改边跑测试
 when-changed -v -r -1 -s ./    "py.test -s $1"
'./test.sh somefile.py'

每次我们改动了代码,就会自动执行代码里的单元测试了。pytest 会自动发现以 test 开头的函数并执行测试代码。良好的工程需要我们用单测来保证,将来即使修改了内部实现逻辑也方便做回归验证。

再举个例子,我经常使用谷歌浏览器的 copy as curl 命令来把一个请求复制成 curl 命令,然后我想把它转成 requests 请求, mac 终端下可以这么搞,假设你已经拷贝好了:

# pip install uncurl
pbpaste | uncurl

你就会看到代码转成 python requests 代码输出啦。然后你可以修改各种参数来进行调试。

终端下 find, htop, curl/uncurl, pyenv, nvm, git, tmux 等一大堆可以提升工作效率的命令行工具。

全键盘操作

我平常使用终端 neovim 编写 Python 代码,使用 Iterm2 + Oh-my-zsh + neovim + Tmux 全程纯键盘操作,打字过程不会打断。 对笔者来说还是挺喜欢这种感觉的,可以葛优躺捧着键盘完成所有编辑操作,还可以用 Poker2/HHKB 之类的迷你键盘,把手指集中在主键盘区。

批量与组合操作

比如我想删除一堆文件直接 cd 到一个目录然后执行 rm *.mp4,使用文件管理器你需要手动选择很多文件操作。 unix 哲学之一就是 "do one thing, and do it well",但是 unix 很多工具都可以通过管道组合使用。 我想删除一个项目下的所有 pyc 文件,可以直接这么用:

find . -name '*.pyc' -delete

比如我想找出所有包含 python 单词的文件并且把结果重定向到一个文件(ag 是一个需要单独安装的搜索命令)

ag python > python.txt

通过管道把一个命令的输出作为另一个的输入,我们可以统计当前 ls 的结果有多少行:

ls | wc -l

服务器操作

某些场景下比如登录到 linux 服务器只有命令行可用,后端和运维工程师经常和服务器打交道,熟悉命令行会大大提升工作效率。 比如 tmux 终端复用工具就非常方便地去管理终端会话。

对于普通用户来说,我觉得倒是没有太大必要使用命令行。 以上只是笔者日常使用到的一些经验,大家有啥小技巧可以留言交流。