RedHat Enterprise Linux Computing Essentials 总揽之管理终端

五、管理终端

主要概念

  1. 各种控制键组合,如 CTRL-CCTRL-D, 和 CTRL-Z,有助于从终端上管理进程。
  2. 通常用 reset 命令将终端设置恢复为正常状态。
  3. bash shell 提供了 tab 补全功能(tab completion),在指定命令或文件时节省了很多打字时间。
  4. 了解 Linux 如何引用设备,可以区分各种类型的终端。

讨论


控制终端

bash shell 及其运行的终端,是有经验的 Linux 用户使用的主要工具。这个课程专门有一整本教程讨论 bash shell 的强大功能。本课我们介绍终端共有的一些特征,和 bash shell 极有用的一项功能 - tab 补全功能(tab completion)。

复位终端
终端显示信息时,会逐字节显示。计算机在处理人可读文本时,通常使用 ASCII 格式将字符编码为整数字节值。虽然一个字节最多可以编入 256 个不同的值,只有一小部分(大约 100 个)用作文本字符和标点符号。其它值用来编码控制键组合和其它特殊情况。

有时,用户会不小心(或有意)指示终端显示格式没有被编码为 ASCII 文本的数据,如图像或可执行文件。终端会尽量执行,但经常出现的是乱码。更麻烦的是,终端可能会死在图形模式中,因此甚至应该是正常的 ASCII 文本看起来也不可读。

在这种情况下,reset 命令可将终端恢复到正常状态。通常当你使用这个命令时,你甚至看不到自己在键入它。但如果在一个不可读的 bash 提示下,输入 reset 然后点击 RETURN 键,可以把终端恢复到正常状态。

终端控制组合键
Linux 终端与它的原始前身,电传打字机和“哑终端”或 vt100 类型控制台,有许多相似之处。这些早期的设备有发送“特殊”信号或信号序列的机制,信号序列代表正常键入的字符流以外的一些事件,如:后退一格、换行、音 效或信息传递结束。Linux 终端和它的前身一样,使用 CTRL 键发送这些“特殊”信号。

下面的表格总结了所有 Linux 终端共享的许多常用控制组合键及其常见用法。在这个表格之后我们还会根据其适用性一步讨论这些控制组合键。

Table 1. Linux 终端控制组合键

组合键 符号名称 约定使用
CTRL-C SIGINT 非常规中断 - 终止前台进程
CTRL-D EOT 输入完成的正常信号
CTRL-G BEL 终端声效
CTRL-H BS 后退一格 - 删除前一个字符
CTRL-J LF 换行 - 与 RETURN 键功能相同
CTRL-L FF 换页 - 使 bash 清屏,使其它基于屏幕的程序“刷新”当前屏幕
CTRL-Q   解冻终端显示(见 CTRL-S)
CTRL-S   冻结终端显示(使用 CTRL-Q 解冻)
CTRL-U NAK 删除当前的行
CTRL-Z SIGSTOP 挂起前台进程

CTRL-C
 

CTRL-C 可能是最有用的组合键,帮助用户停止现在进行的工作。使用 bash shell 时,点击 CTRL-C 可以终止当前运行的进程,返回到 bash 提示。

设备节点 /dev/zero 是假设备,读取时会返回无数个(二进制)零。/dev/null 设备节点也是一个假设备,会删除任何写入其中的信息。因此以下命令会永远运行下去,读取零,然后删除。处于这种情况的用户可以使用 CTRL-C 取消这个命令。

Source code    
[elvis@station elvis]$ cat /dev/zero > /dev/null
    (... user types CTRL-C ...)
    [elvis@station elvis]$

CTRL-D
在以后的教程中我们会谈到,许多 Unix 命令直接从键盘读取输入。但对于新的 Unix 用户来说,如何通知命令何时停止读取输入常常是不明显的。解决这个问题的办法是用组合键 CTRL-D。这组控制键向读取的进程传送“信息传递完毕”的信号(一般理解为“文件结束”)。

