
1.4 shell和常用命令
在Linux系统中,相比于图形桌面,更多的是通过命令行来操作。本书中使用的Ubuntu系统也不例外,熟练使用命令是熟悉Ubuntu系统使用中的一个重要且必需的环节。
1.4.1 shell、终端和命令
通过1.1.2节可以知道,计算机所执行的所有操作都是通过操作系统内核来调用计算机的硬件完成的。但是内核是直接操作计算机硬件的,如果让用户直接操作内核,稍有不慎就可能导致计算机宕机甚至损坏。所以就需要一个安全的接口来操作内核,就像在操作系统的“核”之外再裹上一层“壳”来保护“核”,这个“壳”就是shell。
shell是一类专门的程序,用于接收用户的操作指令,将用户的操作指令解析后翻译给内核去处理,如果内核处理后有返回结果,再将内核的返回结果展示给用户。
但是shell只是负责接收和解析用户的操作指令,不负责具体的输入过程,例如用户通过键盘输入指令,键盘按键按下之后,捕获字符还需要其他软件来实现。实现从用户接收输入后交给shell的软件,就称为终端。图1-36所示是Ubuntu中默认的终端软件Terminal。
终端更严谨地说应该叫作“终端模拟器”(Terminal Emulator),在早期的计算机中,有一个硬件终端用于输入指令,而随着计算机的发展,这个硬件已经不复存在了。现在的“终端”是通过将自己“伪装”成一个终端设备和shell交互。硬件、内核、shell和终端之间的关系如图1-37所示。

图1-36 Terminal软件

图1-37 硬件、内核、shell和终端关系
shell是独立于内核之外的,那么它在操作系统中实现的方式也就可以是不唯一的,目前比较常见的有bash(Bourne-Again shell)和zsh(Z shell)两款软件,其中bash是Ubuntu中默认的shell。而在终端中所输入的用于控制操作系统的内容就是命令。终端、shell、bash、命令各自的功能见表1-3。
表1-3 终端、shell、bash、命令各自的功能

在Ubuntu中使用打开终端常用有两种方式。
第一种方式可以通过单击桌面左下角的9个点图标调出软件列表,如图1-38所示。搜索栏中输入“terminal”搜索终端软件,图1-39所示出现Terminal软件后单击即可打开。
第二种方式可以通过快捷键〈Alt+Ctrl+T〉快速地打开Terminal软件。

图1-38 程序搜索栏

图1-39 Terminal软件
两种方式打开终端效果是一致的,打开后可以通过右键单击Terminal图标,选择“Add to Favorite”将图标固定在桌面左侧的Dock栏,这样下次就可以很方便地直接单击打开,如果需要新开一个窗口,可以右键单击“New Window”新开一个终端窗口。
1.4.2 常用shell命令
在shell命令的实验中会涉及一些文件系统的知识,文件系统将在1.7节展开说明,这里只需要知道Linux文件系统中最顶层的目录称为根目录,根目录的名称为“/”,即斜杠符号。Linux中所有以“/”开头的路径都是绝对路径,反之是相对路径。“~”代表的是当前用户的主目录,它的绝对路径是/home/用户名(注意,这里的第一个‘/’符号代表的是根目录),对于实验中的“bingda”用户来说,‘~’等价于/home/bingda。
打开终端后看到的是类似如图1-40所示的内容,这就是命令提示符,出现命令提示符意味着用户可以输入命令了。

图1-40 命令提示符
命令提示符中前一个“bingda”是当前用户名,后一个“bingda-pc”是计算机的设备名,“~”表示当前的工作目录,即当前用户主目录,“$”表示当前为普通用户(注:普通用户相对的是超级用户,这部分内容将在1.8节中介绍)。
Linux中shell命令的基本格式为“命令[选项][参数]”,其中命令是必须要有的,而选项和参数,根据命令的不同,可以有0个或多个,同一个命令,带不同的选项和参数可以产生不同的结果。下面列举了一些常用命令的功能和用法,希望读者可以根据本节内容在Ubuntu中操作以加深印象。
(1)ls ls为英文“list”的缩写,功能为显示指定工作目录下内容。
该命令常用参数见表1-4。
表1-4 ls命令常用参数

实验:尝试在终端中输入以下命令。
ls为显示当前目录下文件。
ls-a为显示当前目录下所有文件。
ls-l为显示当前目录下所有文件属性。
ls-R为显示当前目录下所有文件及其主目录。
ls-al为显示当前目录下所有文件属性。
ls/sys为显示/sys目录下文件。
ls-l/sys为显示/sys目录下文件属性。
(2)pwd 显示当前工作路径,是“print work directory”的首字母缩写。
pwd的用法很简单,直接使用pwd,不带任何参数,即可显示当前所在目录。
实验:尝试在终端中输入命令pwd。
(3)cd 切换目录,是“change directory”的首字母缩写。
该命令常用参数见表1-5。
表1-5 cd命令常用参数

