我几天前刚安装了 Ubuntu。据我所知,终端是任何 Linux 发行版的重要组成部分。我现在的问题是为什么?当我查找有关它的任何信息时,终端中输入的命令都可以通过 GUI 轻松完成。那么,使用终端有什么好处呢?
编辑:感谢大家的回答。经过一番探索,在你们的回答的帮助下,我现在明白了它的用途。我可以自豪地说,在过去的三天里,我几乎什么都用它,我希望很快就能更好地掌握脚本。
答案1
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
其他许多程序即可。它们本身可以完成一项任务,但考虑到 #3 和 #2,它们可以构建成强大的表达式。sed
wget
由于具有自动执行任务的能力,
cron
bash 脚本可以简化或完全自动化长而复杂和/或重复的任务。因为人类很容易犯错。相对较短的 shell 脚本可用于以一致的方式更改设置。安全检查可以内置到脚本中,而不是依靠用户来了解在不同情况下哪些命令可以安全运行。
答案2
使用终端有很多好处。争论的范围从便利性、生产力到怀旧。以下是其中一些:
有些事情你(或者说我)根本无法使用 GUI 来完成。这并不是因为它不可行,而是因为没有人愿意为这些命令编写 GUI。例如,如果我想使用某个命令,比如
mdf2iso
转换文件夹中的一大堆文件。我可以使用运算符管道输出|
,然后一键完成。对于我们很多人来说,这就是应该做的事情。请记住,这与专业知识无关。我不是 Linux 专家,我只是一个普通用户,但我确实更喜欢尽可能使用命令行。这并不是关于为什么要使用它的争论,而是关于为什么使用它的争论。
脚本非常强大。您可以使用条件
if
和循环for
等,并结合上述功能做各种事情。脚本的功能是无限的。您可以自动执行根据您的要求量身定制的复杂任务。对于这样的事情,通常很难找到符合您要求的 GUI 应用程序。您可以通过远程登录执行任务,即使在非常低的带宽设置下也是如此。
如果您可以向其他人指定命令,那么帮助、编写教程等会变得容易得多。这样,您就不必截取屏幕截图。这对被帮助的人来说还有另一个好处,这将我们引向下一点。
使用命令行通常可以让您更好地理解您正在做什么以及发生了什么。
最后,它的速度更快。输入几个字母并按下TAB比点击无尽的菜单选项要快得多。您可以使用
!mo
它来调用您运行的最后一个以它开头的命令mo
(例如 mount)等等。
我确信还有一千个我没有提到的原因。
答案3
最终呢?因为你开始编写脚本,而脚本的奇妙之处在于:
您无需改变做事的方式,而是可以更改执行这些事情的脚本。
您可以为终端编写脚本,但通常不能为图形程序编写脚本,所以这就是人们使用终端的原因。
但是我感觉到你的问题中隐含着“我为什么要使用终端?”。我无法回答你这个问题,因为你是你,我不是你,但是这个相关问题可能会给你一些启发:
人们最终为何/如何成为命令行用户?
我认为你可以确定三个阶段:(1)勉强使用;(2)知道舒适所需的最低限度;(3)发现自己喜欢编写脚本。你可以在这三个级别使用终端;自己找出你的好奇心在哪里结束。此外,如果你只是决定要学习 shell 脚本,那么你可以非常快速地通过这些阶段。
“我需要这个程序,所以我想我会使用命令行。”
通常,这种情况的发生是因为人们发现他们需要一些专业或棘手的东西,而 Google/论坛/朋友推荐的程序原来是命令行程序。因此,他们打开终端,输入说明要求输入的内容,这就是他们使用终端的方式。以下是一些让您使用命令行的程序示例:
- LaTeX/TeX/ConTeXt(同一系统的不同版本)接收文本文件,并将其转换为漂亮的 PDF 文档。请参阅此展示例如;我更喜欢“pp”和“LM-Volume-manuscript”。
rename
是一个可爱的小程序,它允许您根据模式重命名大量文件。一个简单的例子:rename s/myfile([0-9]+).txt/$1-myfile.txt/
将所有名为“bond007.txt”的文件转换为“007-bond.txt”,无论数字是多少。也许您想重命名一些音乐专辑文件,你看。- 也许您想从您的计算机上运行一个网站,并且您发现如果您想告诉网络服务器运行/停止/刷新其配置,您必须发出一个终端命令。
请注意,许多此类系统都有图形前端,但这不是重点:命令行调用是常见且传统的,许多 HOWTO 都假设了这一点,这就是它的开始方式。因为:
“好的,我现在舒服一点了。”
一旦进入命令行,人们就会开始思考:如果我能……那岂不是很容易。
- ...更改目录来查看另一个目录?(
cd mydir
,代表‘更改目录’) - ... 快速回顾一下此目录中的文本文件?(
ls *.txt
,代表‘列表’) - ... 移动/重命名文件?复制文件?删除文件?(
mv myfile newname
、cp myfile mycopy
和rm myfile
、 分别表示‘移动’、‘复制’和‘删除’) - ...打开此文件进行编辑/查看?(
gedit myfile
, 或leafpad
, 或nano
, 或vim
或其他。)
一旦人们学会了这五个命令,他们基本上就可以熟练地使用命令行了:他们可以移动、查看和交互。它甚至有点强大:您可以使用 之类的命令一次操作整个文件组
mv iceland-*.jpg My_Iceland_Pics/
,这不是很酷吗?现在,很多人很高兴就此止步。他们知道如何使用终端,在需要时会使用它,仅此而已。这是“终端有用”的水平。更喜欢然而,终端通常会这样做,因为他们需要/想要/感觉他们离不开脚本提供的强大功能。这通常是这样开始的:
- ...更改目录来查看另一个目录?(
“嘿,脚本只是文件中的某些命令!”
这种认识可能会导致进一步的改变,这取决于个人。当然,许多人只是觉得“没关系”;学习你不需要的东西是没有意义的。无论如何,这样的事情可能会发生:
- 你开始使用小脚本来自动化一些无聊的东西。有些是你自己写的;有些是从别人那里得到的;最后,你开始修改别人的脚本。
- 你发现巨大的过去需要手动完成的某些事情,由于需要中间思考,可以使用以下两个结构来实现自动化:
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 实际上只不过是另一种编程语言这一事实,您就会明白为什么命令行用户和程序员之间存在如此巨大的重叠。
答案4
前几天我刚刚回答过类似的问题。结果发现这个人从来没有使用过键盘快捷键来做任何事情,所以这变成了一场漫长的讨论。我希望你对这些有所了解……这会让我的观点更容易理解。
考虑使用文字处理器。如果您保存文件,则可以使用键盘快捷键,例如 ctrl-s。有人可能会说:“我更喜欢使用菜单。使用快捷键并不能节省我太多时间。而且,如果您必须保存新文件,则必须通过文件系统导航到目录,然后键入名称。”因此,这位反对者是正确的,每个键盘快捷键本身并不能节省大量时间。真正的节省是将快捷键链接在一起,例如全选、剪切、粘贴。甚至文字处理器制造商也意识到了这一点,并使使用键盘访问文件结构变得更加方便,例如能够使用 tab 和箭头键访问最近的文件夹/位置。
当然,选择文本片段通常需要使用鼠标……这就是为什么程序员和进行大量编辑的人更喜欢使用支持全键盘使用的文本编辑器,这样你就不必使用鼠标了。鼠标不仅是慢的,但它很容易出错——特别容易选择或删除错误的文本。
那么这与命令行有什么关系呢?命令行的一个优点是它避免使用速度慢且容易出错的鼠标。相反,您可以从一个位置输入内容;您不必四处寻找另一个菜单或点击那里然后再点击这里。这与人们喜欢使用网络浏览器键盘快捷键(打开新选项卡/窗口、使用 Gmail 等)的原因相同;无论如何他们都必须输入 URL(或电子邮件或其他内容)...为什么要将手从键盘上移开?
但最重要的是,就像键盘快捷键在你开始一起使用它们时最强大(而不是只使用一两个)一样,你可以将命令链接在一起来执行更强大的操作,而这些操作通过 GUI 可能需要很长时间才能完成,或者你根本无法想象。例如,从命令行,你可以告诉你的 Web 浏览器,我想每 30 秒刷新一次此网页,查找特定的文本,当发生这种情况时,向我和一组联系人发送一封电子邮件,告知该文本已出现在网页上。再举一个例子,你可以告诉你的计算机,我想查看我曾经写过的所有电子邮件,查找对这本书的引用,列出我提到过这本书的日期和对象,按频率对列表进行排序,并将其放入我现在正在输入的这封电子邮件中。