问题描述
我刚刚在几天前安装了Ubuntu。据我所知,终端是任何Linux发行版的重要组成部分。我现在的问题是为什么?当我查看有关它的任何信息时,终端中的命令都可以通过GUI轻松完成。那么,使用终端有什么好处?
编辑:感谢大家的答案。经过一番探索,并在你的答案的帮助下,我现在可以理解它的用途了。我可以自豪地说,在过去的3天里,我一直在使用它几乎所有的东西,我希望很快能更好地掌握脚本。
最佳解决方案
Unix中的终端是一个很棒的强大工具。当从Windows世界过渡时,很难理解这一点,因为Windows(cmd.exe)shell是相当的,我怎么说,缺乏。大多数* nix默认shell(bash
,zsh
等)有几个优点:
-
它通过POSIX和单Unix规范进行标准化,因此您为一台计算机编写的脚本可能适用于所有符合POSIX标准的计算机(假设您将自己局限于标准命令,其中有很多)。微软习惯于在某些版本中包含工具而不在其他版本中包含工具,这使得批量编程非常受欢迎
-
因为Unix是从终端构建的,所以大部分内容都可以从命令行进行配置。 Windows就像这样,但他们选择放弃16位子系统和DOS。现在,GUI是改变Windows中某些东西的唯一方法。
-
因为它如此灵活。命令可以连接在一起(
ls | grep filename
),它们可以被捕获(gcc program.c > ./standard_out 2> ./standard_error
),并且可以被替换(ls /home/`whoami`
或ls /home/$(whoami)
) -
因为UNIX实用程序旨在做一件事,并且做得很好。只需看看
awk
,grep
,sed
,wget
或其他许多人。他们自己完成了一项任务,但考虑到#3和#2,他们可以构建成强大的表达式。 -
因为能够自动执行任务。
cron
和bash脚本允许完成简单或自动化的长,复杂和/或重复任务。 -
因为人类容易出错。可以使用相对较短的shell脚本以一致的方式更改设置。安全检查可以内置到脚本中,而不是依赖于用户知道哪些命令在不同情况下可以安全运行。
次佳解决方案
使用终端有许多优点。争论的范围从便利,生产力到怀旧。这里有一些 :
-
有些事情你(而不是我)使用GUI无法完成。这不是因为它不可行,而是因为没有人为这些命令编写GUI而烦恼。例如,如果我想使用某个命令,请说
mdf2iso
来转换文件夹中的一大堆文件。我可以使用|
操作符管道输出,并在一个笔划中完成。 -
对于我们很多人来说,这只是事情的方式。请记住,这与专业知识无关。我不是linux专家,我只是一个普通用户,但我更喜欢尽可能使用命令行。这不是为什么应该使用它的论证,而是使用它的原因。
-
脚本是一个强大的东西。您可以使用条件
if
和循环for
等。并结合上述功能做各种事情。脚本的功能没有限制。您可以自动执行根据您的要求量身定制的复杂任务。对于这样的事情,通常很难找到符合您要求的GUI应用程序。 -
即使在极低带宽设置下,您也可以通过远程登录执行任务。
-
如果您可以向其他人指定命令,那么帮助,编写教程等会更容易。这样,您就不必截取屏幕截图了。对于受到帮助的人来说,这也有另一个好处,这将我们带到下一点。
-
使用命令行通常可以让您更好地了解自己在做什么以及进行了什么。
-
最后,它只是更快。键入几个字母并按
TAB
比单击无尽的菜单选项要快得多。您可以使用!mo
来调用以mo
(例如mount)开头的最后一个命令,依此类推。
我确信还有其他一千个我没提到的原因。
第三种解决方案
最后?因为你开始编写脚本,脚本编写的精彩之处在于:
您可以更改执行这些操作的脚本,而不是更改您执行操作的方式。
你可以为终端编写脚本,而你通常不能用于图形程序,这就是人们使用终端的原因。
但我感觉到一丝“我为什么要使用终端?”在你的问题。我无法回答你,你和我是not-you,但这个相关的问题可能会为你提供一些见解:
人们最终如何/最终使用命令行用户?
我认为你可以确定三个阶段:(1)不情愿使用; (2)了解舒适所需的最低限度; (3)找一个喜欢编写脚本的人。人们可以在所有这三个级别中使用终端;找出你的好奇心停止的地方。此外,如果只是简单地决定要学习shell脚本,那么人们可以非常快速地完成这些阶段。
-
“我需要这个程序,所以我想我会使用命令行。”
它开始,通常是因为人们发现他们需要一些专业或棘手的东西,谷歌/论坛/朋友推荐的程序结果是命令行程序。因此,他们打开一个终端,输入说明告诉他们键入的内容,这就是他们使用终端的方式。使您使用命令行的此类程序示例:
-
LaTeX /TeX /ConTeXt(同一系统的不同风格)采用文本文件,并将其转换为漂亮的PDF文档。有关示例,请参阅此showcase;我更喜欢’pp’和’LM-Volume-manuscript’。
-
重命名是一个可爱的小程序,可让您根据模式重命名大量文件。一个简单的例子:重命名s /myfile([0-9] +)。txt /$ 1-myfile.txt /将所有名为’bond007.txt’的文件转换为’007-bond.txt’,无论数字是多少。你知道,也许你想重命名一些音乐专辑文件。
-
也许你想从你的计算机上运行一个网站,你发现如果你想告诉网络服务器运行/暂停/刷新它的配置,你必须发出一个终端命令。
请注意,对于这些系统中的许多系统都有图形化的front-ends,但这不是重点:命令行调用是常见的和传统的,许多HOWTO都假定这一点,这就是它的启动方式。因为:
-
-
“好的,我现在感觉舒服一点。”
一旦进入命令行,人们就会开始思考:如果我可以,那就不容易了……
-
…更改目录以查看另一个目录? (
cd mydir
,用于’change directory’) -
…快速提醒这个目录中的文本文件? (
ls *.txt
,用于’list’) -
…移动/重命名文件?复制文件?删除文件? (
mv myfile newname
,cp myfile mycopy
和rm myfile
,用于’move’,’copy’和’remove’) -
…打开此文件进行编辑/查看? (
gedit myfile
,或leafpad
,或nano
,或vim
,或其他。)
一旦人们学会了这五个命令,他们在命令行中就会感到很舒服:他们可以移动,查看和交互。它甚至有点强大:你可以使用像
mv iceland-*.jpg My_Iceland_Pics/
这样的命令一次操作整组文件,并不是很酷吗?现在,很多人都很高兴地来到这里。他们知道如何使用终端,他们会在需要时使用终端,就是这样。这是“终端很有用”的水平。然而,喜欢终端的人通常是这样做的,因为他们需要/想要/感觉他们离不开脚本提供的强大力量。而这通常是这样开始的:
-
-
“嘿,脚本只是文件中的一些命令!”这种认识可能会导致一些进一步的变化,具体取决于人。当然,很多人只去’meh’;学习你不需要的东西毫无意义。无论如何,这样的事情可能会发生:
-
你开始使用小脚本来自动化无聊的东西。有些你自己写的;有些人是从别人那里得到的;最后,你开始修改其他人的脚本。
-
您发现您曾经手工完成的一大类事物,因为它需要thinking-in-between,可以使用以下两种结构进行自动化:
-
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 -> result
和input -> process -> output
工作流程非常普遍,终端非常适合这些工作流程。除此之外,shell实际上只是另一种编程语言,你会明白为什么命令行用户和程序员之间存在如此巨大的重叠。
第四种方案
另一点要补充:使用命令行很有趣! 😉
(http://vladdolezal.com/blog/2008/the-real-reason-we-use-linux/)
第五种方案
前几天我只是回答了类似这样的问题。事实证明,这个人从未使用过键盘快捷键来做任何事情,所以事实证明这是一个长时间的讨论。我希望你对这些有一些熟悉……它会让我的观点更容易理解。
考虑使用文字处理器。如果保存文件,则可以使用键盘快捷方式,如ctrl-s。有人可能会说,“我更喜欢使用菜单。它不会节省我使用快捷方式的时间。如果你必须保存一个新文件,你必须通过文件系统导航到目录,然后键入不管怎么说。“所以这个反对者是正确的,每个键盘快捷键本身不会节省大量的时间。真正的节省是将快捷方式链接在一起,例如选择全部,剪切,粘贴。甚至文字处理器制造商已经意识到这一点并且使得使用键盘访问文件结构更方便。能够使用制表符和箭头键访问最近的文件夹/位置。
当然,选择文本片段通常需要鼠标…这就是为什么程序员和进行大量编辑的人更喜欢使用支持全键盘使用的文本编辑器,这样你就不必使用鼠标。鼠标不仅速度慢,而且容易出错 – 特别容易选择或删除错误的文本。
现在这与命令行有什么关系?命令行的一个优点是它避免使用慢速error-prone鼠标。相反,您键入并从一个位置执行此操作;你不必四处寻找另一个菜单或点击那里然后在这里。这与人们喜欢使用网络浏览器键盘快捷键(打开新标签/窗口,使用Gmail等)的原因相同;无论如何,他们将不得不输入网址(或电子邮件或其他内容)…为什么要将手移开钥匙?
但最重要的是,就像键盘快捷键是最强大的,当你开始一起使用它们(而不仅仅是一两个)时,你可以将命令链接在一起做更强大的事情,这些事情要么永远通过GUI,要么你不能甚至想象一下。例如,从命令行,您可以告诉您的Web浏览器,我想每30秒刷新一次此网页,查找某个文本,当发生这种情况时,请向我和一组联系人发送一封电子邮件,说明文字已经出现在网页上。另一个例子,您可以告诉您的计算机,我想查看我写过的所有电子邮件,查找对这本特定书籍的引用,生成我已经提到的日期列表以及根据以下顺序排列的日期列表。频率,并把它放入我正在打字的电子邮件中。
第六种方案
当您确切知道要执行的操作以及操作方法时,可以快速使用CLI。它比使用gui更有效。此外,如果要远程连接到计算机,则在慢速链接上CLI更容易。如果您对CLI感到满意,也可以利用脚本。
如果你谷歌cli vs gui你会得到吨的命中,例如:
http://www.computerhope.com/issues/ch000619.htm
你的问题并不是特定于Ubuntu,linux甚至是pc的 – 你从支持gui和cli的任何系统中得到关于这个主题的辩论,例如:配置Cisco路由器。
第七种方案
答案中有很多好点,但我还有一点需要注意。有时在安装或更新后,GUI应用程序将无法启动并且不会显示任何错误消息。在这些情况下,打开终端窗口并从命令行启动ap会非常有用。终端上提供的信息几乎总是比从GUI启动时提供的信息多。
第八种方案
我最喜欢的是打字少。我怎么能听到你问这个问题。我登录,反向搜索或向上箭头)我上周输入的命令并点击回车。另一种选择是点击鼠标(并试图记住)。
我的第二个最爱是它可以更轻松地回答关于stack-overflow的问题;无需屏幕截图,只需要文字。
第九种方案
你什么时候需要做”root”? Logging-in通过GUI作为root是一个坏主意(我甚至不认为Ubuntu会允许你这样做,默认情况下)。
另外,考虑到Linux GUI(X11)就像其他一切一样只是一个正在运行的程序。如果X11崩溃,你会很高兴你知道你的命令行。
第十种方案
我只想根据为VirtualBox添加PPA的说明,提供一个我认为非常有用的示例。添加PPA时,还应注册公钥,因此GUI方法:
-
用Firefox(或其他浏览器)下载密钥
-
打开Synaptic(或其他APT gui)
-
搜索右侧菜单项
-
浏览下载的文件
-
终于确认了
在用户指南中解释这一点可能很昂贵!相反,它可以通过单个&简单的命令行:
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -