乐趣区

关于linux:推荐-22-款好用的-CLI-工具

_作者:switowski
策动:万佳
原文链接:https://switowski.com/blog/fa…

作者依据多年的终端应用教训,具体介绍了一些实用的 CLI 工具,心愿它们能帮读者进步生产力。

我大部分的工夫都破费在终端的应用上,我感觉有必要给大家举荐一下比拟好用的终端工具。先给大家列个举荐清单,如下图。

高频 CLI 工具举荐

1、fish shell

Shell- 毋庸置疑,在终端中,Shell 是应用最频繁也最重要的工具。过来,我已经应用过 Bash 和 Z Shell,而现在,我正在应用的是 Fish Shell。这是一个十分优良的终端 Shell 工具,领有许多开箱即用的性能,例如语法主动举荐补全、语法高亮显示或应用快捷键在最近拜访的文件夹之间来回切换。

一方面,它非常适合初学者应用,因为使用者无需进行任何设置。另一方面,因为它应用的脚本语法与其余 Shell 有所差别,因而通常用户不能把拷贝自网上的脚本间接粘贴应用。你必须将不兼容的命令更改为非法的 Fish 脚本,或者启动一个 Bash 会话以运行 Bash 脚本。

https://fishshell.com/docs/cu…

我能了解这种更改背地的起因(毕竟 Bash 脚本不是易于用户应用的语言),但这种不兼容丝毫没有给我带来任何益处。我平时很少编写 Bash / Fish 脚本,所以常常忘记这些语法,因而每次要应用这些脚本时我总是必须从头开始重新学习它。与 Bash 脚本相比,Fish 脚本的资源绝对更少。我通常不会去浏览文档,反复造轮子,而是从 StackOverflow 复制粘贴现成的脚本拿来即用。

尽管后面我提到了 Fish Shell 的几个毛病,然而我还是会举荐你去用一下,因为切换 Shell 工具非常简略,所以很值得你去尝试一下。特地是当你懒得本人去配置 Shell,并心愿通过起码的配置就能取得很好的应用成果的时候,那就更不要错过它了。

Fish 插件

你能够本人增加相干插件来扩大 Fish Shell 的性能。最简略的装置插件的办法就是应用插件管理工具,比方 Fisher、Oh My Fish 或者 fundle。当初,我应用的插件管理工具是 Fisher,我用它装置治理了三个插件:

  1. franciscolourenco/done ——在长时间运行的脚本实现后发送告诉。
  2. evanlucas/fish-kubectl-completions——1 个主动补全 kubectl(Kubernetes command line tool) 命令的插件。
  3. fzf——将 fzf 工具与 Fish 集成在一起的插件。

过来,我有应用很多的插件(比方 rbenv、pyenv、nodenv、fzf、z),然而我改用其余工具以防止影响我的 Shell 的运行速度(这是我过来应用 Z shell 所失去的一个教训)。

下载地址:https://fishshell.com/

2、Starship

如果必须要从本篇文章中抉择一个我最喜爱的终端工具——那非 Starship 莫属。Starship 能够实用于任何 Shell。你只须要装置它,而后在相应的配置文件 .bashrc/.zshrc/config.fish 增加一行配置,剩下的工作交给它来实现就好了。

它能够做到:

  • 依据你是否在代码仓库中增加了新文件、是否批改了文件、是否暂存了文件等状况,用相应的符号示意 git 仓库的状态。
  • 依据你所在的 Python 我的项目目录,展现 Python 的版本号,这也实用于 Go/Node/Rust/Elm 等其余编程语言环境。
  • 展现上一个命令执行所用的工夫,指令运行工夫必须在毫秒级别。
  • 如果上一个命令执行失败,会展现相应的谬误提示符。

还有成千上万的其余信息能够展现。然而,它能以更加敌对的模式智能地给你出现!比方,如果你不在 git 存储库中,它将暗藏 git 信息。如果您不在 Python 我的项目中,则不会有 Python 版本信息,因为显示它没有什么意义。它永远不会给你展现多余信息,始终保持终端的好看,优雅和简洁。

Starship 的运行速度怎么样呢?它是用 Rust 编写的,只管性能如此之多,但依然比我以前应用的所有提醒工具都要快!我对提示信息十分洁癖,因而我常常破解本人的版本。我会依据现有的提醒找到对应的性能代码,而后将其粘组合在一起,以确保 Starship 只有我须要的性能以放弃其疾速运行。“内部工具永远无奈比我精心制作的提醒工具更快!”这就是我对 Starship 持狐疑态度的起因。

下载地址:https://starship.rs/

3、z

“z”能够让你疾速地在文件目录之间跳转。它会记住你拜访的历史文件夹,通过短暂的学习后,你就能够应用 z path_of_the_folder_name 命令在目录之间跳转了。