wc 命令在没有给出文件名作为参数的情况下,会对用户从键盘输入的行、词和字符进行计数。用户使用组合键 CTRL-D 表示输入结束。

Source code    
[elvis@station elvis]$ wc
polly wants a cracker
polly wants a cracker
polly wants a cracker
(... user types CTRL-D ...)
      3      12      66
[elvis@station elvis]$

命令 wc 会负责地报告,用户输入了 3 行,共有 12 个词,使用了66个字符。(这个功能现在可能没有用,但在以后的教程中我们还会学到更多的 wc 的用法。)如果用户使用 CTRL-C 又会怎么样呢?

CTRL-Z
组合键 CTRL-Z 用来挂起程序,挂起的程序可用 fg(“foreground”(前台))命令恢复。在进行 ftp 会话时,elvis 想要确认 shell 的当前工作目录。他使用 CTRL-Z 挂起正在进行的 ftp, 从 shell 运行 pwd 命令,然后用 fg. 恢复 ftp 会话。
 

Source code    
[elvis@station elvis]$ ftp ftp.redhat.com
    Trying 66.187.232.51...
    Connected to ftp.redhat.com (66.187.232.51).
    220 Red Hat FTP server ready. All transfers are logged. (FTP)
 
    Name (ftp.redhat.com:elvis): anonymous
 
    331 Please specify the password.
    Password:
    230 Login successful. Have fun.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>
 
    (... user types CTRL-Z ...)
 
    [1]+  Stopped                 ftp ftp.redhat.com
 
    [elvis@station elvis]$ pwd
 
    /home/elvis
 
    [elvis@station elvis]$ fg
 
    ftp> ftp.redhat.com
 
    ftp> ls
 
    227 Entering Passive Mode (66,187,232,51,67,212)
    150 Here comes the directory listing.
    drwxr-xr-x    6 ftp      ftp          4096 May 24 01:33 pub
    226 Directory send OK.
    ...

 

以这种方式管理进程是相当复杂的,在以后的教程中我们会再讨论。现在我们只要知道 CTRL-Z 用来挂起、fg 用来恢复就可以了。

CTRL-U
CTRL-U 一般用来“擦除”当前的行。如果你所在的 bash 命令行错误繁多,你懒得修改,不如使用 CTRL-U 重新来过。如果你输入密码时弄错了,也可以使用 CTRL-U。因为输入的密码不会在屏幕上显示,有时很难知道到底输入了什么,很难改动,不如使用 CTRL-U 组合键重新来过。

CTRL-H
CTRL-HBACKSPACE 的功能完全一样。但在有些终端上,BACKSPACE 键被错误的映像,不能正确工作。而 CTRL-H 几乎总是可以在这些情况下正常发挥作用。

CTRL-L

CTRL-L 传统上用来停止打印当前的页,开始下一页。如果使用在线终端,可以用它来刷新屏幕。对于许多基于屏幕的程序而言,包括 vi 和 nano 编辑器,如果意外的信息弄乱了显示屏,使用 CTRL-L 可以让程序刷新屏幕,正确地重绘屏幕。

在 bash shell 中,CTRL-L 指示 bash 清屏,但保留当前的命令行。

CTRL-Q
CTRL-S“冻结”屏幕后,CTRL-Q“解冻”屏幕(让它重新启动)。虽然在使用过 CTRL-Q 后,才能用这个组合键,我们先介绍它(作为更有用的命令)是因为,几乎没有人会故意使用 CTRL-S,但新的 Unix 用户有的时候会不小心点击 CTRL-S 组合键,不明白为什么他们的屏幕会冻结起来。如何你的机器出现死屏的现象,试着使用CTRL-Q 看能否解冻。

CTRL-S
见上一项 CTRL-Q

CTRL-J
几乎从来不用。(一般使用 RETURN 键。)

CTRL-G
唯一真正的用途是让终端发出响声。

