Linux 命令行界面介绍
查看【Linux】专题可浏览更多内容
通过之前的文章 在 VirtualBox 上安装 Debian GNU/Linux,你现在应该已经有了一个 Linux 使用环境了
如果没有就去安装一个吧
在之前的文章中,安装系统时选择的安装软件勾选了「桌面环境」并选择了「Gnome」,如果没有勾选安装,在安装完成并进入系统后将会看到一团黑乎乎的界面:
这个便是「虚拟控制台(Virtual Console)」
而如果安装了「桌面环境」,你可以通过搜索「Terminal」并打开
这就是「终端仿真器(Terminal Emulator)」,简称「终端」
不管是「终端仿真器」和「虚拟控制台」,它们所做的都是让你访问 Shell,而我们通常所说的对命令行其实指的就是 Shell,Shell 是接收由键盘输入的命令并将其传递给操作系统来执行的程序。
在「虚拟控制台」或是「终端仿真器」,可以看到一个这样组成的提示符:
<用户名>@<主机名>:<工作目录><用户身份>
说明
- 用户名:如上图的用户名为
conners
; - 主机名:系统的主机名,如上图为
debian
; - 工作目录: 表示当前的工作目录,在首次登陆系统或启动终端仿真器时会显示
~
,~
表示当前用户的主目录位置,也就是/home/conners
(一般根据用户名创建在/home
下),而之后当改变当前目录为其他目录时就会显示目录的名称; - 用户身份:
$
代表普通用户权限,如果显示的是#
表示当前会话拥有超级用户权限,如使用root
用户或终端仿真器提供了超级用户权限;
也就是说,上图表示:当前用户 conners
在主机名为 debian
的机器上,位于主目录并以普通用户权限进行工作。
命令的组成结构
那么如何执行一条命令呢?在 $
符号的后面可以看到光标,直接输入然后按下 Enter
回车键就可以运行一条命令了。
随意输入一条命令 123
并回车,会看到返回结果 -bash: 123: command not found
,这表示找不到这样的命令(因为没有这样的命令)。
在使用命令前还需要了解下命令的基本组成:命令由「命令」、「选项」以及「参数」组成。
command -options arguments
「选项」和「参数」一般是可选的,而「选项」前一般是带上 -
,可以此进行区分。
查看时间使用 date
命令:
date
查看日历使用 cal
命令:
cal
💡 你正在使用的系统可能并没有预装相关的包导致你在使用
cal
命令时提示-bash: cal: command not found
。
Debian 及基于 Debian 的衍生 Linux 发行版可以安装名为bsdmainutils
的包;
Red Hat 及基于 Red Hat 的衍生 Linux 发行版可以安装名为util-linux
的包;
Linux 安装软件的方法先暂且不表,之后的文章会讲。
命令搭配选项及参数的一些用法:
# 显示 UTC
date --utc
# 一些选项是有简写的,比如 --utc 可以简写成 -u
date -u # 等同于 --utc
# 查看当年日历
cal -y
# 查看指定年份的日历
cal -y 2020 # 可以简写成:cal 2020
# 查看最近 3 个月的日历
cal -3
命令区分大小写
需要注意命令是区分大小写的
补全命令
使用命令补全可以节省很多时间,例如在使用 date
命令时,输入到 dat
,按下 Tab
键就可以补全 date
❓ 那么输入到
da
时按下Tab
键会发生什么呢?
你会发现按下Tab
键时没有任何反应,因为有很多以da
开头的命令所以就没办法自动补全了,此时再一次Tab
键,就可以看到这些以da
开头的命令
关于命令有用的 Ctrl 快捷键
- 将光标跳至句首:
Ctrl
+A
- 将光标跳至句尾:
Ctrl
+E
- 「剪切」当前光标之前输入的命令:
Ctrl
+U
- 「剪切」当前光标之后输入的命令:
Ctrl
+K
- 「粘贴」所「剪切」的命令:
Ctrl
+Y
- 清除屏幕:
Ctrl
+L
- 反向搜索:
Ctrl
+R
另外,Windows 用户可能想要使用 Ctrl
+ C
和 Ctrl
+ V
进行复制粘贴,但它们在 Linux 中另有含义,所以为了避免歧义,需要再加上 shift
键。
命令历史记录
使用方向键的上下键可以显示之前输入的命令,当又要使用刚才不久才使用过的命令时就不用重新输入了。
可以使用 history
命令查看历史输入过的命令,还有些与之配合的小技巧:
- 使用命令
!!
使用上一条命令; - 使用命令
![号码]
,如使用历史命令的第五条,可以这样:!5
,还可以使用负数,如使用历史命令的倒数第三条命令:!-3
; - 使用命令
history -c
可清除历史记录;
? 大部分 Linux 发行版可以记住最近的 1000 条命令。
退出终端
在带有图形界面的桌面操作系统中,直接关掉终端仿真器的窗口即可。也可以使用命令 exit
,或按下 Ctrl
+ D
都可用于结束终端会话。
当谈论命令行时到底在说什么?
CLI 和 Shell
使用文本命令进行交互的用户界面就是命令行界面(Command Line Interface, CLI)。
当谈论命令行时其实指的是 Shell,Shell 是一个接收由键盘输入的命令并将其传递给操作系统来执行的程序,也被称为命令行解释器(command-line interpreter)或命令行处理器(command-line processor)。
几乎所有的 Linux 发行版都提供了来自 GNU 项目的 Shell 程序 —— Bash。还记得开头随意输入 123
时 Bash 告诉我们找不到这样的命令(-bash: 123: command not found
)吗?
Bash 是 Bourne Again Shell 的缩写,以此表明 Bash 是 sh 的增强版,而 sh 是由 Steve Bourne 编写的最初的 UNIX Shell 程序。
Terminal、Console、TTY
在早期的计算机,有一种带有输入输出功能的外部设置用来与计算机进行进行交互,这种设备就叫做「终端或终端机(Terminal)」。
其中有一种特殊的终端,是计算机的一个组成部分(与计算机一体),叫做「控制台(Console)」。
Unix 的创始人 Ken Thompson 和 Dennis Ritchie 想让 Unix 成为一个多用户系统,多用户就意味着需要多个终端,但当时的计算机价格十分昂贵,输入和输出设备与主机是集成在一起的,不像现在有独立的键盘和显示器,机智的他们找到了电传打字机(最初是 ASR-33 电传打字机)。
Unix 系统为了支持这些电传打字机,就设计了名为「TTY(TeleTYpewriter)」的子系统,虽然电传打字机原本的用途是在电报线路上收发电报,但当电传打字机连接到计算机后,就变成了使用键盘发送信号,然后将返回的结果打印在纸带上。
在今天可能很难想象程序的运行结果需要等到打印出来才能看到
所以一台计算机上一般只有一个 Console(控制台),但可以连接很多个 Terminal(终端)。控制台用于管理主机的,只给系统管理员使用,有着比普通终端更大的权限。
随着时代的进步,个人电脑的普及,终端设备已经不再限制于电传打字机,而 Terminal 与 Console 的概念也逐渐淡化,现在一般用 TTY 代表计算机终端 Terminal。
Terminal Emulator 与 Virtual Console
今天电传打字机已经进了博物馆,但 Linux/Unix 仍然保留了当初 TTY 驱动和 line discipline 的设计和功能。终端不再是一个需要通过 UART 连接到计算机上物理设备。终端成为内核的一个模块,它可以直接向 TTY 驱动发送字符,并从 TTY 驱动读取响应然后打印到屏幕上。也就是说,用内核模块模拟物理终端设备,因此被称为「终端模拟器(Terminal Emulator)」,严格来说应该叫终端仿真器。
在 Linux 下,按下 Ctrl
+ Alt
+ F1~6
就可以进入到 Virtual Console(虚拟控制台),而按下 Ctrl
+ Alt
+ F7
就可以回到图形界面。
如文章开头这样没有安装桌面环境的 Linux 发行版在开机的时候会进入到 tty1,也就是按下
Ctrl
+Alt
+F1
所进入到的界面。
还有一种是在图形化界面下系统自带或者第三方提供的终端仿真器。比如 macOS 上的 Terminal.app、iTerm2.app,Linux 上的 GNOME Terminal、Konsole,Windows 上的 Windows Terminal 等等。
Virtual Console(虚拟控制台)这样全屏的终端界面与 Terminal Window(终端窗口)这样的终端仿真器的不同之处在于,前者由操作系统内核直接提供的。但它们所做的事情都相同, 也就是让用户得以访问 Shell。
参考
- 命令行界面 (CLI)、终端 (Terminal)、Shell、TTY,傻傻分不清楚? - SegmentFault
- 理解 Linux 终端、终端模拟器和伪终端 - infoQ
- 终端、Shell、tty 和控制台(console)有什么区别? - 蓬岸 Dr.Quest的回答 - 知乎
延伸