我最喜欢的 CLI 工具

2025-05-27

我最喜欢的 CLI 工具

之前,我写过我最喜欢的 Mac 应用。但我一半的时间都花在了终端上,而且我有一些 CLI 工具可以让我的生活更轻松。以下是其中一些:

我每天使用的工具

鱼壳

鱼壳网站

Shell——每次打开终端时都会用到的最重要的工具。我以前用过 Bash 和 Z Shell,现在用的是 Fish Shell。它是一款非常棒的 Shell,有很多开箱即用的功能,比如自动建议、语法高亮,以及用 ⌥+→ 和 ⌥+← 在文件夹之间切换。

一方面,这使其非常适合初学者,因为您无需进行任何设置。另一方面,由于它使用的语法与其他 Shell 不同,您通常无法直接粘贴来自互联网的脚本。您要么必须将不兼容的命令更改为Fish 脚本,要么启动 Bash 会话来运行 Bash 脚本。我理解这种改变背后的想法(Bash 并非最易用的语言),但它对我没有任何好处。我很少编写 Bash/Fish 脚本,以至于无法记住语法,因此我总是不得不从头开始重新学习。而且,Fish 脚本的资源比 Bash 脚本少。我通常会阅读文档,而不是从 StackOverflow 复制粘贴现成的脚本。

我推荐 Fish 吗?当然!切换 Shell 很容易,所以试试吧。尤其如果你不喜欢摆弄 Shell,又想用最少的配置就能用得很好。

鱼插件

你可以使用插件为 fish 添加更多功能。最简单的安装方法是使用插件管理器,例如FisherOh My Fishfundle

现在,我仅使用 Fisher 的三个插件:

  • franciscolourenco/done - 在长时间运行的脚本完成时发送通知。我并没有一直打开终端。我使用的是Guake 风格的终端,需要时它会从屏幕顶部下拉,不需要时它会隐藏。有了这个插件,当我运行耗时超过几秒钟的脚本时,我会在脚本完成时收到 macOS 通知。
  • evanlucas/fish-kubectl-completions - 为 kubectl(Kubernetes 命令行工具)提供自动完成功能。
  • fzf - 将 fzf 工具(见下文)与 fish 集成。

我过去有更多的插件(rbenv、pyenv、nodenv、fzf、z),但我切换到不同的工具以避免减慢我的 shell 速度(这是我过去使用 Z shell 时犯的一个错误)。

如果您想查看更多关于 fish 的资源,请查看awesome-fish仓库。与 Z shell 和 Bash 相比,fish 的插件较少,因此如果您想对其进行大量调整,它并非最佳选择。但对我来说,这反而是个优点。它避免了我启用太多插件然后抱怨它太慢 😉。

星舰

Starship 网站

如果要我从这份清单中选出一个我最喜欢的工具,那一定是 Starship。Starship 是一个适用于任何 Shell 的提示符。你安装它,在.bashrc/ .zshrc/中添加一行配置config.fish,剩下的就交给它了。

它显示:

  • 当前目录的 git 状态和不同的符号,取决于您是否有新文件、待处理的更改、存储等。
  • 如果您在 Python 项目文件夹中,则为 Python 版本(同样适用于 Go/Node/Rust/Elm 和许多其他编程语言)
  • 前一个命令执行的时间(如果超过几毫秒)
  • 如果最后一个命令失败,则显示错误指示

星舰提示器正在运行
星舰提示器正在运行

还有海量其他信息。而且,以一种巧妙的方式!如果您不在 git 仓库中,它会隐藏 git 信息。如果您不在 Python 项目中,则不会显示 Python 版本(因为显示它毫无意义)。它不会让您被过多的信息淹没,并且提示符保持美观、实用和简约。

我有没有说过它很快?它是用 Rust 编写的,即使功能如此丰富,它仍然比我之前的所有提示符都快!我对提示符非常挑剔,所以我经常会修改自己的版本。我会从现有的提示符中取出函数,然后将它们粘合在一起,以确保只包含我需要的功能,并且保持快速运行。这就是我之前对 Starship 持怀疑态度的原因。“外部工具不可能比我精心设计的提示符更快! ” 好吧,我错了。试试看,我相信你一定会爱上它!向 Starship 的创造者致以崇高的敬意!

z

z 工具正在运行

