那么,使用终端有什么好处呢?

Lur*_*Dog 62 command-line

几天前我刚刚安装了 Ubuntu。据我所知,终端是任何 Linux 发行版的重要组成部分。我现在的问题是为什么?当我查找有关它的任何内容时,终端中的命令都可以通过 GUI 轻松完成。那么,使用终端有什么好处呢?

编辑:感谢大家的回答。经过一番探索,在您的回答的帮助下,我现在可以理解它的用途了。我可以自豪地说,在过去的 3 天里,我几乎所有的事情都在使用它,我希望很快就能更好地掌握脚本。

Huc*_*kle 79

Unix 中的终端是一个美妙而强大的工具。当从 Windows 世界过渡时,很难理解这一点,因为 Windows (cmd.exe) shell 更像是,我怎么说呢,缺乏。大多数* nix默认弹(bashzsh,等)有几大优势:

  1. 它通过 POSIX 和单一 Unix 规范进行标准化,因此您为一台计算机编写的脚本可能适用于所有符合 POSIX 的机器(假设您限制自己使用标准命令,其中有很多)。微软习惯于在某些版本中包含工具而在其他版本中不包含工具,这使得批处理编程非常受欢迎

  2. 因为 Unix 是从终端构建的,所以大部分内容都可以从命令行进行配置。Windows 在某种程度上是这样的,但他们选择放弃 16 位子系统和 DOS。现在,GUI 是在 Windows 中更改某些内容的唯一方法。

  3. 因为它太灵活了。命令可以通过管道连接在一起 ( ls | grep filename),它们可以被捕获 ( gcc program.c > ./standard_out 2> ./standard_error),并且可以被替换 (ls /home/`whoami`ls /home/$(whoami))

  4. 因为 UNIX 实用程序旨在做一件事,而且做得很好。只要观察一下awkgrepsedwget或其他的主机。他们自己完成了一个任务,但是给定 #3 和 #2,它们可以构建成强大的表达式。

  5. 因为能够自动执行任务。cron和 bash 脚本允许将冗长、复杂和/或重复的任务完全简化或自动化。

  6. 因为人容易出错。可以使用相对较短的 shell 脚本以一致的方式更改设置。安全检查可以内置到脚本中,而不是依赖于用户知道在不同情况下运行哪些命令是安全的。

  • 我会说有一个 5.,即脚本的可能性。你可以自动化**任何事情**,我什至有一个脚本,当我想拖延时,它会随机播放我最喜欢的系列剧集......让你的电脑有几个轮子,你可能可以编写一个脚本,让你从冰箱,如果你把它放在‘cron’里,当你下班回来时,它会带着它在门口迎接你...... (19认同)
  • 我会称之为`坏滴答声......现在最好使用`ls /home/$(whoami)` :-) (10认同)
  • 6 怎么样 - 发出命令通常比遵循告诉您如何导航 GUI 的分步说明更容易。这就是为什么网络上的许多操作说明都使用命令行的原因。对于用户来说,这通常也是正确的 - 随着您获得更多经验,使用 CLI 会变得更快、更容易。 (9认同)
  • 公平地说,PowerShell 在可用性(虽然不是标准化)方面改进了 Windows shell 的情况。 (6认同)
  • 我想再补充一点平衡,还要提到 PowerShell,甚至在此之前,从 Windows XP 开始,完全可以从 Windows 中的 CMD 提示符完成大多数任务。如前所述,不同之处在于命令行一直是并将继续成为日常 *nix 使用的核心。这有好有坏的影响。 (4认同)

ste*_*kwr 36

使用终端有很多好处。争论的范围从便利性、生产力到怀旧。这里有一些 :

  1. 有些事情您(而不是我)使用 GUI 根本无法完成。这不是因为它不可行,而是因为没有人费心为这些命令编写 GUI。例如,如果我想使用一些命令,比如mdf2iso转换文件夹中的一大堆文件。我可以使用|运算符管道输出并一次性完成。

  2. 对我们很多人来说,这就是事情应该有的样子。请记住,这与专业知识无关。我不是 linux 专家,我只是一个普通用户,但我更喜欢尽可能使用命令行。这与其说是关于为什么应该使用它的争论,不如说是为什么要使用它。

  3. 脚本是一个强大的东西。您可以使用条件if和循环for等,并结合上述功能做各种事情。脚本的力量没有限制。您可以自动执行根据您的要求量身定制的复杂任务。对于这样的事情,通常很难找到符合您要求的 GUI 应用程序。

  4. 即使在非常低的带宽设置下,您也可以通过远程登录来执行任务。

  5. 如果您可以向其他人指定命令,则帮助、编写教程等会容易得多。这样,您就不必截取屏幕截图。这对被帮助的人来说还有另一个好处,这让我们进入下一点。

  6. 使用命令行通常可以让您更好地了解您在做什么以及正在发生什么。

  7. 最后,它只是更快。输入几个字母并按下TAB比点击无数的菜单选项要快得多。您可以使用它!mo来调用您运行的最后一个以mo(例如 mount)开头的命令,依此类推。

我敢肯定还有一千个其他原因我没有提到。


Est*_*eis 18

最终?因为您开始编写脚本,而编写脚本的美妙之处在于:

您可以更改执行这些操作的脚本,而不是更改您做事的方式。

您可以为终端编写脚本,而通常不能为图形程序编写脚本,这就是人们使用终端的原因。

但我感觉到了“我为什么要使用终端?”的暗示。在你的问题中。我无法为你回答这个问题,你是你我不是你,但这个相关的问题可能会为你提供一些见解:

人们如何/为什么最终成为命令行用户?

我认为您可以确定三个阶段:(1)勉强使用;(2) 知道舒适所需的最低限度;(3)找个喜欢写脚本的。可以在所有这三个级别上使用终端;自己找出你的好奇心停止的地方。此外,如果您只是决定要学习 shell 脚本,那么您确实可以非常快速地通过这些阶段。

  1. “我需要这个程序,所以我想我会使用命令行。”

    它开始,通常是因为人们发现他们需要一些专业或棘手的东西,而谷歌/论坛/朋友推荐的程序结果是一个命令行程序。所以,他们打开一个终端,输入指令告诉他们输入的内容,这就是他们使用终端的方式。使您使用命令行的此类程序示例:

    • LaTeX/TeX/ConTeXt(同一系统的不同风格)获取一个文本文件,并将其变成一个漂亮的 PDF 文档。有关示例,请参阅此展示;我更喜欢“pp”和“LM-Volume-manuscript”。
    • rename是一个可爱的小程序,可让您根据模式重命名大量文件。一个简单的例子:rename s/myfile([0-9]+).txt/$1-myfile.txt/ 将所有名为“bond007.txt”的文件都转换为“007-bond.txt”,无论数字是多少。也许你想重命名一些音乐专辑文件,你看。
    • 也许你想从你的计算机上运行一个网站,你发现如果你想告诉网络服务器运行/暂停/刷新它的配置,你必须发出一个终端命令。

    请注意,这些系统中的许多系统都有图形前端,但这不是重点:命令行调用是常见和传统的,许多 HOWTO 都假设这一点,这就是它的开始方式。因为:

  2. “好吧,我现在舒服了一些。”

    一旦进入命令行,人们就会开始思考:如果我可以……难道不是很容易吗?

    • ...更改目录以查看另一个目录?( cd mydir, 用于“更改目录”)
    • ...快速提醒一下该目录中的文本文件?( ls *.txt, 为“列表”)
    • ...移动/重命名文件?复制文件?删除文件?( mv myfile newname, cp myfile mycopy, and rm myfile, 用于“移动”、“复制”和“删除”)
    • ...打开此文件进行编辑/查看?( gedit myfile, or leafpad, or nano, or vim, 或者别的什么。)

    一旦人们学会了这五个命令,他们在命令行中基本上就很舒服了:他们可以移动、查看和交互。它甚至有点强大:您可以使用诸如 之类的命令一次对整组文件进行操作mv iceland-*.jpg My_Iceland_Pics/,这不是很酷吗?

    现在,很多人高兴地停在了这里。他们知道如何使用终端,他们会在需要时使用它,仅此而已。这是“终端有用”的层次。谁的人喜欢的终端,但是,通常这样做,因为他们需要/想/觉得他们离不开壮观的功率是脚本提供做。这通常是这样开始的:

  3. “嘿,脚本只是文件中的一些命令!”

    这种认识可能会导致一些进一步的变化,具体取决于个人。当然,许多人只是“嗯”了一声;学习你不需要的东西是没有意义的。无论如何,这样的事情可能会发生:

    • 你开始使用小脚本来自动化无聊的东西。有些是你自己写的;有些是你从别人那里得到的;最终,您开始修改其他人的脚本。
    • 你发现一个巨大的,你用手工做的,因为它需要思想,在两者之间,可以使用这两种结构实现自动化的东西类别:
      • if something_is_true; then step1a; step2; else step1b; fi, 和
      • for file in list_of_files; do process1 $file; process2 $file; step3; done
    • 面对无聊或复杂的任务,您会发现宁愿为它编写脚本而不是手工完成。这甚至不一定是为了节省时间或可重用性,而仅仅是因为它更有趣。
    • 您开始经常使用“在源文件上使用脚本”工作流程,因为它符合您的想法。

您可能不会体验到所有这些事情,甚至任何事情。然而,越适合您,终端就越适合您。你会发现自己最终使用了多少。玩得开心!

后剧本。在编程中script -> run -> resultinput -> process -> output工作流非常普遍,终端非常适合这些工作流。除此之外,shell 实际上只是另一种编程语言,您将明白为什么命令行用户和程序员之间存在如此巨大的重叠。

  • @jokerdino:不,但我应该有。:-) (5认同)
  • 我猜你用 vim 写了这篇文章。 (2认同)

red*_*pet 15

还有一点要补充:使用命令行很有趣!;)

( http://vladdolezal.com/blog/2008/the-real-reason-we-use-linux/ )


Cha*_*Suh 12

前几天刚回答了一个类似的问题。原来这个人从来没有使用过键盘快捷键做任何事情,所以结果是一个漫长的讨论。我希望你对这些有一些熟悉……这会让我的观点更容易理解。

考虑使用文字处理器。如果您保存文件,您可以使用像 ctrl-s 这样的键盘快捷键。有人可能会说,“我更喜欢使用菜单。使用快捷方式并没有为我节省多少时间。如果你必须保存一个新文件,你必须在文件系统中导航到目录,然后键入随便起个名字。” 所以这个反对者是正确的,每个键盘快捷键本身并没有节省大量时间。真正的节省是将快捷方式链接在一起,例如全选、剪切、粘贴。甚至文字处理器制造商也意识到了这一点,并且可以更方便地使用键盘访问文件结构,例如能够使用选项卡和箭头键访问最近的文件夹/位置。

当然,选择文本片段经常需要鼠标……这就是为什么程序员和进行大量编辑的人更喜欢使用支持全键盘使用的文本编辑器,这样您就不必使用鼠标了。鼠标不仅速度慢,而且容易出错——特别容易选择或删除错误的文本。

现在这与命令行有什么关系?命令行的一个优点是它避免了使用缓慢、容易出错的鼠标。相反,您可以在一个位置打字并进行操作;你不必四处寻找另一个菜单或点击那里然后点击这里。这与人们喜欢使用网络浏览器键盘快捷键(打开新标签/窗口、使用 Gmail 等)的原因相同;无论如何,他们将不得不输入 URL(或电子邮件或其他任何内容)……为什么要将您的手从键上移开?

但最重要的是,就像当您开始将它们一起使用(而不是仅使用一两个)时键盘快捷键是最强大的一样,您可以将命令链接在一起以执行更强大的事情,这些事情要么永远通过 GUI 执行,要么您不能”甚至根本想象不到这样做。例如,从命令行,你可以告诉你的网络浏览器,我想每 30 秒刷新一次这个网页,寻找某个文本,当发生这种情况时,给我和一组联系人发送一封电子邮件,说该文本已经出现在网页上。再举一个例子,你可以告诉你的电脑,我想查看我写过的所有电子邮件,寻找这本书的参考,列出我提到的日期和谁,根据以下顺序排列列表频率,并将其放入我现在正在输入的电子邮件中。


Ami*_*mir 11

当您确切地知道要做什么以及如何做时,CLI 使用起来很快。它可以比使用 gui 更有效率。此外,如果您想远程连接到您的机器,CLI 在慢速链接上要容易得多。如果您对 CLI 感到满意,您也可以利用脚本。

如果您使用 google cli vs gui,您将获得大量点击,例如:

http://www.computerhope.com/issues/ch000619.htm

您的问题并不是针对 Ubuntu、Linux 甚至是个人电脑的 - 您可以从任何支持 gui 和 cli 的系统(例如配置 Cisco 路由器)中获得有关此主题的辩论。


fra*_*gos 10

答案中有很多好点,但我还有一点要说明。有时在安装或更新后,GUI 应用程序将无法启动,并且不会显示任何错误消息。在这些情况下,打开终端窗口并从命令行启动 ap 会很有帮助。终端上提供的信息几乎总是多于从 GUI 开始时显示的信息。


ctr*_*lor 8

我最喜欢的是少打字。我听到你问这怎么可能。好吧,我登录,反向搜索或向上箭头)上周输入的命令并按回车。另一种选择是更多的鼠标点击(并试图记住)。

我的第二个最爱是它可以更轻松地回答有关堆栈溢出的问题;不需要屏幕截图,只需文字。

  • +1 **少打字**。显而易见的问题是键盘界面如何减少打字,但确实如此。在查看 bash 历史记录之前,您并不总是意识到一次又一次重复相同任务的频率。 (5认同)

Aar*_*ron 5

当您需要以“root”身份执行某些操作时呢?以 root 身份通过 GUI 登录是一个坏主意(我什至认为 Ubuntu 不允许你这样做,默认情况下)。

此外,考虑到 Linux GUI (X11) 只是一个正在运行的程序,就像其他一切一样。如果 X11 崩溃,您会很高兴知道您的命令行。


Ste*_*ano 5

我只想贡献一个我觉得非常有用的示例,来自为 VirtualBox 添加 PPA 的说明。添加 PPA 时,还应注册公钥,因此 GUI 方法:

  • 使用 Firefox(或其他浏览器)下载密钥
  • 打开 Synaptic(或其他 APT gui)
  • 搜索右侧菜单项
  • 浏览下载的文件
  • 最后确认

在用户指南中解释这一点可能很昂贵!相反,它可以通过一个简单的命令行来完成:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)