2.5Linux的用户插口与文本编辑器2.5.1shell简介
严格地说,Linux这个名子仅仅指的是由Linus主导发展的一个操作系统内核linux查看版本5还是6,而不是通常用户所见到和使用的操作系统平台。但因为Linux内核得到了广泛使用和宣传,如今通常所指的Linux包括了操作系统内核和由GNU提供的一系列外围程序。它们组成了才能提供计算机硬件管理和执行用户操作恳求功能的操作系统平台。这个系统在结构上可以界定为4部份,如图2-28所示。

图2-28系统结构
1.Linux内核
内核是系统的肾脏,是运行程序和管理c盘、打印机等硬件设备的核心程序。
2.运行期库和系统程序
在内核以外,就是一组运行期库和系统程序,它们封装了内核向外提供的功能插口,将这种功能加入一定的权限检测后,通过自己的应用插口提供给通常用户进程使用。
3.shell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种插口。它接收用户输入的命令,但是把它送入内核去执行。
4.实用工具程序
实用工具程序是用户拿来完成其特定工作的应用程序。标准的Linux系统包括了一套实用工具程序,如文本编辑器、数据处理工具、开发工具、Internet工具等。用户也可以依照Linux的规则开发自己的应用程序。
RedHatLinux包括几种不同的shell。Bash是为互动用户提供的默认shell。
2.5.2shell命令基础
在文本界面下,用户对Linux的操作通过shell命令来实现。shell可执行的用户命令分为外置命令和实用程序两大类。
shell对于用户输入的命令,有以下几种处理方法:
1)假如用户输入的是外置命令,这么由shell的内部类库进行解释,并交由内核执行。
2)假如用户输入的是实用程序命令,并且给出了命令的路径,这么shell会根据用户提供的路径执行命令。
用户登入到Linux系统时,可以看见一个shell提示符(假如以root用户登入,获得的提示符是“#”,普通用户将是“$”),标示了命令行的开始。用户可以在提示符前面输入任何命令及参数,如图2-29所示。

图2-29date命令
用户登入时,实际步入了shell,它遵守一定的句型将输入的命令加以解释并传给系统。命令行中输入的第一个数组必须是一个命令的名子,第二个数组是命令的选项或参数,命令行中的每位数组必须由空格或制表符(按〈Tab〉键)隔开,具体格式如下:
选项是包括一个或多个字母的代码,它上面有一个加号(负号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型,如图2-30所示。

图2-30没带选项的ls命令
这是没有选项的ls命令,可列举当前目录中的所有文件,只列举各个文件的名子,而不显示其他更多的信息。
加入“-l”选项,将会为每位文件列举一行信息,例如数据大小和数据最后被更改的时间,如图2-31所示。

图2-31带选项的ls命令
这儿要非常注意,Linux的命令是分辨大小写的。在命令行(shell)中,可以使用〈Tab〉键来手动补齐全命令,即可以输入命令的前几个字母,之后按〈Tab〉键,系统将手动补全该命令。若不止一个,则显示所有和输入字符相匹配的命令。
另外,借助向下或向上的方向键,可以翻查曾执行过的历史命令,并可再度执行。
要在一个命令行上输入和执行多条命令,可使用分号来分隔命令,例如,“cd/etc;ls-l”。
断掉一个长命令行,可使用反斜杠“”将一个较长的命令分为多行抒发,以提高命令的可读性。换行后,shell手动显示提示符“>”,表示正在输入一个长命令,此时可继续在新行上输入命令的后续部份。
转义用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。常用的键值有“*”“?”和括在方括弧“[]”中的字符序列。用户可以在作为命令参数的文件名中包含那些键值,构成一个所谓的“模式串”,在执行过程中进行模式匹配。
1)*代表任何字符串(厚度可以不等)。诸如,“f*”匹配以f打头的任意字符串。但应注意,文件名前的圆点(.)和路径名中的斜线(/)必须显式匹配。诸如,“*”不能匹配.file,而“.*”才可以匹配.file。
2)?代表任何单个字符。

3)[]代表指定的一个字符范围,只要文件名中[]位置处的字符在[]食指定的范围之内,这么这个文件名就与这个模式串匹配。方括弧中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。诸如,f[a-d]与f[abcd]的作用相同。shell将把与命令行食指定的模式串相匹配的所有文件名都作为命令的参数,产生最终的命令,之后再执行这个命令。
2.5.3基本命令
shell命令特别多,选项也十分复杂,不易全部把握。本书选择性地介绍最常用的shell命令。
1.与文件、目录的完善以及路径相关的shell命令
(1)mkdir命令
功能:创建一个目录(类似DOS下的md命令)。
句型:
说明:该命令创建由dir-name命名的目录。要求创建目录的用户在当前目录(dir-name的父目录)中具有写权限,而且dir-name不能是当前目录中已有的目录或文件名称。
命令中各选项的涵义如下:
-m为对新建目录设置存取权限,也可以用chmod命令设置;
-p为可以是一个路径名称,此时若路径中的个别目录尚不存在,加上此选项后,系统将手动构建好这些尚不存在的目录,即一次可以构建多个目录。
【例2-1】创建名为test的目录,并在其下创建aa/bb/cc/dd目录。

