在此之前,我曾写过我最喜欢的Mac应用程序。但我有一半的时间是在终端上度过的,我有几个CLI工具,可以让我的生活变得更容易。以下是其中一些:
外壳-您每次打开终端时使用的最重要的工具。我过去使用过Bash和Z Shell,目前我使用的是FISH。它是一个很棒的Shell,有很多开箱即用的功能,比如自动建议、语法突出显示,或者使用⌥+→和⌥+←在文件夹之间切换。
一方面,这使得它非常适合初学者,因为您不需要设置任何东西。另一方面,因为它使用与其他shell不同的语法,所以您通常不能仅仅从互联网上粘贴脚本。您必须将不兼容的命令更改为fish脚本,或者启动Bash会话来运行bash脚本。我理解这个改变背后的想法(Bash不是最容易使用的语言),但它对我没有任何好处。我编写bash/fish脚本的次数太少,以至于无法记住语法,所以我总是必须从头开始重新学习。而且,用于fish脚本的资源比用于bash脚本的资源要少。我通常最后会阅读文档,而不是从StackOverflow复制粘贴现成的脚本。
我推荐吃鱼吗?是!。换壳很容易,所以试一试吧。尤其是如果您不喜欢修补您的shell,并且想要用最少的配置就能很好地工作的话。
你可以用插件给鱼添加更多的功能。安装它们最简单的方法是使用插件管理器,如Fisher、Oh my Fish或Fundle。
franciscolourenco/完成-当长时间运行的脚本完成时发送通知。我没有一直开着的航站楼。我使用的是Guake风格的终端,它会在我需要时从屏幕顶部弹出,在不需要时隐藏起来。有了这个插件,当我运行耗时超过几秒的脚本时,我会在脚本完成时收到MacOS通知。
我过去有更多的插件(rbenv、pyenv、nodenv、fzf、z),但我切换到不同的工具以避免我的shell变慢(这是我过去对Zshell所做的错误)。
如果您想看到更多的鱼类资源,请查看AWOWE-FISH资源库。与Z shell和Bash相比,FISH的插件更少,所以如果你想对其进行大量调整,这并不是最好的选择。对我来说-这是件好事。它阻止我启用太多插件,然后抱怨它的😉速度太慢。
如果让我从整个列表中选择一个最喜欢的工具,那就是“星际飞船”。星际飞船是一个适用于任何炮弹的提示符。您只需安装它,将一行配置添加到您的.bashrc/.zshc/config.fish中,它就会处理剩下的事情。
当前目录的GIT状态和不同的符号,具体取决于您是否有新文件、挂起的更改、存储等。
Python版本(如果您在Python项目文件夹中)(同样适用于Go/Node/Rust/Elm和许多其他编程语言)。
执行上一条命令所需的时间(如果超过几毫秒)。
还有无数的其他信息。但是,以一种聪明的方式!如果您不在git存储库中,它会隐藏git信息。如果您不在Python项目中-没有Python版本(因为显示它没有意义)。它不会用太多的信息让你不知所措,提示符保持漂亮、有用和简约。
我提过它很快吗?它是用铁锈写的,即使有这么多功能,它仍然比我以前所有的提示都要快!我对我的提示语非常挑剔,所以我通常会修改我自己的版本。我从现有的提示中提取功能,并将其粘合在一起,以确保我只有我需要的东西,并且它保持快速。这就是为什么我对星际飞船持怀疑态度。“外部工具不可能比我精心设计的提示符更快!”好吧,我错了。试一试,我相信你会喜欢的!向星际飞船的创造者致以巨大的赞誉!
“z”允许您在文件系统中快速跳转。它会记住您访问的文件夹,在短暂的学习时间之后,您可以使用zpath_of_the_older_name在它们之间移动。
例如,如果我经常转到~/work/src/jects文件夹,我可以只运行zpro并立即跳转到那里。Z的算法基于频率-频率和新近的组合,非常有效。如果它记住了您不想使用的文件夹,您始终可以手动将其删除。
它加快了在我电脑上经常访问的文件夹之间移动的速度,并为我节省了大量的击键(和路径记忆)。
fzf代表“模糊查找器”。这是一个通用工具,允许您使用模糊搜索查找文件、历史记录中的命令、进程、git提交等。您键入一些字母,它会尝试在结果列表中的任何位置匹配这些字母。您键入的字母越多,结果就越准确。您可能从代码编辑器中知道这种类型的搜索-当您使用命令打开文件时,您只键入文件名的一部分而不是完整路径-这是模糊搜索。
我通过fish fzf插件使用它,所以我可以搜索命令历史记录或快速打开文件。这是另一个每天节省我时间的小工具。
与find命令类似,但使用起来更简单、速度更快,并且具有良好的默认设置。
您想查找一个名为“Invoice”的文件,但是您不确定它的扩展名是什么?或者可能是一个存放所有发票的目录,而不是一个文件?您可以卷起袖子开始为find命令编写那些正则表达式模式,也可以直接运行FD Invoice。对我来说,这个选择很简单,😉。
默认情况下,FD忽略.gitignore中隐藏或列出的文件和目录。大多数时候--这就是你想要的,但对于那些需要禁用这项功能的极少数情况,我有一个别名:fda=';fd-IH&39;
输出的颜色很好,根据基准测试(或上面的GIF),它甚至比Find更快。
与上面提到的fd类似,ripgrep是grep命令的替代方法-速度更快,具有合理的缺省值和彩色输出。
它跳过被.gitignore和隐藏文件忽略的文件,因此您可能需要此别名:rga=';rg-uuu';。它禁用所有智能过滤,并使Ripgrep表现为标准grep。
显示Linux或Mac上运行的进程信息的最常用工具称为top。它是每个系统管理员最好的朋友。而且,即使你主要像我一样做网络开发,看看你的电脑是怎么回事也是很有用的。你知道,只是想看看这次是Docker还是Chrome吃掉了你所有的内存。
TOP是非常基本的,所以大多数人都会改用HTOP。HTOP在类固醇上名列前茅--五颜六色,有很多选择,总体上使用起来更舒适。
扫视是HTOP的补充工具。除了列出所有进程及其CPU和内存使用情况外,它还显示有关系统的其他信息。
我仍然使用HTOP来更快地过滤和清除进程,但我会使用扫视来快速浏览我的计算机正在发生的事情。它附带API、Web UI和各种导出格式,因此您可以将系统监控提升到一个新的水平。我强烈推荐!
Virtualenv是用Python创建虚拟环境的工具(与内置venv模块相比,我更喜欢它)。
VirtualFish是Fish shell的虚拟环境管理器(如果您没有使用Fish,请查看viralenvwrapper)。它提供了一系列额外的命令来快速创建、列出或删除虚拟环境。
Pyenv、nodenv和rubyenv是用于在我的计算机上管理不同版本的Python、Node和Ruby的工具。
假设您的计算机上有两个版本的Python。可能您正在处理两个不同的项目,或者您仍然需要支持Python2。管理不同的Python版本很困难。您需要确保不同的项目安装具有正确版本的包。如果您不小心,很容易搞砸这个脆弱的设置,并覆盖其他包使用的二进制文件。
版本管理器提供了很多帮助,并将这场噩梦变成了一项相当容易管理的任务。好的版本管理器可以全局或“按文件夹”交换Python版本。而且每个版本都是与其他版本隔离的。
我最近发现了一个名为asdf的工具,它可以用一个工具来管理所有这些内容,从而取代pyenv、nodenv、rbenv和其他*env。它提供了几乎所有编程语言的版本管理,下次需要为编程语言设置版本管理器时,我一定会试一试。
Virtualenv解决了Python中的包管理的许多问题,但还有一个用例需要介绍。如果我想要全局安装Python包(因为它是一个独立的工具,就像前面提到的扫视一样),我就遇到了一个问题。在虚拟环境之外安装软件包不是一个好主意,而且可能会在将来导致问题。另一方面,如果我决定使用虚拟环境,那么每次我想运行我的工具时都需要激活该虚拟环境。这也不是最方便的解决方案。
事实证明,PIPEX工具可以解决这个问题。它将Python包安装到单独的环境中(因此它们的依赖关系没有冲突的风险)。但是,与此同时,这些工具提供的CLI命令在全球范围内都可用。所以我不需要激活任何东西-PIPEX会为我做这件事!
当您使用Docker时,这两个工具都很有用。Ctop是用于Docker容器的类似于顶层的界面。它为您提供:
统计数据,如内存使用情况、CPU和每个容器的附加详细窗口(包括开放端口和其他信息)。
这比试图从docker ps中找出所有这些信息要好得多。
如果你认为ctop很酷,那就等着试试lazydocker吧!这是一个功能更多的管理Docker的功能齐全的终端UI。说到Docker,我最喜欢的工具!
除了我几乎每天使用的工具之外,还有一些我多年来收集的工具,我发现它们对特定的任务特别有用。有一些东西可以从终端记录GIF(您可以暂停和复制其中的文本!)、列出目录结构、连接到数据库等。
如果您使用的是Mac,则不需要介绍自制软件。它实际上是MacOS的软件包管理器。它甚至有一个叫做Cakebrew的GUI版本。
asciinema是一个可以用来记录终端会话的工具。但是,与录制GIF不同的是,它将允许您的观众从这些录制中选择和复制代码!
它对记录编码教程有很大的帮助-没有多少事情像键入长命令那样令人沮丧,因为讲师没有为您提供代码片段。
我很少再在终端中执行差异(比较两个文件之间的差异),但如果您需要执行一项操作,请使用Colordiff而不是不可用的diff命令。Colordiff对输出进行着色,因此更容易看到变化,而不是试图遵循所有的“<;”和“>;”符号。
对于运行git diff和git show命令,有一个更好的工具叫做diff-so-flick。它通过以下方式进一步改进了差异的外观:
如果您想要显示给定目录的内容,树是实现该目的的首选工具。它以漂亮的树状结构显示所有子目录和文件:
$TREE。.├──Recovery y.md├──Readme.md├──Archive├──Automator│├──Open\Item2.Workflow││└──Contents││├──Info.plist│├──├──QuickLook│├──└──Document.png│:└──Start\Screen\Saver.Workflow├──BREW-cask.sh。
类似于cat(最常用于在终端中显示文件内容的命令),但更好。
添加语法突出显示、git装订线标记(如果适用)、自动分页(如果文件很大),通常会使输出更具可读性。
如果您需要发送一些HTTP请求,并且发现curl使用起来不直观,那么可以尝试HTTPIE。
这是一个很好的选择。它更容易与合理的默认值和简单的语法一起使用,返回彩色输出,甚至支持安装额外的插件(用于不同类型的身份验证)。
简化手册页。“手册页”包含解释如何使用给定命令的Linux软件手册。尝试运行man、cat或man grep查看示例。它们非常详细,有时很难掌握。因此,tldr是社区努力将每个手册页的精华提炼成带有一些示例的简短描述。
TLDR适用于最流行的软件。正如我所说的,这是社区的努力,有人为您记录一个晦涩难懂的包的可能性很小。但当它工作时,它提供的信息通常包含您正在寻找的内容。
例如,如果您想要创建一个包含几个文件的gzip存档,man tar会让您不知所措。相反,TLDR tar将列出一些常见示例-第二个正是您想要做的事情:
它五颜六色,显示其他信息,如git状态,自动将文件大小转换为人类可读的单位,以及所有这些,同时保持与ls相同的速度。
尽管我喜欢并推荐它,但出于某些原因,我仍然坚持使用ls。我猜是肌肉记忆吧?
我针对SQLite和PostgreSQL的首选CLI解决方案。通过自动完成和语法突出显示,它们比默认的sqlite3和psql工具更易于使用。
MAS是用于从App Store安装软件的CLI工具。我一生中只用过一次--在我安装Macbook的时候。我也会用它来设置我的下一台Macbook。
MAS允许您在MacOS中自动安装软件。它为您节省了大量点击的时间。而且,由于您正在阅读一篇关于CLI工具的文章,我想-就像我一样-您也不喜欢单击。
我在我的“灾难恢复”脚本中保存了从App Store安装的应用程序列表。如果有什么不好的事情发生,我希望我能够重新安装所有的东西,麻烦最小。
终端的磁盘使用分析器。快速、易用。当我需要释放一些空间时,我的默认工具(“哦,我肯定256 GB的磁盘空间会很充足!”)。
一些工具,如FD、Ripgrep或Httpie,是您可能已经知道的东西的改进版本。除了新版本更易于使用之外,它们提供了更好的输出,有时甚至更快。因此,不要仅仅因为其他人都在使用旧工具而死守旧工具。
我听到的坚持使用“标准Linux工具”的一个常见论点是:
但是,如果您需要登录到Linux服务器并在那里执行一些工作,该怎么办呢?你将无法使用你的花哨工具。最好学习如何使用大多数Linux发行版内置的工具。
您上一次必须登录Linux服务器是什么时候?你不能安装软件,但是你必须手动调试一些问题?我甚至都不记得了。现在这样做的人不多了。也许是时候重新考虑如何进行部署了,从手工工作转向更具伸缩性的工作?
不要让您的工具带生锈,并在那里添加一些新的CLI工具!