开发人员命令行工具

本文概述

  • 为什么我们仍然使用命令行界面工具
  • 基本命令行工具
  • 闪亮的东西
  • 有趣的CLI工具
  • 实践中的命令行
  • 进一步的探索
在当今的在线世界中, 吸引用户的斗争仍在继续, 应用程序制造商更喜欢移动或网络应用程序。桌面应用程序变得越来越不相关。而且, 它们也不过是Web应用程序的富客户端而已, 而Electron则是最受欢迎的平台。
这是否意味着我们将很快放弃桌面平台?不, 当然不会, 我不会那样说。此外, 尽管GUI应用程序似乎最近一直处于停滞状态, 但是有一部分台式机应用程序正在继续增长。
你是否看过任何有关黑客的电影?通常, 这些人在显示某些终端的监视器(通常带有深色背景和浅色前景)的显示器前工作。反过来, 该终端往往被传来的字符淹没, 这些字符显然对观看它们的人有一定意义。
开发人员命令行工具

文章图片
黑客在行动中的这种表示通常被专业开发人员嘲笑, 甚至有些程序只是为了娱乐而模拟各种” 黑客” 效应。
但是, 在现实世界中, 命令行工具并未获得娱乐价值。
为什么我们仍然使用命令行界面工具 本文重点介绍使用命令行界面(CLI)工具的实际方面。知道CLI命令并使用优质的工具可以提高你的生产率, 还可以打开各种自动化方法, 而文本界面比GUI应用程序实用得多。
你可以更好地在GUI中执行重复性任务, 以至于你听到的多次单击是一次长时间的单击。问题是, 这仍然无法超越专业脚本的效率。此外, 手动执行相同的操作会增加认知负担并增加人为错误的可能性。与往常一样, 我们依靠计算机来处理人类可能会感到无聊, 重复或压倒性的任务。
值得一提的是, 终端工具可以提供多种类型的接口。有诸如ls之类的非交互类, 它们只是获取参数并提供输出。在软件包管理器中最常见的是交互式或半交互式界面。 (“ 你确定要从未经验证的来源继续安装吗?” )然后, 有文本用户界面(TUI), 它们是旨在满足终端限制的交互式GUI应用程序。可能最著名的是Midnight Commander(mc), 它是极受欢迎(在90年代)的Norton Commander的克隆。
基本命令行工具 如果要成为控制台用户, 则需要为自己配备最少的命令行开发人员工具, 这是最基本的要求。你绝对不能没有的东西是交互式外壳(目的是通过便捷的制表符完成功能实现现代功能)和文本编辑器。
开发人员命令行工具

文章图片
现在, 我将提到UNIX哲学, 无论它是否有意识地, 它通常是该工具作者进行设计决策的基础。一些关键点可以总结如下:
  • 将所有内容都视为文件。
  • 只做一件事, 但要做好。
  • 从标准输入读取, 写入标准输出, 并将错误传达给标准错误流。
  • 成功后, 返回码0。非零值表示错误(可以由确切的返回码指定)。
  • 允许命令链接和脚本。
贝壳
打开终端时看到的第一件事是外壳。这是使用户与机器之间的交互成为可能的部分。它解释你的命令, 将它们拆分为程序名称和参数, 并执行你向其抛出的所有shell命令。
从历史上看, 有许多不同种类的贝壳。其中最受欢迎的是csh(C Shell)和Bourne Shell的各种实现(通常简称为sh)。伯恩·壳牌(Bourne Shell)扩展到科恩·壳牌(Korn Shell), 这也获得了一定的吸引力, 并且仍被其爱好者使用。 Csh当前是某些BSD系统上的默认Shell, 而几乎所有其他类似UNIX的操作系统都喜欢某种Bourne Shell。 Linux发行版倾向于bash, 而Mac OS X带有zsh作为默认选择。
还有其他可能性, 但是除了Windows系统上的Microsoft PowerShell以外, 它们的普及程度远不如此。 PowerShell的一部分受交互式UNIX shell(如zsh)的启发, 而另一部分则受.NET运行时的启发。它不是将所有内容都视为文本, 而是UNIX世界中普遍使用的概念, 而是允许对数据进行面向对象的操作。
尽管Microsoft PowerShell在Windows领域中非常流行, 但是许多具有UNIX起源的程序(最著名的是Git, Autotools或Make)都倾向于使用Bourne Shell的某些变体。因此, 诸如msys(与Windows的Git捆绑在一起), Cygwin或Microsoft最近的WSL等项目诞生了。如果你想在Windows上拥有Linux的感觉, MSys是这里的最佳选择。如果你希望功能齐全的Linux环境能够运行标准Linux二进制文件, 那么WSL是你的最佳选择。对于介于两者之间的某些东西(UNIX API但被编译为Windows可执行文件(仅在你真正知道需要这样做的原因时才使用它)), Cygwin就是答案。
编辑
熟悉了shell之后, 你将需要学习一些有用的技能。由于大多数编码工作都围绕编写文本(代码, 自述文件, 提交消息)而展开, 因此对交互式文本编辑器的全面了解至关重要。有很多选择, 而且由于编辑器是任何开发人员最必需的工具之一, 因此对于最好的编辑器, 可能也有很多意见。
开发人员命令行工具

