命令行:为什么人们还在为它们烦恼?

命令行已经有50年的历史了,但它还没有过时。基于文本的终端仍然是完成许多任务的最佳方式,即使在图形桌面和触摸屏设备的时代也是如此。...

命令行已经有50年的历史了,但它还没有过时。基于文本的终端仍然是完成许多任务的最佳方式,即使在图形桌面和触摸屏设备的时代也是如此。

事实上,随着微软创建了一个功能强大的新Windows终端应用程序,命令行正变得比以往任何时候都更受尊重。windows10的PowerShell环境非常强大,但微软仍然特意为windows10添加了对基本上完整的Linux命令行环境的支持。

命令行曾经是唯一的选择

有一次,如果你想和电脑互动,你可以打字。就是这样。没有别的了。这听起来可能是限制性的和过时的,但作为不得不使用穿孔卡片或穿孔纸带的进步,打字是激进的和变革性的。从带着纸卷的电传打字机到带阴极射线管(CRT)屏幕的终端,是人机交互的又一次重大转变。

这一步为交互式shell真正进入自己的领域铺平了道路。现在你可以向电脑发送指令,并很快在屏幕上显示响应。当你等待打印出来的纸从电传打字机中发出咔嗒咔嗒的声音时,再也没有咔嗒咔嗒的声音了。

很公平,但那是过去,这是现在。计算机是一种完全不同的游戏。除了使用没有安装图形桌面环境的计算机,或通过SSH通过低带宽连接使用远程计算机,或控制无头或嵌入式系统等明显的锁定情况外,为什么要在图形桌面上使用命令行?

行话解释

命令行、终端窗口和shell等术语几乎可以互换使用。那是不正确的行话。他们都很不一样。他们是有关系的,但他们不是一回事。

终端窗口是图形桌面环境中运行电传终端模拟的窗口。

shell是在终端窗口中运行的程序。它接受您的输入,并根据您键入的内容,尝试解释和执行指令本身,将它们传递给构成操作系统的其他一些实用程序,或者查找与您键入的内容匹配的脚本或程序。

相关:Bash、Zsh和其他Linux shell之间有什么区别?

命令行是您键入的位置。它是shell在等待您输入某些指令时显示的提示。术语“命令行”也用于指代您键入的内容的实际内容。例如,如果您与其他计算机用户谈论您在运行程序时遇到的困难,他们可能会问您:“您使用了什么命令行?“他们不是问你在用什么shell,而是想知道你键入了什么命令。

总之,它们结合起来形成了命令行界面(CLI)。

为什么要在2019年使用命令行?

CLI对于那些不熟悉它的人来说似乎是倒退和混乱的。在现代操作系统中,这种过时的、怪诞的电脑使用方式肯定没有立足之地?几十年前,当windows、图标和鼠标出现,以及带有图形用户界面(gui)的图形桌面环境出现时,我们不是放弃了这一切吗?

是的,GUI已经存在了几十年。微软Windows的第一个版本早在1985年就发布了,随着1990年Windows3.0的发布,它已经成为PC桌面的标准。

X窗口系统,用于Unix和Linux,于1984年推出。这将图形桌面环境带到了Unix及其许多衍生产品、克隆产品和新产品中。

但是Unix的发布将这些事件提前了十多年。因为没有其他选择,一切都必须通过命令行实现。所有的人机交互,所有的配置,电脑的每一次使用都必须能够通过简陋的键盘来完成。

因此,事实上,CLI可以做任何事情。GUI仍然不能完成CLI所能做的一切。甚至对于它可以完成的部分,CLI通常更快、更灵活、可以编写脚本并具有可扩展性。

有一个标准。

多亏了posix,它们才标准化了

POSIX基本上是类Unix操作系统的标准,所有不是Windows的操作系统。甚至Windows也有针对Linux的Windows子系统(WSL),在任何兼容POSIX(或接近兼容的)操作系统上打开一个终端窗口,你就会发现自己在一个shell中。即使shell或发行版提供了自己的扩展和增强,只要它们提供了POSIX的核心功能,您就可以直接使用它。你的脚本就会运行。