比方,如果我常常拜访 ~/work/src/projects,我只须要运行 z pro,就能够立马跳转到那里。z 的原理参考了 frecency 算法——一个基于统计 frequency 和 recency 进行剖析的算法。如果它存储了你不想应用的门路文件夹,你随时能够手动将其删除。它进步了我在罕用的不同文件门路之间频繁切换的效率,帮我节俭了键盘击键次数以及大量的门路记忆。

下载地址:https://github.com/rupa/z

4、fzf

fzf— fuzzy finder,即含糊查找器。它是一种通用工具,可让你应用含糊搜寻来查找文件、历史命令、过程、git 提交等。你键入一些字母,它会尝试匹配后果列表中任何地位的字母。输出的字母越多,后果也就越精确。你可能在其余的代码编辑器中有过这种类型的搜寻应用体验——当你想关上某个文件时,只键入文件名的一部分而不必输出残缺门路就能进行查找——这就是含糊搜寻。

我通过 fish fzf 插件插件应用它,因而我能够搜寻命令历史记录或疾速关上文件。这是能够每天为我节俭不少工夫的一个十分棒的工具。

https://github.com/jethrokuan…

下载地址:https://github.com/junegunn/fzf

5、fd

下面动图是 find 命令(左)和 fd 命令(右)的应用比照。

相似于零碎自带的 find 命令,但应用起来更简略,查找速度更快,并且具备良好的默认设置。

不论你想找到一个名为“invoice”的文件,然而不确定文件的扩展名,还是查找一个寄存所有 invoice 的目录,而不单是一个文件。你能够撸起袖子,开始为 find 命令编写那些简单的正则表达式,也能够间接命令行运行 fd invoice。反正对我来说,我只抉择最简略的那个。

默认状况下,fd 会疏忽暗藏的以及在 .gitignore 列出的文件和目录。大多数时候,这也是咱们想要的,然而在极少数非凡状况下,如果须要禁用此性能时,我会给该命令设置一个别名:fda='fd -IH'

你会发现,fd 命令输入的色彩配置很漂亮,而且依据基准测试(上述 GIF),它的执行速度甚至比 find 命令 的还要快。

下载地址:https://github.com/sharkdp/fd

6、ripgrep

上图为 grep(左)与 rg(右)命令执行时的比照。

与上述 fd 指令相似,ripgrepgrep 命令的代替办法,不过 ripgrep 的执行速度更快,而且具备健全的默认配置以及丰盛的黑白输入。

它同样会跳过被 .gitignore 疏忽以及暗藏的文件,因而如果有非凡须要,咱们能够设置指令别名:rga ='rg -uuu'。它会禁用所有智能筛选,并使 ripgrep 的体现与规范的 grep 指令统一。

下载地址:https://github.com/BurntSushi…

7、htop 和 glances

在 Linux 或 Mac 上显示过程运行状态信息最常用工具是咱们相熟的top,它是每位系统管理员的好帮手。而且,即便是像我一样次要从事网络开发,查看计算机的运行状况也很有用。你晓得,只是看一下以后到底是 Docker 过程还是 Chrome 过程吃掉了你所有的 RAM,应该如何做吗?

htop工具是 top 工具的绝佳替代品。

top工具是十分根底的监控工具,提供的性能无限,因而很多人转去应用 htop。htop比起top,劣势很显著——除了性能更加欠缺以外,它的色调搭配也很丰盛,整体上应用起来更加敌对。

借助 glances,还能够让你高深莫测地疾速理解零碎以后状态。

glances 是 htop 的补充工具。除了列出所有过程及其 CPU 和内存应用状况之外,它还能够显示无关零碎的其余信息,比方:

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

我抉择应用 htop 来筛选和终止过程,因为对我来讲,效率进步了不少,我也应用 glances能够疾速浏览一下计算机的运行状况。它提供 API 接口、Web UI 以及反对各种导出格局,因而你能够将零碎监督进步到一个新 Level。因而我在这里强烈推荐一波!

htop 下载地址:https://hisham.hm/htop/

glances 下载地址:

https://nicolargo.github.io/g…

8、virtualenv 和 virtualfish

Virtualenv 是用于在 Python 中创立虚拟环境的工具(比起内置的 venv 模块,我更喜爱 Virtualenv)。

VirtualFish 是 Fish Shell 的虚拟环境管理器(如果你不应用 Fish Shell,请查看 virtualenvwrapper)。它提供了许多命令来执行疾速创立、列出或删除虚拟环境等操作。

virtualenv 下载地址:

https://pypi.org/project/virt…

virtualfish 下载地址:

https://github.com/justinmaye…

9、pyenv、nodenv 和 rbenv