文章图片
最受欢迎的文本编辑器可以分为两个基本组:简单文本编辑器和可编程文本编辑器。
两者都可以很好地编写代码, 但是, 顾名思义, 可编程代码提供了整形和自定义编辑器的功能, 以完全满足你的需求。不过, 这是有代价的, 因为他们的学习曲线也趋于陡峭, 可能需要更多的时间来建立。
基本文字编辑器 在简单的文本编辑器中, GNU Nano最为广泛。实际上, 它是pico编辑器的克隆, 因此, 如果你的系统上没有一个, 则可以尝试另一个。微型编辑器是两者的另一种更现代的替代方法。如果你希望同时获得简单和可扩展的内容, 那么这是一个很好的起点。
可编程文本编辑器 许多开发人员依赖来自不同阵营的可编程编辑器, 例如Vim和GNU Emacs。两种编辑器都可以在控制台或GUI模式下运行, 并且都对其他软件中的按键绑定产生了影响。它们不仅提供API, 而且还提供内置的实际编程语言。 Emacs专注于LISP, Vim使用自己的VimL, 但它也提供了其他流行脚本语言(例如Lua, Perl, Python或Ruby)的接口。还值得一提的是一种称为Neovim的Vim最新方法, 因为它已开始受到广泛关注。
可能有些令人困惑, 但是还有一个名为vi的编辑器, 它是Vim的前身(顺便说一句, 代表” Vi有所改进” )。它比Vim简单得多, 但是如果你有足够的信心来编写Vim, 那么如果你发现自己需要使用vi, 这对你来说不是挑战。
由于pico / GNU Nano和vi / Vim通常预先安装在各种系统上, 因此, 至少要掌握它们的基础知识是一个好主意(退出Vim对于初学者而言是一个众所周知的难题)。这样, 如果你需要在远程计算机上进行编辑, 则无论准备使用什么编辑器, 你都将准备就绪。在你的私人设备上, 可以随意使用最舒适的编辑器。
默认系统编辑器 最后要注意的是, 你的系统可能具有所谓的默认编辑器。
$ EDITOR环境变量指向默认编辑器, 在兼容Bourne的shell(sh, bash, ksh, zsh)中, 你可以通过输入echo $ EDITOR来查看它。如果该值与你的个人选择不同, 则可以通过在外壳的运行时配置(?/ .profile, ?。/ bashrc, ?/ .zshrc等)中添加export EDITOR = my-awesome-editor来进行设置。
当需要更长的文本输入时, 其他程序(例如版本控制系统和邮件客户端)将使用此编辑器。
复用器
一旦开始在CLI中进行认真的工作, 就会遇到在任何给定时间只能保持一个应用程序打开的局限性。编码时, 你可能需要编辑代码, 执行代码, 更正错误并再次执行。查找错误时, 你可能希望列出日志并查看将请求发送到服务器时记录的内容。通常, 这将意味着在两个应用程序之间不断切换, 或者打开几个终端窗口。
终端多路复用器可以在这里为你提供帮助。在谈到多路复用器时, 有些人立即认为该主题是GNU Screen。它是同类中第一个广泛使用的工具, 并且今天仍然非常流行(通常默认情况下安装)。它的现代替代产品是tmux, 毫不奇怪, 它代表” 终端多路复用器” 。
这两个允许你在给定的终端会话中打开多个窗口, 并在这些会话之间自由切换。它们使你可以将窗口分成多个窗格, 这有助于同时运行多个应用程序并实时观察其输出(无需切换任何窗口)。而且, 它们以客户端-服务器模式工作, 这意味着你可以在任何给定时间分离它们, 然后稍后再回来以继续你离开的地方继续工作。当人们想要持续进行IRC会话时, 这最后一个功能引起了Screen的流行。
对于大多数用例, GNU Screen或tmux对你来说应该是不错的选择, 但是如果由于某种原因你认为它们在资源上过于繁琐, 那么还有其他更轻巧的选择。那里有datach / atach, 还有绑架。他们的目的范围有限, 但可以很好地履行其职责。
包装经理
此时, 你可能会开始考虑在计算机上安装所有上述软件。一个问题是每个工具都有不同的安装说明。有时, 你需要下载源代码并自己进行编译, 有时需要获得独立的二进制文件, 有时需要获得所谓的二进制包, 这通常意味着将可执行文件与某些元数据一起压缩。
为了简化安装软件的过程, 操作系统创建者提出了程序包管理器的概念。简而言之, 程序包管理器就像CLI和桌面应用程序的应用程序商店。它比实际的应用商店提前了几十年。问题是几乎每个系统都有自己的软件包管理器。 Debian, Ubuntu和衍生的GNU / Linux发行版使用APT, 基于Red Hat的发行版更喜欢yum或DNF, 其他Linux发行版具有更奇特的安装软件方式, 不同的BSD克隆也是如此。除了内置的软件包管理器外, 还有用户安装的软件包管理器, 例如MS Windows的Chocolatey和Mac OS X / macOS的Homebrew。当你要编写有关如何安装程序的说明时, 可能最终要为每个系统编写案例。似乎有点太多了, 不是吗?
幸运的是, 由于Linuxbrew是Homebrew与GNU / Linux系统的移植, 因此上述提到的最后一个系统Homebrew可能是最可移植的系统。有趣的是, 如果你想在Microsoft Windows上获得类似的用户体验, 它甚至可以在WSL上运行。请记住, 虽然没有正式支持WSL。
那么, 除了可移植性之外, 自制软件还能提供什么?首先, 它不会干扰系统软件包, 因此你安装的所有内容都位于操作系统的单独层上。此外, 通常不需要root用户权限即可安装软件包。因此, 你可以拥有稳定且经过测试的系统软件包, 但同时可以在不牺牲系统稳定性的情况下检查其较新版本。
如果你想测试编辑器, 我在前面提到过, 在具有Homebrew或Linuxbrew的系统上需要做的就是运行以下命令:
brew安装emacs micro nano vim neovim。
闪亮的东西 我们已经讨论过的内容无疑对工作有用。但是也有一些应用, 尽管不是必需的, 但仍然为日常生活带来舒适感。你可能不需要它们, 但是了解它们总是值得的。
互动式筛选
搜索命令历史记录可能很乏味。虽然bash和zsh都具有Ctrl + R键盘绑定功能, 但一次仅显示一次替换。而且, 你需要输入之前使用的确切文本。由于这是很常见的操作, 因此一旦开始使用命令行, 它似乎是一个改进的好地方。
诸如fzy, percol, peco或fzf之类的交互式过滤器可帮助你过滤长行文本。这可以是前面提到的命令历史记录, 项目目录中的所有代码行, 或者是find生成的文件名列表。此处的总体思路是首先为你介绍所有可用行, 然后再依靠模糊查找算法过滤掉所有不匹配的内容。
例如, 将Ctrl + R绑定到fzf将显示最新命令的列表, 你可以使用箭头上下导航, 也可以键入git以仅在内部某处显示带有Git的命令。就个人而言, 当我使用没有交互式过滤器的外壳时, 我突然感到有些失落。这个功能真的很吸引人!
此外, 你还可以在可编程文本编辑器中使用交互式过滤器。这样, 你将在外壳程序和编辑器之间具有统一的搜索功能。
互动导航器
当我主要从事C ++项目时, Facebook PathPicker是一个很大的帮助。编译器生成的错误日志可能变得非常庞大且令人讨厌, 并且能够在该日志中查找实际路径的能力极大地提高了生产率。
在任何给定的文本文件中, 或与tmux一起使用时, 屏幕内容中, fpp都会过滤除文件路径以外的所有内容。然后, 它提供了一个UI, 你可以在其中选择一个或多个这些路径并对其运行命令。当然, 最常见的响应是在编辑器中打开文件, 这是默认操作。
去UI
至少有一个你从事的项目使用Git作为版本控制系统。尽管功能非常强大, 但Git CLI并不是出色的用户体验的顶峰。为了节省你阅读Git帮助$ SUBCOMMAND中所有选项的压力, 建议你检出tig。它为从中受益的操作提供了一个不错的控制台UI, 例如日志或非议。
另一个旨在帮助GIt用户的工具是fac, 它是Fix All Conflicts的首字母缩写。你可能已经猜到了, 当你在合并或重新设置基准时遇到冲突时, 它会派上用场。它是vimdiff等其他合并工具的替代方案。
文件管理器
上世纪90年代, 每个人都想要一个两窗格的文件管理器。趋势始于诺顿指挥官。许多其他人遵循相同的道路, 但仍然拥有稳定用户基础的人是Midnight Commander。最明显的用例是使用mc来操作本地文件, 但在使用远程计算机时也非常有用。
像大多数命令行程序一样, 它非常轻巧, 因此通过ssh运行它没有问题, 并且由于支持FTP和FISH协议, 你可以在一个窗格中看到本地文件系统, 而在另一个窗格中看到远程文件系统, 这很方便当你希望避免输入或复制文件名作为scp的参数时使用此功能。
有趣的CLI工具 他们说:” 所有的工作, 没有玩耍, 使杰克成为一个愚蠢的男孩。” 有很多程序, 命令行或其他程序, 这些程序只能满足你的娱乐需求。流氓电子游戏属于这一类。它甚至为整个游戏流派了名字!其他流行的玩具还有运气和斗牛士, 例如, 如果你在CI脚本中的某些地方使用它们, 可能会使你的生活变得平淡一些。
但是对于我们中的某些人而言, 首先使用控制台的主要吸引力是要像电影中的黑客一样。 No More Secrets和Hollywood Hacker很好地代表了这个群体。当有人看着你工作时尝试一下, 而你的黑客信誉肯定会上升!
实践中的命令行 那么, 命令行有什么吸引人之处, 可以抵消学习如何使用Shell, 编辑器以及各种应用程序的所有开关所花费的时间?简短的答案是生产率, 它来自两件事:
  • 一个是, 当你只看到一个终端窗口而已, 仅此而已时, 你就可以集中精力, 因为没有太多东西可以分散你的注意力。没有弹出的通知, 没有广告, 没有漂亮的小猫的照片。只有你和你的目标。
  • 第二件事是自动化。你可以将几个频繁组合的动作放入脚本中, 然后整体调用, 而不是每次都手动键入。通过搜索Shell的历史记录, 你可以快速返回到曾经编写的特别复杂的命令。基本上, 你可以记录和重播任何内容, 并且该代码可用作你所做工作的文档。