命令行是最小的公分母。学习如何使用它,无论Linux发行版和图形桌面环境如何,您都可以执行所需的所有任务。不同的桌面有自己的做事方式。不同的Linux发行版捆绑了各种实用程序和程序。

但是打开一扇候机楼的窗户,你会有宾至如归的感觉。

命令设计为协同工作

每一个Linux命令都被设计用来做一件特定的事情,并且做得很好。基本的设计理念是通过添加另一个实用程序来添加更多的功能,该实用程序可以通过管道或链接与现有的实用程序连接在一起,以实现预期的结果。

这非常有用,以至于微软特意为windows10添加了对完整Linux命令行的支持!

例如,其他命令使用sort命令按字母顺序对文本进行排序。无需将排序功能构建到其他每个Linux命令中。一般来说,GUI应用程序不允许这种类型的协作互通。

看下面的例子。这将使用ls命令列出当前目录中的文件。结果通过管道传输到sort命令,并在第五列数据(即文件大小)上排序。排序后的列表通过管道传输到head命令中,默认情况下,head命令列出其输入的前10行。

ls -l | sort -nk5,5 | head

我们得到了当前目录中最小文件的整洁列表。

命令行:为什么人们还在为它们烦恼?

通过使用tail而不是head更改一个命令,我们可以得到当前目录中十个最大文件的列表。

ls -l | sort -nk5,5 | tail

命令行:为什么人们还在为它们烦恼?

这给了我们十大文件的列表,正如预期的那样。

命令行:为什么人们还在为它们烦恼?

命令的输出可以重定向并捕获到文件中。可以分别捕获常规输出(stdin)和错误消息(stderr)。

相关:Linux上的stdin、stdout和stderr是什么?

命令可以包含环境变量。以下命令将列出主目录的内容:

ls $HOME

命令行:为什么人们还在为它们烦恼?

这在目录树中的任何位置都有效。

命令行:为什么人们还在为它们烦恼?

如果所有这些输入的想法仍然困扰着你,那么像制表符完成这样的技术可以减少你必须要做的输入量。

脚本支持自动化和可重复性

人类容易出错。

脚本允许您对一组指令进行标准化,这些指令在每次运行脚本时都将以相同的方式执行。这为系统维护带来了一致性。安全检查可以内置到脚本中,允许脚本确定是否应该继续。这就不需要用户有足够的知识来自己做决定。

因为您可以在Linux和其他类似Unix的系统上使用cron来自动化任务,所以可以简化长的、复杂的和重复的任务,或者至少一次解决问题,然后在将来实现自动化。

PowerShell脚本在Windows上提供了类似的功能,您可以将它们安排为从任务调度器运行。为什么每次设置计算机时都要单击50个不同的选项,而您却可以运行一个可以自动更改所有内容的命令?

两全其美

作为一个超级用户,要充分利用Linux或任何操作系统,您确实需要使用CLI和GUI。

GUI在使用应用程序方面是无与伦比的。即使是死硬的命令行倡导者也不得不时不时地走出终端窗口,使用办公效率套件、开发环境和图形操作程序。

命令行上瘾者并不讨厌GUI。他们只喜欢将CLI用于适当任务的好处。对于管理来说,CLI可以轻而易举地获胜。您可以使用CLI对一个文件、一个目录、一组文件和目录进行更改,或者进行完全全局更改。当受影响对象的数量增加时,试图用GUI实现这一点通常需要冗长且重复的键盘和鼠标操作。

命令行提供了最高的保真度。您可以使用每个命令的每个选项。很多Linux命令都有很多选项。举一个例子,考虑lsof命令。看看它的手册页,然后考虑如何将其包装到GUI中。

在一个有效的GUI中,有太多的选项要呈现给用户。这将是压倒性的,没有吸引力,笨重的使用。这与GUI的目标完全相反。

当然是马。不要回避那匹马。它通常是更快更敏捷的马。赢得你的马刺,你永远不会后悔。

  • 发表于 2021-04-03 05:30
  • 阅读 ( 177 )
  • 分类:互联网