识别终端
和其它设备相似,程序通过位于目录 /dev 的设备节点和终端在底层交流。比如说,使用设备节点 /dev/tty1 和第一个虚拟控制台交流。大多数进程记录启动它们的终端,用户的登录会话通常与他们使用的终端相关。在辨识这些终端时,终端用它的设备节点来代表,如 tty1。

在以下的摘录中,elvis 使用 who 列出一台机器上的当前用户,他还用 ps 列出从他的终端上运行的当前进程。在这两种情况下,终端都在列“TTY”中指定。

Source code    
[elvis@station elvis]$ who
root     tty2         Jun 21 10:12
elvis    tty3         Jun 21 16:50
blondie  :0           Jun 21 10:13
blondie  pts/0        Jun 21 16:43 (:0.0)
blondie  pts/1        Jun 21 10:14 (:0.0)
blondie  pts/2        Jun 21 10:31 (:0.0)
blondie  pts/3        Jun 21 10:39 (:0.0)
 
[elvis@station elvis]$ ps
 
  PID TTY          TIME CMD
 4384 tty3     00:00:00 bash
 4427 tty3     00:00:00 ps

Linux 将许多设备都当成终端,包括虚拟控制台、串行线连接的 VT100 终端、调制解调器等。以下的表格列出一些常用的终端设备的惯例名称。

Table 1. 终端设备名称

名称 设备 使用
ttyn 虚拟控制台 使用 CTRL-ALT-Fn 组合键访问。
ttySn 串口端口设备 连接到串行端口上的调制解调器或 VT100 类型。Unix 中的 ttyS0 等于 DOS 中的 COM1,COM2 等于 ttyS1,以此列推。
pts/n 假终端 一个终端模拟,经常被 X 图形环境中的终端窗口或起始于网络的 shell (如 telnet 和 ssh )使用。假终端不能直接与物理设备相联系。
:0 X 服务器 X 服务器并不是真正的终端。当用户使用 X 图形环境的登录管理器登录时,其终端经常被列为 X 服务器本身。

tab 补全功能
tab 补全功能并不是终端的特征,而是 bash shell 的特征。输入命令和文件的名称时,能够熟练使用 TAB 键,可以节省很多时间和精力。

bash 命令行输入第一个词作为命令名的时候,输入你要执行的命令,在完成之前点击 TAB 键,会出现以下三种情况之一。

  1. 命令还没有输入的部分自动出现。
  2. 没输入的命令出现一部分,然后 bash 会停下来,发出“嘟嘟”的声音。
  3. bash 发出“嘟嘟”的声音。

bash shell 尽量从所有可能的命令中帮你选择你正在输入的命令。在第一种情况下,只有一个命令是以你输入的字母开头的,bash 能够准确地找到你要执行的命令,帮你补全剩余部分。

在第二种和第三种情况下,不止一个命令是以你输入的字母开头的。bash 尽量补全命令,但是停下来发出“嘟嘟”的声音,提醒你还有其他的选择。要浏览 bash 已经帮你缩小了的选择范围,再次点击 TAB 键,bash 会显示所有以你输入的字母开始的命令。提供进一步信息,让 bash 能够肯定你所需的命令,再次点击 TAB 键,bash 会帮你补全命令。

下面我们来看一个例子。

用户 elvis 希望为他的终端启用 Unicode 模式。我们现在先不管 Unicode 模式是什么,或者他为什么要启用。你只需要知道启动 Unicode 模式的命令是 unicode_start,停止它的命令是 unicode_stop。他开始输入命令,然后点击 TAB 键。

Source code    
[elvis@station elvis]$ unic<TAB>

bash 把这个词扩展为 unicode_st,然后发出“嘟嘟”的响声。为了看到可能的补全列表,elvis 点击了 TAB 两次。

Source code    
[elvis@station elvis]$ unicode_st<TAB><TAB>
unicode_start   unicode_stop

bash 显示两个以 unicode_st 开头的命令。elvis 要执行的是唯一以 unicode_sta 开头的命令,他输入 a,再点击 TAB

Source code    
[elvis@station elvis]$ unicode_sta<TAB>