pyenv 能够轻松实现 Python 版本的切换。

Pyenv、nodenv 和 rubyenv 是用于治理计算机上不同版本的 Python、Node 和 Ruby 的工具。

假如你要在计算机上安装两个版本的 Python。比方,你正在从事两个不同的 Python 我的项目,或者因为非凡状况依然须要应用 Python2。不同 Python 版本在电脑上治理很简单。你须要确保不同的我的项目具备正确版本的软件依赖包。如果你不小心的话,很容易弄乱这种软弱的配置并被其余软件包应用的二进制文件所笼罩。

该工具为版本治理提供了很多帮忙,并将这一噩梦变得易于治理。它能够全局或“按文件夹”切换 Python 版本,而且每个版本都是互相隔离的。

我最近找到了一种名为 asdf 的工具,该工具能够将 pyenv、nodenv、rbenv 及其他 env 进行对立治理。它提供了简直所有编程语言的版本治理,下次我须要为编程语言设置版本管理器时,肯定会尝试应用一下。

pyenv 下载地址:https://github.com/pyenv/pyenv

nodenv 下载地址:https://github.com/nodenv/nodenv

rbenv 下载地址:https://github.com/rbenv/rbenv

10、pipx

Virtualenv 解决了 Python 程序包治理中的许多问题,然而还有一个计划能够解决。如果我想在全局环境下装置 Python 软件包(比方它是一个独立的工具,正如后面提到的glances 工具),那么我会遇到全局装置带来的问题。在虚拟环境之外装置软件包不是一个好主见,未来可能会导致意想不到的问题。另一方面,如果我决定应用虚拟环境,那么每次我要运行程序时都须要激活该虚拟环境。这也不是最不便的解决方案。

事实证明,pipx工具能够解决下面提到的问题。它将 Python 软件依赖包装置到独自的环境中(因而不会存在依赖项抵触的问题)。与此同时,这些工具提供的 CLI 命令在全局环境内也可用。因而,我无需激活任何环境——pipx会帮我实现这个操作!

如果你想理解无关 Python 工具的更多信息并想理解如何应用它们,我为 PyCon 2020 会议制作了一个名为“古代 Python 开发人员工具包”的视频。

这是一个长达两个小时的视频教程,内容波及如何设置 Python 开发环境,要应用的工具以及如何从头开始制作 TODO 应用程序(包含测试和文档)。你能够在 YouTube 上进行观看。

https://www.youtube.com/watch…

pipx 下载地址:

https://github.com/pipxprojec…

11、ctop 和 lazydocker

ctop 的实时监控示例

当你应用 Docker 并对其监控时,这两个工具会很有帮忙。ctop是 Docker 容器的顶级接口。它能够为你:

  • 展现正在运行和已进行的容器列表。
  • 展现统计信息,例如内存、CPU 使用率以及针对每个容器的其余详细信息窗口(例如绑定的端口等其余信息)。
  • 提供快捷菜单,不便疾速进行、杀掉指定容器过程或显示给定容器的日志。

这比你尝试从 docker ps 命令中找出所有这些信息要不便多了。

lazydocker是我最喜爱的 Docker 工具

如果你认为 ctop 很酷,请你尝试应用 lazydocker 后再做决定!它是一个十分成熟的领有终端 UI 界面的工具,提供了十分丰盛的性能用于治理 Docker。这是我最喜爱的 Docker 管理工具!

ctop 下载地址:https://github.com/bcicen/ctop

lazydocker 下载地址:

https://github.com/jesseduffi…

低频 CLI 工具举荐

除了简直每天都在应用的工具以外,我多年来还收集了一些给力的工具,这些工具对于一些特定需要十分好用。比方有的终端工具能够用来将终端操作记录成 GIF(并且能够让你在 GIF 中暂停和复制文本!),还有的终端工具能够用于列出目录构造、连贯数据库等,上面我会一一介绍。

12、Homebrew

如果你应用的是 Mac,那我就无需再介绍 Homebrew 了。它是 macOS 上被业界广泛认可的软件包管理器。对了,它还有一个称为 Cakebrew 的 GUI 版本软件,如果感兴趣你能够尝试一下。

下载地址:https://brew.sh/

13、asciinema

asciinema是可用于记录终端会话的工具。然而,与录制 GIF 不同,它能够让用户抉择并复制这些录制中的代码!

这对于录制编码教程来说非常好用。你应该遇到那种难堪的状况——当你筹备跟着视频教程在终端中敲巨长的命令,然而讲师并为你提供这个代码段,你不得不破费很长的工夫去整顿这些简短的命令。asciinema录制的内容,反对间接复制,非常给力。

下载地址:https://asciinema.org/

14、colordiff 和 diff-so-fancy