过程及结果如图2-32所示。

图2-32构建目录
在例2-1中可以见到,没有选项-p是难以直接递归构建多个目录的。
(2)rmdir命令
功能:删掉空目录。
句型:
说明:dir-name表示目录名。该命令从一个目录中删掉一个或多个子目录项。须要非常注意的是,一个目录被删掉之前必须是空的。rm-rdir命令可替代rmdir,并且有危险性。删掉某目录时也必须具有对父目录的写权限。
命令中选项的涵义如下:
-p为递归删掉目录dir-name,当子目录删掉后其父目录为空时,父目录也一齐被删掉。假如整个路径被删掉或则因为某种诱因保留部份路径,则系统在标准输出上显示相应的信息。诸如,删掉例2-1中的test目录:
(3)pwd命令
功能:显示整个路径名。
句型:
说明:此命令显示出当前工作目录的绝对路径。在Linux层次目录结构中,用户可以在被授权的任意目录下借助mkdir命令创建新目录,也可以借助cd命令从一个目录转换到另一个目录。但是,没有提示符来告知用户目前处于哪一个目录中。要想晓得当前所处的目录,可以使用pwd命令。
(4)cd命令
功能:改变工作目录。
句型:
说明:该命令将当前目录改变至directory所指定的目录。若没有指定directory,则回到用户的主目录。为了步入指定目录,用户必须拥有对指定目录的执行和读权限。
【例2-2】切换目录。

如图2-33所示,借助cd命令切换到/var目录,之后切换到spool目录下。

图2-33切换目录
这儿路径既可采用绝对路径,也可采用相对路径。当采用相对路径时,是指切换到当前目录中的某个子目录。
【例2-3】切换到用房主目录。
如图2-34所示,“cd~”命令和“cd”命令作用相同,都能切换到用户的主目录。默认情况下,超级用户的主目录是/root,而普通用户的主目录是/home下与该用户同名的子目录。
图2-34切换到用房主目录
(5)ls命令
功能:ls是英语词组list的缩写,其功能为列举目录的内容。这是用户最常用的命令之一,由于用户须要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。
句型:
说明:对于每位目录,该命令将列举其中的所有子目录与文件。对于每位文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母次序排序。当未给出目录名或文件名时,就显示当前目录的信息。
命令中常用选项的含意如下:
-a为显示指定目录下所有子目录与文件,包括隐藏文件;
-A为显示指定目录下所有子目录与文件,包括隐藏文件,但不列举“.”和“..”;
-C为分成多列显示各项;
-l为以长格式来显示文件的详尽信息,这个选项最常用;
-d为假如参数是目录,只显示其名称而不显示其下的各文件,常常与l选项一起使用,以得到目录的详尽信息;
-i为在输出的第一列显示文件的i结点号。每行列出的信息依次是:文件类型与权限链接数文件属主文件属组文件大小构建或近来更改的时间名子。对于符号链接文件,显示的文件名以后有“->”和引用文件路径名。对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。目录中的总块数显示在长格式列表的开头,其中包含间接块。
-m为输出按字符流格式,文件跨页显示,以冒号分开;
-n为输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和GID号来表示,而不是实际的名称;
-R为递归式地显示指定目录的各个子目录中的文件;
-t为显示时按更改时间(近来优先)而不是按名子排序。若文件更改时间相同,则按字典次序。默认的时间标记是最后一次更改时间。
【例2-4】查看当前目录下所有文件和子目录的详尽信息。
/var/spool下所有文件和子目录的详尽信息如图2-35所示。

图2-35显示/var/spool下所有文件和子目录的详尽信息
2.与Linux文件的复制、删除和联通命令有关的命令
(1)cp命令
功能:将给出的文件或目录复制到另一文件或目录中。该命令同DOS下的copy命令一样,功能非常强悍。
句型:
说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。
该命令的主要选项涵义如下:
-d为复制时保留链接。

-r为若给出的源文件是一个目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
【例2-5】复制命令的使用。

(2)mv命令
功能:为文件或目录更名或将文件由一个目录移入另一个目录中。
句型:
说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统联通文件时,mv命令先复制,再将原有文件删掉,而链至该文件的链接也将遗失。
命令中主要选项的涵义如下:
-i为交互方法操作,假如mv操作将造成对已存在的目标文件的覆盖,此时系统寻问是否重画,要求用户回答y或n,这样可以防止误覆盖文件;
-f为严禁交互操作,在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。
假如所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为避免用户用mv命令破坏另一个文件,使用mv命令联通文件时,最好使用i选项。
【例2-6】mv命令的使用。