添加别名的能力也有助于收益。例如, 我发现自己经常在Git中制作提交, 方法是更新同一提交直到完美(暂时)。暂存所需的文件后, 我将运行git carmh。不要尝试在手册中查找它, 因为这是我的私人别名, 意思是commit – amend – reuse-message = HEAD。它可以肯定地节省一些打字。
事实是, 人们一遍又一遍地重复相同的动作会感到无聊, 而无聊会减少注意力。这可能会导致错误和错误。避免它们的唯一方法是不要隔行扫描高焦点和低焦点动作。编写代码是重点, 而查看提交消息则是重点, 但是当你需要在此处和此处重复几次机械单击以进入提交评审阶段时, 很有可能降低了重点。命令行当然不是没有这种机械活动的, 但是由于有了自动化, 你可以避免大多数此类活动。
进一步的探索 你可能已经知道本文提到的某些或所有命令行工具。你可能在阅读时学到了一些新的有用的知识。如果是这样, 那就太好了–我的目的不是要提供各种工具的全面概述和比较, 而是要展示一些对我的日常工作有用的关键工具, 希望你可能会发现其中一些有用的工具, 太。
那里有更多有趣的命令行程序, 如果你对它们感兴趣, 我建议你查看Awesome Shell精选列表, 其中列出了当今一些最佳的命令行工具。
【开发人员命令行工具】大多数GUI应用程序都有其对应的终端。其中包括Web浏览器, 电子邮件客户端, 聊天客户端(IRC, Slack, XMPP), PIM套件或电子表格。如果你知道我没有提到的任何优秀程序, 请在评论中提出。

    推荐阅读