bash 补全了命令,闪烁光标,以便可以开始为命令输入任何参数或命令行选项。

Source code    
[elvis@station rha030]$ unicode_start

bash 不光能使用现有的命令完成命令行的第一个词,它还可以用文件系统中的文件帮你完成命令行的其它部分。例如,madonna 要查看文件 /etc/prelink.conf。她不需要输入文件全名,她可以只输入前面的部分,然后点击 TAB

Source code    
[madonna@station madonna]$ cat /etc/prel<TAB>

因为 /etc/prelink.conf 是唯一以 /etc/prel 开头的文件,bash 可以补全文件名。

Source code    
[madonna@station madonna]$ cat /etc/prelink.conf
# This config file contains a list of directories both with binaries
# and libraries prelink should consider by default.
# If a directory name is prefixed with `-l ', the directory hierarchy
# will be walked as long as filesystem boundaries are not crossed.
# If a directory name is prefixed with `-h ', symbolic links in a
# directory hierarchy are followed.
-l /bin
-l /usr/bin
...

随着深入学习这门课程,花点时间熟悉 tab 补全功能,可以帮你节省很多时间和精力。用熟以后,使用 TAB 键会变成本能。一天下来,左手的小拇指因为不断敲击 TAB 键而变得酸痛。

Examples

浏览二进制文件后复位终端。
用户 blondie 无意中使用命令 cat 浏览了一个可执行文件 /bin/arch。由于这是一个编译型可执行文件,含有不应该在终端显示的字节,使她的终端变得乱糟糟的。

