第一部分 学习Shell

第1章 什么是Shell

当我们谈起命令行时,其实指的是Shell。Shell是一个程序,它接收由键盘输入的命令并将其传递给操作系统(简称系统)来执行。几乎所有的Linux发行版都提供了来自GNU项目的Shell程序Bash。Bash是Bourne Again Shell的缩写,以此表明Bash是sh的增强版,而sh是由史蒂夫·伯恩(Steve Bourne)编写的最初的UNIX Shell程序。

1.1 终端仿真器

当使用图形用户界面(Graphical User Interface,GUI)时,我们需要另一种叫作终端仿真器(terminal emulator)的程序与Shell进行交互。如果仔细查看桌面菜单,应该能在其中找到终端仿真器。在KDE下使用的是konsole,在GNOME下使用的是gnome-terminal,但是在菜单上很可能将它们简单地统称为终端(terminal)。Linux系统中可用的终端仿真器数目众多,不过基本上做的都是同样的事情:让用户访问Shell。根据功能特性的不同,你可能会偏好某种终端仿真器。

1.2 小试牛刀

现在就让我们开始吧。启动终端仿真器,随后出现类似于下面的提示符:

[me@linuxbox ~]$

这叫作Shell提示符,出现在Shell已经准备好接收输入的时候。在不同的Linux发行版中,提示符的格式可能会有所差异,不过通常都包括username@machinename、当前工作目录(稍后详述)及一个$。

如果提示符的最后一个字符是#,而非$,表明该终端会话具有超级用户权限。这就意味着要么我们是以超级用户(root用户)登录的,要么我们选用的终端仿真器提供了超级用户权限。

假设目前为止一切顺利,接下来尝试从键盘输入内容。像这样输入一些字符:

[me@linuxbox ~]$ kaekfjaeifj

因为这是个毫无意义的命令,所以Shell会报错并让我们重新输入:

bash: kaekfj aeifj: command not found
[me@linuxbox ~]$

1.2.1 命令历史

如果按上方向键,将会看到先前输入过的命令kaekfjaeifj又出现在了提示符之后,这称为命令历史记录。默认情况下,大部分Linux发行版能记住最近输入的1000个命令。按下方向键,刚才出现的命令就又消失了。

1.2.2 光标移动

再按上方向键,重新调出先前输入过的命令。如果按左方向键和右方向键,能够将光标移动到命令行的任意位置。这可以让我们很容易地编辑命令。

关于鼠标和焦点

虽然Shell与用户的交互全部是通过键盘来完成的,但是在终端仿真器中也可以使用鼠标。X Window系统(驱动GUI的底层系统)内建立了一种机制,支持快速“复制—粘贴”技术。如果按住鼠标左键,拖动鼠标选中部分文本(或者双击选中一个单词),这些文本会被复制到由X Window维护的缓冲区中。按鼠标中键可以将复制好的文本粘贴到光标所在的位置。你可以试一下。

别试图在终端窗口中使用Ctrl-C和Ctrl-V组合键执行复制和粘贴操作,这是没用的。这些组合键对Shell而言有不同的含义,它们在Windows发布之前就已经另有他用了。

你所使用的图形化桌面环境(大概率是KDE或GNOME),为了模仿Windows的行为,可能采用了“通过单击获得焦点”(click to focus)的策略。这意味着要想让一个窗口获得焦点(成为当前窗口),需要单击该窗口。这与X Window的传统行为正好相反,后者采用的是“焦点跟随鼠标”(focus follows mouse)的策略。也就是说,当鼠标指针经过窗口时,窗口随即获得焦点。该窗口能够接收输入,但只有单击它的时候才会进入前台。将焦点策略设置为“焦点跟随鼠标”会使“复制—粘贴”技术更加实用。如果可以的话(有些桌面环境,例如Ubuntu的Unity,已经不再支持这种焦点策略),不妨尝试一下,我想你会喜欢的。你可以在窗口管理器的配置程序中找到相关设置。

1.3 几个简单的命令

我们已经学会了在终端仿真器中输入字符,现在来尝试几个简单的命令。那就先从date命令开始吧,该命令可以显示当前的时间和日期:

[me@linuxbox ~]$ date
Fri Feb  2 15:09:41 EST 2018

另一个相关的命令是cal,默认显示当前月份的日历:

[me@linuxbox ~]$ cal
     February 2018
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28

幕后的虚拟控制台

即便没有运行终端仿真器,一些终端会话也会在图形化桌面环境的后台运行。在大多数Linux发行版中,按Ctrl-Alt-F1到Ctrl-Alt-F6组合键,就能够访问这些终端会话(又称虚拟控制台)。当访问某个虚拟控制台时,它会显示登录提示符,我们可以在其中输入用户名和密码。要想切换虚拟控制台,依次按Alt-F1到Alt-F6组合键即可。在大多数系统中,按Alt-F7组合键就可以返回图形化桌面环境。

要想查看磁盘的当前可用空间,输入df命令:

[me@linuxbox ~]$ df
Filesystem   1K-blocks      Used  Available  Use%  Mounted on
/dev/sda2     15115452   5012392    9949716   34%  /
/dev/sda5     59631908  26545424   30008432   47%  /home
/dev/sda1       147764     17370     122765   13%  /boot
tmpfs           256856         0     256856    0%  /dev/shm

与此类似,如果想查看可用内存容量,输入free命令:

[me@linuxbox ~]$ free
         total        used      free  shared    buffers cached
Mem:    513712      503976      9736       0       5312 122916
-/+ buffers/cache:  375748    137964
Swap:  1052248      104712    947536

1.4 结束终端会话

结束终端会话的方法不止一种,关闭终端仿真器窗口、在Shell提示符下输入exit命令,或是按Ctrl-D组合键均可:

[me@linuxbox ~]$ exit

1.5 总结

本章介绍了Shell、命令行以及如何启动和结束终端会话,这标志着Linux命令行之旅正式启程。我们还学习了如何输入一些简单的命令并进行简单的命令行编辑。这也没那么可怕,不是吗?

在第2章中,我们将会学习更多的命令,“畅游”Linux文件系统。