实验:尝试在终端中输入以下命令。
cd~为跳转到当前用户主目录。
cd/home/bingda为通过绝对路径跳转到当前用户主目录(bingda为当前用户名)。
cd为默认跳转到当前用户主目录(无参数),以上三条命令实际效果是相等的。
cd Desktop为通过相对路径跳转到当前目录下的Desktop目录中。
cd..为跳转到上一级目录。
cd../..为跳转到上一级的上一级目录,即上两级。
cd-为跳转到上次的目录,即上次执行cd命令时的目录。
(4)〈Tab〉键自动补全 通过〈Tab〉键可以自动补全命令、路径等,这是命令行操作中一个非常重要的功能,它不但能提高输入的效率,而且可以有效地避免输入错误的命令名称。
以补全命令为例,只需输入命令的前几个字符,然后按〈Tab〉键,如果当前输入的字符所对应的命令是唯一的,完整的命令会自动在命令行出现;反之则不会自动补全,但是再按一下〈Tab〉键,系统会列出符合当前输入字符的命令列表;如果没有出现列表,则当前输入字符没有对应的命令,需要检查输入部分的正确性。
(5)mkdir 创建目录,是“make directory”的缩写。
该命令常用参数见表1-6。
表1-6 mkdir命令常用参数

实验:将当前工作目录切换为‘~’,尝试在终端中输入以下命令。
mkdir bingda1为在当前目录下创建一个名为bingda1的目录。
mkdir bingda1/bingda2为在当前目录下的bingda1目录中再创建一个bingda2目录。
mkdir/home/bingda/bingda1/bingda3为通过绝对路径在用户主目录下的bingda1目录中创建bingda3目录。
mkdir-p bingda4/bingda5在当前目录下的bingda4目录中创建bingda5目录,如果bingda4目录不存在,则创建bingda4目录。
(6)touch修改文件或目录时间属性,或创建一个空文件。
实验:将当前工作目录切换为‘~’,尝试在终端中输入以下命令。
ls-l为获取当前目录下的文件和目录属性,记录bingda1目录的时间信息。
touch bingda1修改bingda1目录的时间属性为当前时间。
ls-l为观察bingda1目录的时间属性变化。
touch bingda为创建一个空文件,名称是bingda。
打开图形桌面中的文件管理器检查创建效果,确认新创建的bingda为文件而非目录。
(7)cp 复制文件或目录,是“copy”的缩写。
cp需要带的参数稍多,它的命令格式为“cp[参数]源文件 目标文件”,常用参数见表1-7。
表1-7 cp命令常用参数

实验:将当前工作目录切换为‘~’,尝试在终端中输入以下命令。
cp bingda bingda1/为指定路径而不指定文件名,则会默认使用原文件名。
cp bingda bingda1/bingda.1为指定路径和文件名,则会使用指定文件名。
使用文件管理器或者通过ls和cd命令来检验复制的结果。使用命令的方式时,在检验完成后记得将工作目录切回用户主目录继续下面的实验。
cp bingda1 bingda6为复制bingda1目录到当前目录,并命名为bingda6,系统会提示cp:-r not specified;omitting directory′bingda1′,因为cp默认是复制文件,复制目录需要加上-r参数。
cp-r bingda1 bingda6为复制bingda1目录到当前目录,并命名为bingda6,使用文件管理器或者通过ls和cd命令来检验复制的结果。
(8)mv 移动文件或目录到其他位置,是“move”的缩写。
mv命令和cp命令有点类似,区别在于cp的复制是保留源文件的,而mv则会删除源文件,另外mv移动目录时是不需要传入参数的,常用的参数为-i,功能同cp中的-i参数。由于mv移动后不保留源文件的特性,所以它可以用来实现文件或目录的重命名操作。
实验:将当前工作目录切换为‘~’,尝试在终端中输入以下命令。
mv bingda1/bingda bingda1/bingda2/bingda.3为将bingda1目录下的bingda文件移动到bingda1/bingda2目录下并命名为bingda.3。
mv bingda bingda2为将bingda重命名为bingda2。
mv bingda6 bingda7为将bingda6目录重命名为bingda7。
使用文件管理器或者通过ls和cd命令来检验移动和重命名的结果。
(9)rm 删除文件或目录文件,是“remove”的缩写。
该命令常用参数见表1-8。
表1-8 rm命令常用参数

实验:将当前工作目录切换为“~”,尝试在终端中输入以下命令。
rm bingda.2为删除bingda.2文件。
rm-r bingda7为删除bingda7目录及其子目录和文件。
rm-ri bingda1为删除bingda1目录及其子目录和文件,删除每个文件或目录前需要用户逐一确认,“y”键确认删除,‘n’键取消删除并终止当前操作。
touch bingda为再创建一个bingda的空文件。
chmod 444 bingda为修改bingda文件的权限为只读(暂不需要理解这条指令,只需要执行即可,在1.8节中会介绍)。
rm bingda:输入本命令后,系统会提示无法删除bingda这个文件,因为文件是写保护状态,可以通过加入-f参数,即rm-f bingda,强制删除。
rm-f bingda为强制删除bingda文件。
使用文件管理器或者通过ls和cd命令来检验移动和重命名的结果,并继续通过rm命令删除在之前的练习中创建的其他文件和目录。
(10)clear 该命令为清除屏幕显示。
clear只有一种用法和功能,即清除当前终端中显示的内容。
实验:尝试在终端中输入命令clear。
(11)poweroff关机和reboot重启 在Ubuntu中除了可以通过图像桌面中的电源按钮来实现关机和重启之外,还可以通过poweroff命令来关闭计算机,通过reboot命令来重启计算机。
实验:尝试在终端中输入以下命令。
poweroff执行后计算机将会关机。
reboot执行后计算机会执行重启操作。