Source code    
[blondie@station blondie]$ cat /bin/arch
ELF??414 (44???4????/lib/ld-linux.so.2GNU???y??6,?????aaa????aac????-?????[???

为了复位终端,blondie 盲打了 reset 命令,将终端恢复正常状态。

Source code    
[blondie@station blondie]$

取消命令

用户 prince 觉得从根目录 / 开始递归地列出文件系统的内容会很有趣。

Source code    
[prince@station prince]$ ls -R /
/:
bin   data  etc   initrd  lost+found  mnt  proc  root  sbin  usr  web
boot  dev   home  lib     misc        opt  rha   RPMS  tmp   var
 
/bin:
arch           cut            gawk      mail           rm         touch
ash            date           gettext   mkdir          rmdir      true
ash.static     dd             grep      mknod          rpm        umount
aumix-minimal  df             gtar      mktemp         rvi        uname
awk            dmesg          gunzip    more           rview      unicode_start
basename       dnsdomainname  gzip      mount          sed        unicode_stop
bash           doexec         hostname  mt             setfont    unlink
bash2          domainname     igawk     mv             setserial  usleep
...

他花了几分钟看文件,觉得看够了,就用 CTRL-C 取消命令。命令终止,他返回到 bash 提示。

Source code    
[prince@station prince]$

练习

挂起终端输出
[Warning]    上机练习

练习目的:学习管理长时间运行的命令的终端输出。

Estimated Time: 5 mins.

具体操作

  1. 和示例中的 prince 一样,使用命令 ls -R / 递归地列出文件系统的根目录内容。
  2. 在输出滚动显示的时候,用控制键组合 CTRL-S 冻结你的终端。
  3. 使用控制键组合 CTRL-Q 解冻终端。你应该可以用这两组控制键交替冻结和解冻终端。
  4. 当命令不断输出时,使用控制键组合 CTRL-Z 挂起进程。
  5. 确认进程已经挂起。

结果
A title
Question 1

  1. 停止(挂起)的 ls -R / 命令。


Cleaning Up

检查你练习的结果后,使用命令 fg 把挂起的进程恢复到前台。使用控制键组合 CTRL-C 取消命令。

整理袜子。
[Warning]    上机练习

练习目的:学习如何有效终止从键盘上读取命令输入。

Estimated Time: 5 mins.

具体操作
你想在主目录下的文件 sorted_socks.txt 中生成一个列表,列出分类的袜子(按字母顺序排列)。

  1. 在主目录中运行命令 sort > sorted_socks.txt。命令不应该马上终止,而要等待键盘输入。
  2. 输入几种袜子类型,如“yellow socks(黄袜子)”、“dirty socks(脏袜子)”、“cool winnie the pooh socks(酷酷的维尼熊袜)”等。使用 RETURN 键将每种袜子用新行隔开。
  3. 列出几种袜子后,用控制键 CTRL-D 终止列表。现在你应该有一个文件,其中含有被分类的袜子的列表。
  4. 退出 shell,以便保存历史记录。
Source code    
[student@station student]$ sort > sorted_socks.txt
yellow socks
dirty socks
cool winnie the pooh socks
(... type CTRL-D ...)
[student@station student]$ cat sorted_socks.txt
cool winnie the pooh socks
dirty socks
yellow socks

结果
A title
Question 1

  1. 你的主目录含有一个名为 sorted_socks.txt 的文件,这个文件含有被分类的袜子的列表,和含有命令 sort > sorted_socks.txt 的文件 .bash_history。

问题
A title

Question 1
以下哪个命令会把终端恢复到正常状态?

  • A.sanetty
  • B.reload
  • C.start-unicode
  • D.reset
  • E.sane

Question 2
以下哪个控制键组合可以挂起命令?

  • A.CTRL-C
  • B.CTRL-D
  • C.CTRL-Q
  • D.CTRL-U
  • E.CTRL-Z

Question 3
如果你见到一个完全没有反应的终端,以下哪个控制键组合会重新让它活动起来?

  • A.CTRL-C
  • B.CTRL-D
  • C.CTRL-Q
  • D.CTRL-U
  • E.CTRL-Z

Question 4
如果你怀疑你输入了错误的密码,哪个控制键组合可以让你重头开始?

  • A.CTRL-C
  • B.CTRL-D
  • C.CTRL-Q
  • D.CTRL-U
  • E.CTRL-Z

Question 5
如果你要取消一个产生太多输出的命令,哪个控制键组合最有用?

  • A.CTRL-C
  • B.CTRL-D
  • C.CTRL-L
  • D.CTRL-S
  • E.CTRL-U


Question 6

如果你想冻结终端输出,以便晚些时候继续,哪个控制键组合最有用?
A.CTRL-C
B.CTRL-D
C.CTRL-L
D.CTRL-S
E.CTRL-U

Question 7
哪个控制键组合指示 bash 清屏?
A.CTRL-C
B.CTRL-D
C.CTRL-L
D.CTRL-S
E.CTRL-U

使用命令 who 的输出回答下列问题。
 

Source code    
[prince@station prince]$ who
blondie  tty2         Apr 21 22:07
elvis    tty1         Apr 21 22:07
elvis    tty3         Apr 21 22:07
root     tty6         Apr 21 22:07
prince   :0           Apr 21 21:50
prince   pts/0        Apr 21 21:53 (:0.0)
prince   pts/1        Apr 21 21:54 (:0.0)
prince   pts/2        Apr 21 21:55 (:0.0)
madonna  pts/3        Apr 21 22:08 (:0.0)

 

Question 8
用户 blondie 是如何登录企业版 Linux 机器的?

  • A.使用 X 图形环境中的登录管理器。
  • B.虚拟控制台。
  • C.串行线连接的终端。
  • D.ssh 网络连接。
  • E.无法从所给信息判断登录方式。

Question 9
用户 prince 是如何登录企业版 Linux 机器的?

  • A.使用 X 图形环境中的登录管理器。
  • B.虚拟控制台。
  • C.串行线连接的终端。
  • D.ssh 网络连接。
  • E.无法从所给信息判断登录方式。

Question 10
哪个用户以管理员根用户的身份登录?

  • A.blondie
  • B.elvis
  • C.madonna
  • D.prince
  • E.It cannot be determined with the information provided.

你可能感兴趣的:(linux,redhat,职场,enterprise,休闲)