你可能感兴趣的文章

5个旧的windows功能microsoft还不能注销

... 今天,我们要检查一下为什么这些会粘住。让我们来看看微软无法摆脱的五个遗留功能——今天仍然存在于Windows中——及其原因。 ...

  • 发布于 2021-03-14 04:46
  • 阅读 ( 233 )

如何在mac os x中刷新dns缓存

...这么多的首选项和工具,但有时没有什么比一个好的老式命令行工具更好的了。这对于联网信息尤其重要,无论您使用的是什么操作系统。 ...

  • 发布于 2021-03-17 11:46
  • 阅读 ( 238 )

如何在linux上创建手册页

... 在旧的Unix笑话中有一个核心真理,“你需要知道的唯一命令是man。”手册页包含了丰富的知识,当你想了解一个命令时,应该首先打开手册页。 为您编写的实用程序或命令提供一个手册页,可以将其从一段有用的代码提升到一...

  • 发布于 2021-04-01 21:08
  • 阅读 ( 267 )

如何在linux上使用sed命令

...入以下内容并将搜索模式缩减为单个空格,您将立即看到为什么必须包含两个空格: sed -n '1,4 s/ */ /gp' coleridge.txt 因为星号匹配前面的零个或多个字符,所以它将每个不是空格的字符视为“零空格”,并对其应用替换。 但是,...

  • 发布于 2021-04-02 08:03
  • 阅读 ( 153 )

如何在linux上运行和控制后台进程

...的组件,如GNOME或KDE,以及启动时启动的系统守护进程。 为什么几乎所有的东西都在运行?嗯,Bash内置的cd、pwd和alias在运行时不需要启动(或“派生”)进程。Bash在终端窗口中运行的bashshell实例中执行这些命令。这些命令之所...

  • 发布于 2021-04-03 03:30
  • 阅读 ( 222 )

如何在linux上使用xargs命令

需要将一些Linux命令串在一起,但其中一个不接受管道输入?xargs可以获取一个命令的输出,并将其作为参数发送到另一个命令。 所有标准Linux实用程序都有三个与之相关联的数据流。它们是标准输入流(stdin)、标准输出流(std...

  • 发布于 2021-04-03 07:25
  • 阅读 ( 160 )

什么是linux上的tty?(以及如何使用tty命令)

tty命令做什么?它打印出你正在使用的终端的名称。TTY代表“电传打字机”。司令部名字背后的故事是什么?这需要更多的解释。 19世纪的电传打字机 在19世纪30年代和19世纪40年代,被称为电传打字机的机器被开发出来。这些...

  • 发布于 2021-04-03 08:54
  • 阅读 ( 194 )

如何编辑在outlook中发送的邮件的主题

...以通过右键单击文件夹中的标题,然后单击“查看设置”命令来访问此面板。 在“高级视图设置”窗口中,单击“其他设置”按钮。 在“其他设置”窗口中,启用“允许单元格内编辑”选项。 单击“确定”,然后再次单击“...

  • 发布于 2021-04-04 10:14
  • 阅读 ( 159 )

linux初学者:不要害怕终端

...含了使用Windows图形界面的逐步图形说明。 如果你想知道为什么像How To Geek这样的网站仍然使用终端命令,那么很简单:终端命令功能强大,可以让事情变得更快。如果您不知道某个命令,使用图形界面会更快。但是,如果您知...

  • 发布于 2021-04-09 03:15
  • 阅读 ( 182 )

shell脚本初学者指南:基础知识

...简单而强大的编程方法可以帮助您节省时间,更好地学习命令行,并消除繁琐的文件管理任务。 什么是shell脚本(shell scripting)? 作为一个Linux用户,意味着你要玩弄命令行。不管你喜不喜欢,通过这个界面做一些事情要比点击...

  • 发布于 2021-04-10 05:43
  • 阅读 ( 126 )
苏语凡
苏语凡

0 篇文章

相关推荐