(3)rm命令
功能:用户可以用rm命令删掉不须要的文件。该命令的功能为删掉一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删掉。对于链接文件,只是断掉了链接,原文件保持不变。
句型:
说明:假如没有使用-r选项,则rm不会删掉目录。
该命令的各选项含意如下:
-f为忽视不存在的文件,从不给出提示;
-r指示rm将参数中列举的全部目录和子目录均递归地删掉;
-i进行交互式删掉。
使用rm命令要当心。由于一旦文件被删掉,它是不能被恢复的。要避免这些情况的发生linux 内核,可以使用i选项来挨个确认要删掉的文件。假如用户输入y,文件将被删掉。倘若输入任何其他东西,文件则不会被删掉。
【例2-7】rm命令的使用。

(4)touch命令
功能:touch命令用于更新指定的文件或目录被访问和更改时间为当前系统的日期和时间。查看当前系统日期和时间,使用date命令。
若指定的文件不存在,则该命令将以指定的文件名手动创建出一个空文件。这也是快速创建文件的一个途径。
【例2-8】要创建两个没有内容的空文件aa和bb。
注意,touch命令和文件名,以及各个文件名之间用空格进行分隔,如图2-36所示。

图2-36touch命令的使用
3.与查看文件内容有关的命令
(1)cat命令
句型:

说明:cat命令是最简单的查看命令,它可以显示文本文件的内容,常用这个命令来显示较小的文件,例如只有几行或则最多不超过一屏的文件,缘由是这个命令会不受控制地把整个大文件一下显示完。所以假如用它来阅读大文件,只能看见最后一屏的文本。
该命令的各选项涵义如下:
-n选项拿来在每行上面显示行号;
-b选项跟-n选项作用差不多,都拿来显示行号,但-b只会在非空白行显示行号。
在cat命令前面可以指定多个文件,或使用转义实现依次显示多个文件的内容,例如:
【例2-9】查看/etc/fstab文件的内容,并在每一行前加行号。
显示/etc/fstab的内容如图2-37所示。

图2-37显示/etc/fstab的内容
(2)more命令
句型:
说明:more命令也常拿来显示较长的文本文件,不过它只能向文件前面翻页。它也有些控制键,按〈h〉键可以查看帮助。
该命令的选项涵义如下:
-s表示压缩多行空白为单行空白。
(3)less命令
句型:
说明:less命令常拿来显示较长的文本文件,它可以往前向后翻页。这个命令有好多控制快捷键,如按按键上的空格键可以向上翻一页,按〈Enter〉键翻一行,按字母〈b〉键回到前一页。这个命令还可以查找文本,例如,输入“/abc”按〈Enter〉键就可以向文件的前面搜索abc这串文本,输入“?abc”则向文件的上面搜索abc。
该命令的各选项涵义如下:
-N表示显示行号。
-s表示压缩多行空白为单行空白。
(4)head命令
句型:
说明:head命令默认情况下显示文件的前10行。
该命令的选项涵义如下:
-Number显示文件后面Number行,如head-5myfile将显示文件的前5行;
-cNumber这个选项拿来显示文件后面Number个字符。
【例2-10】显示/etc/fstab文件的前5行内容,如图2-38所示。

图2-38显示/etc/fstab前5行的内容
【例2-11】显示/etc/fstab文件的前5个字符。

显示etc/fstab的前5个字符如图2-39所示。
图2-39显示/etc/fstab的前5个字符
(5)tail命令
句型:
说明:tail命令默认情况下显示文件的最后10行。
该命令的各选项涵义如下:
-Number显示文件最后Number行,如head-5myfile将显示文件的最后5行。
+Number显示文件的第Number+1行到最后一行。
-cNumber显示文件后面Number个字符。
(6)grep命令
句型:
说明:grep命令用于在指定的文件中,查找并显示富含指定字符串的行。
【例2-12】在/etc/fstab文件中,查找显示富含swap的行的内容。
显示如图2-40所示。

图2-40显示富含swap的行的内容
(7)>、>>与与表示追加。
1)输入重定向。输入重定向是指把命令或可执行程序的标准输入重定向到指定的文件中。也就是说linux查看版本5还是6,输入可以不来自按键,而来自一个指定的文件。所以说linux环境变量,输入重定向主要用于改变一个命令的输入源,非常是改变这些须要大量输入的输入源。诸如,wc命令统计指定文档包含的行数、单词数和字符数。倘若仅在命令行上输入:
wc命令将等待用户告诉它统计哪些,这时shell就好象无效一样,从鼠标输入的所有文本都出现在屏幕上,但并没有哪些结果,直到按〈Ctrl+D〉组合键,wc才将命令结果显示在屏幕上。假如给出一个文档名作为wc命令的参数,wc命令将返回该文档所包含的行数、单词数和字符数。
显示如图2-41所示。

图2-41wc命令
另一种把/etc/passwd文档内容传给wc命令的方式是重定向wc的输入。输入重定向的通常格式:
可以用下边的命令把wc命令的输入重定向为/etc/passwd文件:
结果如图2-42所示。

图2-42wc命令的输入重定向为/etc/passwd文件
另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用
