第2章 导航

我们要学习的第一件事(除如何输入之外)就是在Linux文件系统中导航。在本章中,我们将介绍下列命令。

  • pwd:输出当前的工作目录名称。
  • ls:列出目录内容。
  • cd:修改目录。

2.1 理解文件系统树

和Windows一样,类UNIX系统(如Linux)也是按照有层次的目录结构来组织文件的。这意味着文件是在树状的目录(在其他系统中有时称为文件夹)中组织的,目录中还可以有文件和其他目录。文件系统的第一个目录称为根目录,其中包含了文件和子目录,而子目录中还可以包含更多的文件和子目录,依此类推。

需要注意的是,在Windows系统中,每个存储设备都有各自独立的文件系统树。而在类UNIX系统中(如Linux),不管计算机安装了多少存储设备,都只有一个文件系统树。按照负责维护系统的超级用户的设置,存储设备将会连接(更准确地说是“挂载”)到文件系统树的不同位置。

2.2 当前工作目录

大多数人对图形化文件管理器并不陌生,它能够形象地呈现文件系统树,如图2-1所示。

55143-00-027-1

图2-1 图形化文件管理器呈现的文件系统树

注意,这棵树通常是倒置显示的。也就是说,“根部”在上,“枝叶”在下。

但是,命令行可不是图形化的,要想在文件系统树中导航,我们需要改变思维方式。

把文件系统想象成一座迷宫,形如一棵倒置的树,我们就位于其中。在任何时刻,我们都处在某个目录中,能够看到该目录中包含的文件、上级目录(父目录)以及下级目录(子目录)。我们所处的目录称为当前工作目录。可以使用pwd(print working directory,输出工作目录)命令将其显示出来:

[me@linuxbox ~]$ pwd
/home/me

当首次登录系统(或是启动终端仿真器)时,当前工作目录就是用户的主目录。每个用户都有自己的主目录,这是普通用户唯一有权限写入文件的地方。

2.3 列出目录内容

ls命令能够列出当前工作目录中的文件和子目录:

[me@linuxbox ~]$ ls
Desktop Documents Music Pictures Public Templates Videos

其实我们可以使用ls命令列出任意目录中的内容,并不局限于当前工作目录。除此之外,ls命令还拥有不少有趣的功能。等到第3章的时候再详述。

2.4 更改当前工作目录

cd命令可以更改当前工作目录(我们当前所在的位置)。只需要在cd命令之后输入要更改的工作目录的路径名即可。路径名是沿着文件系统树的分支到达目标目录的路线。路径名分为两种:绝对路径名和相对路径名。首先来谈谈绝对路径名。

2.4.1 绝对路径名

绝对路径名从根目录开始,随后紧接着一个又一个分支,直到目标目录或文件。例如,系统里有一个目录,大多数系统程序安装在其中。该目录的路径名是/usr/bin。这就意味着根目录(在路径名中用/来表示)中有一个名为usr的目录,该目录包含一个bin目录:

[me@linuxbox ~]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin
[me@linuxbox bin]$ ls
...Listing of many, many files ...

可以看到,我们现在已经将当前工作目录更改到了/usr/bin,其中包含了大量文件。有没有注意到Shell提示符的变化?为了方便,提示符通常都被设置为自动显示当前工作目录名。

2.4.2 相对路径名

绝对路径名从根目录开始,一直通往目标,而相对路径名则是从当前工作目录开始的。为此,用到了两种特殊表示法来描述目标在文件系统树中的相对位置:。(点号)和。。(双点号)。

.代表当前工作目录,。。代表当前工作目录的父目录。下面是两者的用法。让我们再次将当前工作目录更改到/usr/bin:

[me@linuxbox ~]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin

假设我们现在想将当前工作目录更改到/usr/bin的父目录,也就是/usr。有两种方式可以实现,一种是使用绝对路径名:

[me@linuxbox bin]$ cd /usr
[me@linuxbox usr]$ pwd
/usr

另一种是使用相对路径名:

[me@linuxbox bin]$ cd ..
[me@linuxbox usr]$ pwd
/usr

这两种方式殊途同归。我们该使用哪种?当然是字数少的那种!

同样,我们还可以用两种方式将当前工作目录从/usr更改回/usr/bin,一种是使用绝对路径名:

[me@linuxbox usr]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin

另一种是使用相对路径名:

[me@linuxbox usr]$ cd ./bin
[me@linuxbox bin]$ pwd
/usr/bin

有件重要的事要在这里指出,在大多数情况下,我们可以忽略./,因为这部分是隐含的。如下面的写法:

[me@linuxbox usr]$ cd bin

一般而言,如果没有指定路径名,则默认为当前工作目录。

有关文件名的一些重要说明

Linux系统中的文件命名方式类似于Windows等其他操作系统,但仍存在一些重要差异。

  • 以点号开头的文件名是隐藏的。这说明ls命令不会列出这些文件,除非使用ls-a。在创建账户时,主目录里会放置一些用于配置账户的隐藏文件。我们将会在第11章仔细观察这些文件,了解如何自定义环境。除此之外,有些应用程序也会把自己的配置文件以隐藏文件的形式放在主目录之中。
  • 与UNIX一样,Linux中的文件名与命令也是区分大小写的。文件名File1和file1指向不同的文件。
  • 虽然Linux支持长文件名,其中可以包含嵌入的空格和标点符号,但是标点符号仅限于点号、半字线以及下画线。最重要的是,别在其中使用空格[1]。如果你想分隔文件名中的单词,可以使用下画线。以后你会庆幸这种做法的。
  • 不像其他操作系统,Linux并没有“文件扩展名”的概念。你想怎么命名文件都行。文件内容或用途是由其他方式来决定的。尽管类UNIX系统不使用文件扩展名来决定文件内容或用途,但很多应用程序却是这么做的。

2.4.3 一些有用的便捷写法

表2-1列出了一些可以快速改变当前工作目录的方法,即cd命令的便捷写法。

表2-1 cd命令的便捷写法

55143-00-030-1

2.5 总结

本章讲解了Shell处理系统目录结构的方式,我们学习了绝对路径名、相对路径名以及用于在目录结构中导航的基本命令。在第3章中,我们将利用这些知识继续现代Linux系统之旅。


[1]不是说文件名中不能使用空格,而是说如果出现空格的话,可能会产生一些不必要的麻烦。