RHCSARHCE 红帽Linux认证学习指南(第7版)EX200 & EX300
上QQ阅读APP看书,第一时间看更新

认证目标3.01 sheII

shell是一个用户接口。基于文本的shell也可用作命令行解释器。在Linux中,shell是一个解释程序,它允许我们用各种命令与Linux进行交互。只要有合适的文件权限,我们就可以在脚本文件中设置命令,需要时甚至可以在深更半夜时执行这些脚本文件。Linux shell可以按各种顺序处理命令,这取决于我们如何管理每个命令的输入和输出。每个shell对命令所做的解释一定程度上取决于它所使用的变量和参数。

Linux中默认的shell是bash,也称为Bourne-Again shell。本书的主要命令是基于这些命令在bash中的用法。但是也存在很多其他的shell,而且它们也有很多用户。只要能安装相应的RPM程序包,用户就可以启动任何一个shell。需要时可以在/etc/passwd文件中改变每个用户的默认shell。

3.1.1 其他shell

RHEL 7中有4种命令行shell,用户可以选择其中任何一种。虽然bash是默认的shell,但是长期使用Linux和Unix的用户可能喜欢其他shell:

bash 默认的Bourne-Again shell,它以Stephen Bourne最早开发的命令行解释程序为基础。

ksh 即Korn shell,由贝尔实验室的David Korn在20世纪80年代开发,结合了Bourne和C shell的最佳功能。

tcsh Unix C shell的增强版。

zsh 一个高级shell,类似于Korn shell。

这些shell都在/bin目录中配置。如果用户想把其中一个作为默认的shell,则并非难事。最直接的方法是在/etc/passwd文件中修改默认shell。例如,此文件中应用于一位作者的一个普通账户的一行内容是:

        michael:x:1000:1000:Michael Jang:/home/michael:/bin/bash

例如,要把默认的shell改为ksh,只需要把/bin/bash改为/bin/ksh。另外还需要为Korn shell安装对应的RPM程序包。

考试提示

尽管对大多数Linux用户来说很容易,但是RHCSA一个认证目标的一部分是“访问shell提示符”。现在你应该知道如何访问不同的shell提示符窗口。

3.1.2 虚拟终端

如果能访问RHEL系统的控制台,就可以使用6个虚拟终端来打开6个独立的登录会话。但是,默认情况下只激活一个虚拟终端。当切换到未使用的终端时,其他登录提示符会动态启动。虚拟终端由/etc/systemd目录中的logind.conf文件定义。观察该文件,可看到一个名为NAutoVTs的选项,它定义了可被激活的最大虚拟终端数。虚拟终端与设备文件/dev/tty1通过/dev/tty6关联。当系统配置了一个GUI,则它使用/dev/tty1。我们可以配置更多的虚拟终端,但是受/etc/securetty文件中为root管理员用户分配的虚拟终端数量的限制。

通常情况下,为在虚拟终端之间切换,要按下Alt和对应终端关联的功能键。例如,Alt+F2键可以切换到第二个控制台。但在RHEL GUI中,Alt+Fn键组合用来提供其他功能,例如Alt+F2可启动Run Application工具。因此,在GUI中需要按Ctrl+Alt+Fn才可以切换到第n个虚拟控制台。

登录文本控制台时会看到如下提示信息,但是具体内容可能会因RHEL的版本、内核的版本号以及系统的主机名而稍有差异:

        Red Hat Enterprise Linux Server
        Kernel 3.10.0-123.el7.x86_64 on an x86_64
        server1 login:

用图形模式登录时会更加直观,如图3-1所示,但需要安装GNOME显示管理程序(GNOME Display Manager, GDM)。

图3-1 第一个GUI登录控制台

3.1.3 GUI shell接口

登录到GUI后,访问bash shell就很容易。如果我们使用默认的GNOME桌面环境,则单击Applications | Utilities | Terminal。传统上,管理员总是从控制台控制计算机的。但在许多情况下从GUI环境访问命令行控制台可能会更加方便,特别当多个控制台并排出现在屏幕上时。右击GUI终端界面可以在不同的窗口或者选项卡中打开另外的终端窗口。需要时它还支持终端窗口之间的复制与粘贴。

本书使用的命令行截图都以基于GUI的命令行窗口为依据,部分原因是在白色屏幕上的黑字更容易阅读。

3.1.4 普通用户与管理员用户的区别

在命令行窗口中可以执行的命令取决于登录账户所拥有的权限。现在有两个基本的提示符。下面是普通用户登录后看到的提示符:

        [michael@server1~]$

注意,屏幕上出现了用户名、本地系统的主机名、当前目录和$提示符。$是普通用户的标准提示符。在本书的前言中曾提到,普通用户执行命令后只显示如下内容:

        $

与此相反,在同一个系统上来看看root管理员用户的提示符。它与普通用户的提示信息相似,除账户名不同外,唯一的区别是提示符:

        [root@server1~]#

本书中,root管理员账户执行命令的显示结果如下:

        #

除所有权、权限外,普通用户与管理员账户的其他差别将在第8章中介绍。

3.1.5 文本流与命令重定向

Linux使用三个基本数据流。数据输入流、数据输出流和向另一个方向发送的错误。这些流分别被称为标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。通常情况下,输入来自键盘,而标准输出和标准错误则发送到屏幕。在下例中,当执行cat filename这个命令时,系统把文件的内容作为标准输出发送到屏幕(就像发送任何错误一样)。

        # cat filename

也可以把这些流重定向到文件,或从文件重定向这些流。例如,有一个名为database的程序和一个包含大量数据的数据文件。用左重定向箭头(<)可以把此数据文件的内容发送到这个数据库程序。如下所示,这里的数据文件(datafile)被当作标准输入:

        # database < datafile

标准输入也可以来自某个命令的左侧。例如,当我们需要翻页浏览引导信息时,可用管道把dmesg和less两个命令组合在一起:

        # dmesg | less

这里把dmesg命令的输出重定向为less的标准输入。后者对前者的输出内容进行翻页浏览,就像它是一个独立文件一样。

标准输出重定向也一样容易。例如,下面的命令用右重定向符(>)把ls命令的标准输出发送到名为filelist的文件中。

        # ls > filelist

还可以用双重定向箭头命令(如ls>>filelist)在当前文件的末尾添加标准的输出流。

如果想将某个程序的错误消息保存到一个文件中,则用下面的命令重定向此程序的错误流:

        # program 2> err-list

有时候会想要丢弃所有错误。通过将错误流重定向到特殊的设备文件/dev/null可实现此目的:

        # program 2> /dev/null

&>是另一个有用的重定向符,它将标准输出和错误发送到一个文件或设备。下面给出了一个示例:

        # program &> output-and-error

考试提示

>、 >>、 2> 和 | 等命令重定向符在RHCSA认证目标中属于“输入/输出重定向符”。