命令行工具¶
基本概念¶
命令行界面(CLI),是一个和图形用户界面(GUI)相对的概念:
- 在命令行界面里,用户输入文本命令来执行操作
- 在图形用户界面里,用户使用按钮或类似的元素来执行操作
终端(Terminal)提供了一个命令行界面,并且运行着 shell
。shell 是一类程序,会接收输入、执行命令并输出结果。因此你可以在终端里输入文本命令来和操作系统交互。
分类¶
如前所述,可以认为 shell 就是一个 CLI 程序。所有的系统都会自带 shell。在 Linux 发行版里,这通常是 bash
。在 Windows 里,这通常是 cmd
和 powershell
。
除 shell 外,包管理器也是一类重要的 CLI 程序。同样的,大多数系统都会自带包管理器,我称其为系统包管理器。在 Linux 发行版里,这可能是 apt
、pacman
、yum
等;而在较新的 Windows 里,这一般是 winget
。
此外还有一类被称为 coreutils 的 CLI 程序,它们是类 UNIX 系统的核心命令行工具,提供了文件操作、文本处理、信息获取等实用功能。它们通常会被预装在所有的 Linux 发行版里。Windows 系统并没有预装这些程序,不过 powershell 似乎以内置命令的方式实现了部分功能。
然而以上仅仅是 CLI 工具的冰山一角。CLI 程序非常多,可能比你所知道的、有图形界面的软件还多。一些 CLI 程序尽管不会预装在系统里,但却可以显著提高开发效率。因此作为开发者,简要了解一下这部分 CLI 工具也是有用的。
本教程不会介绍那些预装在大多数系统里的 CLI 程序,因为这样教程会变得很无趣。我会分享一些我认为有趣的或好用的工具,并部分参考了 awesome-shell
我把这些工具简要分成了以下几类
与特定编程语言有关的 CLI 工具,比如编译器、解释器、调试器、语言包管理器、构建工具、格式化工具、静态检查工具、性能分析工具、内存分析工具等就不列举在这里了,可以去编程语言章节查阅有关特定语言的部分
版本管理¶
- git 我觉得开发者已经离不开 git 了,想象不出来没有 git 世界会变成怎样
图文处理¶
- graphviz 代码生成图片
- pandoc 文档格式转换
- miktex 一种 LaTeX 的发行版,这是一个文字排版工具,我认为比 texlive 更好
- typst 新一代文字排版工具,没用过,但语法确实比 LaTeX 简单多了
- weasyprint HTML 转 PDF 工具,不过可能更习惯使用浏览器的打印功能,但命令行好处就是能够自动化
脚本增强¶
- just 语法类似 make 但不是构建系统,而是专门用来写脚本的工具,因此可以为此进行优化让其更易用,比如省了很多
.PHONY
。其实把 make 当作脚本工具是种对 make 的滥用,毕竟 make 本意其实是一个构建系统(从名字就能看出来),而 just 则专门为脚本设计,适合仅想写脚本而不关注构建的人(从名字也能看出来)。并且 just 可以选择执行脚本的 shell,是一种很方便的跨平台脚本工具,没有 just 可能每个 shell 都要准备一个脚本文件,现在写一起让用户选择 shell 就行了。 - shellcheck 脚本静态检查
shell 集成¶
- fzf 如果想集成到 powershell 里需要额外插件
- zoxide 快速工作目录跳转
- starship 自定义 prompt,美化就是生产力
:)
coreutils 替代¶
- eza 替代 ls
- bat 替代 cat
- delta 替代 diff
- ripgrep 替代 grep
- tldr 替代 man,tldr 就是太长不看的意思,懒人福音,没有 man 那样详细的文档,只给出具体的示例,你选择一种用法后会指导你替换掉其中的参数
- fd 替代 find
小玩具¶
- cloc 统计代码行数
- fastfetch 获取系统信息,很酷,有种极客的感觉
- gh GitHub 的 CLI 工具,没用过,感觉像玩具