“z” 键可让您在文件系统中快速跳转。它会记住您访问过的文件夹,经过短暂的学习后,您就可以使用 在这些文件夹之间移动z path_of_the_folder_name

例如,如果我经常访问某个文件夹~/work/src/projects,我可以直接运行z pro并立即跳转到那里。z 的算法基于频率——频率新近度的结合,效果非常好。如果它记住了你不想使用的文件夹,你可以随时手动将其删除。

它加快了在我的计算机上经常访问的文件夹之间的移动,并为我节省了大量的击键(和路径记忆)。

零点

fzf 在行动

fzf 是“模糊查找器”的缩写。它是一个通用工具,可让您使用模糊搜索查找文件、历史记录中的命令、进程、git 提交等。您输入一些字母,它会尝试在结果列表中的任何位置匹配这些字母。输入的字母越多,结果就越准确。您可能在代码编辑器中熟悉这种搜索类型——当您使用命令打开文件时,只输入文件名的一部分而不是完整路径——这就是模糊搜索。

我通过fish fzf 插件使用它,这样我就可以搜索命令历史记录或快速打开文件。这是另一个每天节省我时间的小工具。

FD

fd 实际操作
find(左)与 fd(右)

与命令类似find,但使用起来更简单、更快,并且具有良好的默认设置。

您想查找一个名为“invoice”的文件,但不确定它的扩展名是什么?或者,它可能是一个包含所有发票的目录,而不是单个文件?您可以撸起袖子,开始为命令编写那些正则表达式find,或者直接运行fd invoice。对我来说,选择很简单😉。

默认情况下,fd 会忽略隐藏的或在 中列出的文件和目录.gitignore。大多数情况下 - 这就是你想要的,但对于需要禁用此功能的少数情况,我有一个别名:fda='fd -IH'

输出色彩很好,并且根据基准(或上面的 GIF),它甚至比 还要快find

ripgrep

ripgrep 实际操作
可怜的 grep(左边)在所有 node_modules 中运行了很长时间才找到有用的信息

与上面提到的类似fdripgrep这是该命令的替代方法grep- 速度更快,具有合理的默认值和彩色输出。

它会跳过被忽略的文件.gitignore和隐藏的文件,因此您可能需要这个别名:rga='rg -uuu'。它会禁用所有智能过滤并使其ripgrep行为与标准 grep 相同。

htopglances

在 Linux 或 Mac 上显示进程信息的最常用工具是top。它是每个系统管理员的好帮手。而且,即使你像我一样主要从事 Web 开发,查看计算机的运行情况也很有用。你知道,看看这次是不是 Docker 或 Chrome 占用了你所有的内存。

htop 实际操作
htop 是 top 的绝佳替代品

top非常基础,因此大多数人都转而使用htophtop它是类固醇中的佼佼者 - 色彩丰富,选项丰富,总体来说使用起来更舒适。

一眼望去;)
一览表可让您快速概览您的系统

glances是 的补充工具htop。除了列出所有进程及其 CPU 和内存使用情况外,它还会显示有关系统的其他信息。

您可以看到:

  • 网络或磁盘使用情况
  • 文件系统上的已用空间和总空间
  • 来自不同传感器的数据(例如电池)
  • 以及最近消耗过多资源的进程列表

我仍然使用它htop来更快地过滤和终止进程,但我用它glances来快速查看电脑的运行情况。它配备了 API、Web UI 和各种导出格式,因此您可以将系统监控提升到一个新的水平。我强烈推荐它!

virtualenvvirtualfish

Virtualenv 网站

Virtualenv 是 Python 中创建虚拟环境的工具(我比内置venv模块更喜欢它)。

VirtualFish 是 fish shell 的虚拟环境管理器(如果您不使用 fish,请查看virtualenvwrapper)。它提供了一系列额外的命令来快速创建、列出或删除虚拟环境。

pyenvnodenvrbenv

pyenv 实际运行
pyenv 可以轻松切换 Python 版本

Pyenv、nodenv 和 ruby​​env 是用于管理我的计算机上不同版本的 Python、Node 和 Ruby 的工具。

假设您想在计算机上安装两个版本的 Python。也许您正在开发两个不同的项目,或者您仍然需要支持 Python 2。管理不同的 Python 版本非常困难。您需要确保不同的项目安装的软件包版本正确。如果不小心,很容易弄乱这个脆弱的设置,并覆盖其他软件包使用的二进制文件。