我很少在终端中应用 diff 操作(比拟两个文件之间的差别),然而如果你须要执行这个操作,能够放弃应用 diff 命令,而是应用 colordiffcolordiff输入能够高亮显示,因而在查看文件差别内容时要不便得多,而不是在 diff 命令输入内容下,费劲地查看所有的“<”和“>”符号来比照文件差别。

如果你感觉还不够,那么我举荐给你 diff-so-fancy。它是比 colordiff 更敌对的一个差别比照工具。

它通过以下形式进一步改善了文件内容差别展现的外观:

  • 突出显示每一行中差别的单词,而不是整行
  • 简化变更文件的题目
  • 去除 + 和 – 符号(色彩差别展现就够了)
  • 分明地指出新行和删除的空行

colordiff 下载地址:https://www.colordiff.org/

diff-so-fancy 下载地址:https://github.com/so-fancy/d…

15、tree

你能够通过 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

16、bat

相似于在终端中罕用的用于显示文件内容的 cat 命令,然而 bat 成果更佳。

它减少了语法高亮显示,git gutter 标记(如果实用),主动分页(如果文件很大)等性能,并且使得输入的内容浏览起来更加敌对。

bat 下载地址:https://github.com/sharkdp/bat

17、httpie

如果你须要发送一些 HTTP 申请,但发现应用 curl 不够直观,那么请尝试一下 httpie。这是一款十分好用的curl 代替工具。正当的默认配置以及简洁的语法使它更易于应用,命令返回也是黑白输入,甚至反对为不同类型的身份验证装置相应的插件。

httpie 下载地址:https://httpie.org/

18、tldr

简化版的命令帮忙手册。“man pages”蕴含了 Linux 软件的手册,这些手册解释了如何应用给定的命令。你能够尝试运行 man catman grep来查看相干命令的帮忙手册。它们形容的十分具体,有时可能难以把握。因而,tldr社区的目标,就是将每个命令的帮忙手册进行简化,不便用户查阅。

tldr实用于简直所有的受欢迎的软件。正如我提到的,这是社区的致力和功绩,尽管不太可能蕴含所有的软件的简化帮忙手册。然而当某个帮忙手册被纳入治理并起作用时,它提供的信息通常就是你要查找的内容。

比方,如果你要创立一些文件的 gzip 压缩存档,man tar能够为你提供可能的参数抉择。而 tldr tar 会列出一些咱们常见的示例——如图所示,第二个示例正是你要执行的操作:

“man pages”展现的信息太全面了,然而很多时候应用 tldr 能够更快地帮你找到特定信息,这才是用户真正想要的。

tldr 下载地址:https://tldr.sh/

19、exa

exals 命令的一个可代替计划。

它色彩艳丽,还能够显示 git 状态等其余信息,主动将文件大小转换为不便人们浏览的单位,并且所有这些都放弃与 ls 简直雷同的执行速度。尽管我很喜爱这个工具并举荐给你们,但因为某种原因,我依然保持应用 ls。

exa 下载地址:https://the.exa.website/

20、litecli 和 pgcli

这是我首选的 SQLite 和 PostgreSQL CLI 的解决方案。借助主动提醒和语法突出显示,它们比默认的 sqlite3psql工具要好用很多。

litecli 下载地址:https://litecli.com/

pgcli 下载地址:https://www.pgcli.com/

21、mas

mas是一个用于从 App Store 装置软件的 CLI 工具。我目前为止,我仅仅应用过它一次——设置我的 Macbook 电脑软件。未来,我也将应用它来设置我的下一台 Macbook。mas可让你主动在 macOS 中装置软件。它解放了你大量的点击操作。而且,鉴于你正在浏览这篇无关 CLI 工具的文章,所以我大胆地认为,大家都和我一样,不喜爱无聊的单击操作。

我在“劫难修复”脚本中保留了从 App Store 装置的应用程序列表。如果我的电脑真的产生了什么意外状况,我心愿可能以最小的代价重新安装所有内容。

mas 下载地址:https://github.com/mas-cli/mas

22、ncdu

这是在终端进行磁盘剖析时应用的工具,它应用起来简略快捷。当我须要开释一些硬盘空间时,会默认应用这款工具。

ncdu 下载地址:https://dev.yorhel.nl/ncdu

23、总结

以上举荐工具清单的确很长,然而我心愿有一些工具真的可能带给你不便,进步你的生产力。fdripgrephttpie 等工具可能是你以前相熟的工具的改良版本。这些工具的改良版本除了更易于应用之外,它们还提供更敌对的输入,执行速度甚至更快。所以,咱们要多多尝试并承受新的事物,不要仅仅因为大家都在应用旧工具而只局限在旧工具的应用上。事物都是在向前倒退的,穷则变,变则通,通则久。大家一起共勉。

退出移动版