虚拟机terminal怎么输入代码?

虽然这个话题已是老生常谈,搜索一下应该也能找到大把的相关文章。不过难得提到了这方面,就趁此机会把我的理解写下来,一来看看我是不是真正理解了,二来看看我能不能把它们之间的区别讲得更加简明易懂。

  • 命令行界面 (CLI) = 使用文本命令进行交互的用户界面
  • Shell = 命令行解释器,执行用户输入的命令并返回结果

1. 什么是命令行界面?

命令行界面,通俗来讲,就是你看过的那种满屏幕都是字符的界面。

命令行界面(英语:Command-line Interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。

相信大家对于影视作品中出现的那种,某黑客/程序员/安全专家坐在电脑前猛敲键盘、屏幕上放眼望去全是滚动的字符的场景不会感到陌生。这种靠一行行命令的输入输出进行交互的用户界面,就叫做命令行界面。

▲ 电影「黑客帝国」剧照

在图形用户界面 (GUI) 已经完全普及的今天,普通用户在日常使用电脑的过程中几乎不用手动输入任何命令,大部分操作都是点点鼠标就能完成,而熟练使用命令行操作似乎已经成为高逼格的代名词。

但事实上,现在依然有着很多的软件开发者、系统管理员,或者是高级用户在使用命令行界面操作计算机。其中很大一个原因,就是效率:在熟记命令的前提下,使用命令行界面往往要比使用图形用户界面来得快。

举个栗子,我要把当前目录下的(包括嵌套的子目录)所有 *.tpl 文件的后缀名修改为 *.blade.php,如果不使用命令行,该怎么做?手动修改肯定不至于,但也得去网上找找相关软件,得要注意下载来源是否靠谱(像我这样有点洁癖的选手还得去找绿色版),下载后还要手动指定文件路径、重命名模板……

而使用命令行的话(这里以 Ubuntu 上的 Bash 为例),只需运行这么一句:

命令行操作的高效率等优点,也是现在许多图形化的计算机系统依然没有放弃提供命令行操作方式的原因。就连 Windows 都有自带 cmd.exe 和 PowerShell 等命令行程序(事实上你在搜索「批量重命名」时,可以看到很多方案都是通过「Windows 命令提示符」实现的)。

2. 终端 —— 人与机器交互的接口

终端 (Terminal),其词汇本身的意义为「终点站;末端;(电路)的端子,线接头」。而在计算机领域,终端则是一种用来让用户输入数据至计算机,以及显示其计算结果的机器。

也就是说,终端只是一种用于与计算机进行交互的输入输出设备,其本身并不提供运算处理功能。

想要充分理解终端,我们得回溯历史,去看看终端的起源。

在大型机 (Mainframe) 和小型机 (Minicomputer) 的时代里,计算机曾经非常昂贵且巨大,不像现在这样人手一台。这些笨重的计算机通常被安置在单独的房间内,而操作计算机的人们坐在另外的房间里,通过某些设备与计算机进行交互。这种设备就叫做 终端 (Terminal),也叫终端机。

成为一个多用户系统。多用户系统就意味着要给每个用户配置一个终端,每个用户都要有一个显示器、一个键盘。但当时所有的计算机设备都非常昂贵(包括显示器),而且键盘和主机是集成在一起的,根本没有独立的键盘。

后来他们机智地找到了一样东西,那就是 。虽然电传打字机原本的用途是在电报线路上收发电报,但是它既有可以发送信号的键盘,又能把接收到的信号打印在纸带上,完全可以作为人机交互设备使用。

而且最重要的是,价格低廉。:P

于是,他们把很多台 ASR-33 连接到计算机上,让每个用户都可以在终端登录并操作主机。就这样,他们创造了计算机历史上第一个真正的多用户操作系统 Unix,而电传打字机就成为了第一个 Unix 终端。

想知道用电传打字机做终端是一种怎样的体验?这里有一个 。

上面我们说过,在历史上,终端是连接到计算机上的一种带输入输出功能的外设。但是有一个终端与众不同,它与计算机主机是一体的,是计算机的一个组成部分。这个特殊的终端就叫做 控制台(Console)。

顾名思义,控制台是用于管理主机的,只能给系统管理员使用,有着比普通终端更大的权限。一台计算机上一般只有一个控制台,但是可以连接很多个终端。

放在现在我们可能难以理解为什么会有控制台和终端的区分,不过就像上一节所说的,当时都是很多个用户通过终端去访问一台计算机,而专门管理那些大块头机器的系统管理员另有其人。普通用户用的就是普通的终端,而系统管理员用的终端比较牛逼,所以就被叫做控制台啦(笑)。

不过随着个人计算机的普及,控制台 (Console) 与终端 (Terminal) 的概念已经逐渐模糊。在现代,我们的键盘与显示器既可以认为是控制台,也可以认为是普通的终端。当你在管理系统时,它们是控制台;当你在做一般的工作时(浏览网页、编辑文档等),它们就是终端。我们自己既是一般用户,也是系统管理员。

2.3 字符终端与图形终端

DEC 公司在 1978 年制造的 ,由于其设计良好并且是第一批支持 ANSI 转义序列与光标控制的智能终端,获得了空前的成功。VT100 不仅是史上最流行的字符终端,更是成为了字符终端事实上的标准。

随着技术的进步,图形终端 (Graphical Terminal) 也开始出现在公众的视野中。图形终端不但可以接收和显示文本信息,也可以显示图形与图像。著名的图形终端有  系列。

不过现在专门的图形终端已经极为少见,他们基本上已经被全功能显示器所取代。

随着计算机的进化,我们已经见不到专门的终端硬件了,取而代之的则是键盘与显示器。

但是没有了终端,我们要怎么与那些传统的、不兼容图形接口的命令行程序(比如说 GNU 工具集里的大部分命令)交互呢?这些程序并不能直接读取我们的键盘输入,也没办法把计算结果显示在我们的显示器上……(图形界面的原理我这里就不多说了,它们编程的时候图形接口还在娘胎里呢!)

严格来讲,Terminal Emulator 的译名应该是「终端仿真器」。

对于那些命令行 (CLI) 程序,终端模拟器会「假装」成一个传统终端设备;而对于现代的图形接口,终端模拟器会「假装」成一个 GUI 程序。一个终端模拟器的标准工作流程是这样的:

  1. 将输入发送给命令行程序(程序会认为这是从一个真正的终端设备输入的);
  2. 拿到命令行程序的输出结果(STDOUT 以及 STDERR);
  3. 调用图形接口(比如 X11),将输出结果渲染至显示器。

终端模拟器有很多,这里就举几个经典的例子:

▲ 我正在使用的终端模拟器: 与 

在专门的终端硬件已经基本上仅存于计算机博物馆的现代,人们通常图省事儿,直接称呼终端模拟器为「终端」。

大部分终端模拟器都是在图形用户界面 (GUI) 中运行的,但是也有例外。

▲ 一个正在显示系统启动信息的虚拟控制台(图片来源:,GPLv2)

这些全屏的终端界面与那些运行在 GUI 下的终端模拟器的唯一区别就是它们是 由操作系统内核直接提供的。这些由内核直接提供的终端界面被叫做  (Virtual Console),而上面提到的那些运行在图形界面上的终端模拟器则被叫做 终端窗口 (Terminal Window)。除此之外并没有什么差别。

当然了,因为终端窗口是跑在图形界面上的,所有如果图形界面宕掉了那它们也就跟着完蛋了。这时候你至少还可以切换到 Virtual Console 去救火,因为它们由内核直接提供,只要系统本身不出问题一般都可用(笑)。

简单来说,tty 就是终端的统称。

由于 Unix 被设计为一个多用户操作系统,所以人们会在计算机上连接多个终端(在当时,这些终端全都是电传打字机)。Unix 系统为了支持这些电传打字机,就设计了名为 tty 的子系统(没错,因为当时的终端全都是 tty,所以这个系统也被命名为了 tty,就是这么简单粗暴),将具体的硬件设备抽象为操作系统内部位于 /dev/tty* 的设备文件。

为什么要把电传打字机这个硬件设备抽象成「tty 设备」文件呢?有兴趣的同学可以去了解一下 Unix 操作系统中 Everything is a file 的概念。

随着计算机的发展,终端设备已经不再限制于电传打字机,但是 tty 这个名称还是就这么留了下来。久而久之,它们的概念就混淆在了一起。所以在现代,tty 设备就是终端设备,终端设备就是 tty 设备,无需区分。

由于早期计算机上的  最大的用途就是连接终端设备,所以当时的 Unix 会把串口上的设备也同样抽象为 tty 设备(位于 /dev/ttyS*)。因此,现在人们也经常将串口设备称呼为 tty 设备。

在 tty 子系统中后来还衍生出了 pty、ptmx、pts 等概念,这里就不详细展开了。有兴趣的同学可以参考一下这篇文章:。

4. Shell —— 提供用户界面的程序

大家都知道,操作系统有一个叫做 内核 (Kernel) 的东西,它管理着整台计算机的硬件,是现代操作系统中最基本的部分。但是,内核处于系统的底层,是不能让普通用户随意操作的,不然一个不小心系统就崩溃啦!

但我们总还是要让用户操作系统的,怎么办呢?这就需要一个专门的程序,它接受用户输入的命令,然后帮我们与内核沟通,最后让内核完成我们的任务。这个提供用户界面的程序被叫做 Shell (壳层)。

其实 Shell 只是提供了一个用户操作系统的入口,我们一般是通过 Shell 去调用其他各种各样的应用程序,最后来达成我们的目的。比如说我们想要知道一个文件的内容,我们会在 Shell 中输入命令 cat foo.txt,然后 Shell 会帮我们运行 cat 这个程序,cat 再去调用内核提供的 open 等系统调用来获取文件的内容。虽然并不是 Shell 直接去与内核交互,但广义上可以认为是 Shell 提供了与内核交互的用户界面。

至于为什么叫做 Shell,看下图就知道啦。是不是很像一层壳呢?

Shell 通常可以分为两种:命令行 Shell 与 图形 Shell。顾名思义,前者提供一个命令行界面 (CLI),后者提供一个图形用户界面 (GUI)。Windows 下的 explorer.exe 就是一个典型的图形 Shell(没错,它确实是,因为它接受来自你的指令,并且会帮你与内核交互完成你的指令)。

常见或历史上知名的命令行 Shell 有:

还有其他各种五花八门的 Shell 程序,这里就不一一列举了,有兴趣的自己去搜一搜吧。:P

现在我们知道,终端干的活儿是从用户这里接收输入(键盘、鼠标等输入设备),扔给 Shell,然后把 Shell 返回的结果展示给用户(比如通过显示器)。而 Shell 干的活儿是从终端那里拿到用户输入的命令,解析后交给操作系统内核去执行,并把执行结果返回给终端。

不过 Shell 与终端的分工有一些容易混淆的地方,这里以例子进行说明:

  • 终端将用户的键盘输入转换为控制序列(除了字符以外的按键,比如 左方向键 → ^[[D),Shell 则解析并执行收到的控制序列(比如 ^[[D → 将光标向左移动);
  • -a 命令查看当前终端的设置。
  • 终端接收这些指令,并且照着 Shell 说的做,于是你就看到了终端上输出了一行红色的 foo
  • 除非被重定向,否则 Shell 永远不会知道它所执行命令的输出结果。我们可以在终端窗口中上下翻页查看过去的输出内容,这完全是终端提供的 feature,与 Shell 没有半毛钱关系;
  • 命令提示符 (Prompt) 是一个完全的 Shell 概念,与终端无关;
  • 行编辑、输入历史与自动补全等功能是由 Shell 提供的(比如 fish 这个 Shell 就有着很好用的历史命令与命令自动补全功能)。不过终端也能自己实现这些功能,比如说 XShell 这个终端模拟器就可以在本地写完一行命令,然后整条发送给远程服务器中的 Shell(在连接状况不佳时很有用,不然打个字都要卡半天);
  • 终端中的复制粘贴功能(Shift + Insert 或者鼠标右键等)基本上都是由终端提供的。举个例子,Windows 默认的终端对于复制粘贴的支持很屎,而换一个终端(例如 ConEmu)后就可以很好地支持复制粘贴。不过 Shell 以及其他命令行程序也可以提供自己的复制粘贴机制(例如 vim)。

计算机史这玩意,有趣是挺有趣的,就是查起资料来太费脑子。

为了不误人子弟,在这篇博文写作的过程中我也查阅了各种各样的文档和史料,力求内容的准确性。不过能力所限,如果文章中仍有出现谬误,欢迎在下方评论区批评指正。

}

该条命令意思为启动rht系统中名为desktop的虚拟机,但我们却看不到虚拟机,是因为虚拟机并没有显示,虚拟机的显示将会在下面提到。
可以看到上图中运行了两次启动虚拟的命令,结果报错,报错的原因是虚拟机已经启动,无需再次启动了。
[ ~]$ rht-vmctl view desktop显示虚 拟机后会跳转到上图所示的登陆界面,在运行此命令前需要先打开虚拟机,否则会发生如下所示的错误。


上图所示的错误为在关闭虚拟机后未使用开启虚拟机命令,而是直接显示虚拟机,所以虚拟机会报错。[ ~]$ rht-vmctl poweroff desktop为关闭虚拟的命令,在下面会提到。 上述两张图为登陆界面使用普通用户student界面登录,不同的用户具有不同的权限,这在以后的学习很重要。 上述三张图为超级用户的登陆,超级用户不会直接显示,而会在隐藏在列表中,找到超级用户后,输入用户名(第一张图)和用户密码(第二张图)便会进入到超级用户的桌面。

该条命令为关闭虚拟机desktop,下图为命令作用后的主界面。在运行该命令后,系统会提问你是否确认关闭虚拟机desktop,输入y表示确认关闭,可以发现虚拟机的界面会退出。

该条命令意为重置虚拟机desktop,在遇到无法解决的虚拟机问题时,可以运行该命令,该命令会重置你的虚拟机。

在新装的liunx的环境下,并没有汉语,没有汉语对于我们的文件操作有很大的影响,所以我们需要添加汉语到该系统中。打开Applications找到settings并打开,打开的界面如下图所示。在Personal中找到Region & Language图标并打开,打开的界面如下图所示。
可以看到当前能够使用的语言只有英语,点击“+”添加语言。点击chinese(China)出现如下图所示界面。选择Chinese(Intelligent Pinyin)然后单击Add,输入法就添加完成了。添加成功的界面如上图所示,可以看到输入法中多出了Chinese

系统图形界面出现问题如何解决

主机名login :在此输入用户名

用户密码passwd :在此输入用户密码,输入的用户密码不会显示,但会输入,这样是为了保证安全性。

输入正确的账户密码即可进行操作。

linux的实质是内核,并非操作系统。(计算器的五部分:控制器,运算器,存储器。输入/输出设备)
内核是对系统的软件进行调用,决定软件执行的优先级和顺序。

内核是操作系统的核心,所以需要被保护,而shell则是为了保护内核和实现内核与对外软件的交互。

改图中打开了两个shell,一个shell准备运行“exit”命令。
上图为运行了命令后的桌面,可以看到,运行exit命令的shell已经关闭。

命令提示符中字符的含义

linux中如何运行命令

}

我要回帖

更多关于 虚拟机终端怎么写中文 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信