版本管理器帮了大忙,把这个噩梦变成了一件相当容易处理的事情。好的版本管理器可以全局或“按文件夹”切换 Python 版本。而且每个版本都是相互隔离的。

我最近发现了一个名为asdf的工具,它可以用一个工具取代 pyenv、nodenv、rbenv 和其他 *env,从而控制所有环境。它为几乎所有编程语言提供版本管理,下次我需要为编程语言设置版本管理器时,我一定会尝试一下。

pipx

pipx 徽标

Virtualenv 解决了 Python 包管理的诸多问题,但还有一个用例需要介绍。如果我想全局安装一个 Python 包(因为它是一个独立的工具,正如glances前面提到的),我会遇到一个问题。在虚拟环境之外安装包是个坏主意,并且可能会导致将来出现问题。另一方面,如果我决定使用虚拟环境,那么每次运行我的工具时都需要激活该虚拟环境。这也不是最方便的解决方案。

事实证明,该pipx工具可以解决这个问题。它将 Python 包安装到单独的环境中(因此不存在依赖项冲突的风险)。同时,这些工具提供的 CLI 命令可全局使用。因此,我无需激活任何东西——它pipx会帮我搞定一切!

ctoplazydocker

ctop 实际操作
ctop 实际运行情况(来源: https: //github.com/bcicen/ctop

当你使用 Docker 时,这两个工具都很有用。ctop是一个类似 Top 的 Docker 容器界面。它为你提供:

  • 正在运行和已停止的容器列表
  • 内存使用情况、CPU 等统计信息以及每个容器的附加详细窗口(包含开放端口和其他信息)
  • 用于停止、终止或显示给定容器的日志的快捷菜单

这比尝试从中找出所有这些信息要好得多docker ps

lazydocker 实际操作
lazydocker 是我最喜欢的 Docker 工具(来源: https: //github.com/jesseduffield/lazydocker

如果你觉得这ctop很酷,那就赶紧试试吧lazydocker!它是一个功能齐全的 Docker 终端 UI,拥有更多功能。说到 Docker,我最喜欢的工具就是它了!

我并不每天使用的工具

除了我几乎每天都会用到的工具外,还有一些我多年来收集的工具,我发现它们在某些特定任务上特别有用。比如可以从终端录制 GIF(你可以暂停并复制文本!)、列出目录结构、连接数据库等等。

自制

Homebrew 网站

如果您使用 Mac,Homebrew 无需介绍。它是macOS 上事实上的软件包管理器。它甚至还有一个名为Cakebrew 的GUI 版本。

海胆属

Asciinema 网站

asciinema是一款可用于录制终端会话的工具。不过,与录制 GIF 不同的是,它允许查看者从录制内容中选择并复制代码!

它对于录制编码教程有很大帮​​助——没有什么比输入长命令更令人沮丧的了,因为讲师没有为您提供代码片段。

colordiffdiff-so-fancy

Colordiff 实际应用
colordiff 为你的 diffs 带来一些颜色

我很少再在终端中执行 diff(比较两个文件之间的差异),但如果您需要执行此操作,请使用colordiff而不是不可用的diff命令。colordiff对输出进行着色,因此更容易看到更改,而不必尝试遵循所有“<”和“>”符号。

diff-so-fancy 的实际应用
diff-sofancy - 比 colordiff 更好的替代品

对于运行git diffgit show命令,有一个更好的工具叫做diff-so-fancy。它通过以下方式进一步改善了 diff 的外观:

  • 突出显示改变的单词(而不是整行)
  • 简化已更改文件的标题
  • 去掉 + 和 - 符号(你已经有颜色了)
  • 清楚地指示新的和删除的空行

树 (brew install tree

如果你想展示指定目录的内容,tree有一个好用的工具可以做到。它以漂亮的树状结构显示所有子目录和文件:

$ tree .
.
├── recovery.md
├── README.md
├── archive
├── automator
│   ├── Open\ Iterm2.workflow
│   │   └── Contents
│   │   ├── Info.plist
│   │   ├── QuickLook
│   │   │   └── Thumbnail.png
│   │   └── document.wflow
│   └── Start\ Screen\ Saver.workflow
├── brew-cask.sh
Enter fullscreen mode Exit fullscreen mode

蝙蝠

NANANANANANA,蝙蝠!

类似cat(最常用于在终端中显示文件内容的命令)但更好。

添加语法突出显示、git 装订线标记(适用时)、自动分页(如果文件很大),并且总体上使输出更易于阅读。

httpie

httpie 工具运行中
httpie 实际运行情况(来源:https ://httpie.org/ )

如果您需要发送一些 HTTP 请求并且发现curl使用起来不直观,请尝试httpie

这是一个很好的替代方案。它使用起来更方便,具有合理的默认值和简单的语法,返回彩色输出,甚至支持安装其他插件(用于不同类型的身份验证)。

tldr

简化的手册页。“手册页”包含 Linux 软件的手册,用于解释如何使用给定的命令。尝试运行man catman grep查看示例。它们非常详细,有时可能难以理解。因此,tldr社区致力于将每个手册页的精髓提炼成简短的描述,并附带一些示例。

tldr适用于最流行的软件。正如我所说,这是一个社区的努力,有人会为你记录一个鲜为人知的软件包的可能性很小。但如果它有效,它提供的信息通常包含你正在寻找的内容。

例如,如果您想创建几个文件的 gzip 压缩档案,man tar那么您将会被各种可能的选项所淹没。tldr tar相反,我们会列出一些常见的例子 - 第二个例子正是您想要做的事情:

手册页与 tldr 对比
手册页很棒,但有时使用 tldr 可以更快地找到特定信息

埃克萨

实际操作中

exa可以替代该ls命令。

它色彩丰富,显示诸如 git 状态之类的附加信息,自动将文件大小转换为人类可读的单位,并且保持与 相同的速度ls

虽然我喜欢它,也推荐它,但不知为何,我还是坚持用ls它。大概是肌肉记忆吧?

liteclipgcli

litecli 实际操作

我常用的 SQLite 和 PostgreSQL CLI 解决方案。它们具备自动补全和语法高亮功能,比默认工具好用sqlite3得多psql

马斯

mas网站

mas是一个用于从 App Store 安装软件的 CLI 工具。我这辈子用过一次——当时我正在设置我的 Macbook。我也会用它来设置我的下一台 Macbook。

mas让你在 macOS 中自动安装软件。它可以帮你省去大量的点击操作。而且,既然你正在阅读一篇关于 CLI 工具的文章,我猜你和我一样,不喜欢点击。

我在“灾难恢复”脚本中保存了从 App Store 安装的应用列表。如果发生意外,我希望能够以最小的麻烦重新安装所有应用。

国家教育和研究发展局

NCDU 在行动

终端磁盘使用情况分析器。快速易用。当我需要释放一些空间时,它就是我的默认工具(“哦,我确定 256GB 的磁盘空间足够了!”)。

就这些了

这是一个很长的清单,但希望你今天能发现一些新的东西。

有些工具,例如fdripgrep或 ,httpie是您可能已经了解的工具的改进版本。新版本不仅更易于使用,输出效果更佳,有时甚至速度更快。所以,不要仅仅因为其他人都在使用旧工具就固执地使用它们。

我听到的一个坚持使用“标准 Linux 工具”的常见论点是:

但是,如果你需要登录 Linux 服务器并在那里进行一些工作,该怎么办?你将无法使用那些常用的工具。最好学习如何使用大多数 Linux 发行版内置的工具。

你上次登录 Linux 服务器是什么时候?是那种你无法安装软件,却不得不手动调试问题的服务器吗?我甚至都不记得了。现在很少有人这样做了。也许是时候重新思考你的部署方式,从手动操作转向更具可扩展性的方式了?

不要让您的工具带生锈,并在那里添加一些新的 CLI 工具!


我提到的许多工具都与 Python 编程相关。如果您想了解更多信息并了解我的使用方法,我为 PyCon 2020 大会制作了一个免费视频,名为“现代 Python 开发者工具包”

这是一个两小时的教程,讲解如何搭建 Python 开发环境、使用哪些工具,以及如何从零开始创建一个 TODO 应用程序(包含测试和文档)。你可以在 YouTube 上观看。

文章来源:https://dev.to/switowski/my-favorite-cli-tools-4p4g
PREV
开发人员喜爱的优秀 GitHub 存储库
NEXT
30 个 Dev.to 徽章🏅的完整列表以及如何(几乎)全部获得它们 [WIP] 为 DEV 贡献者徽章添加两个里程碑。#4007 DevCommunity