LGCB

在文件系统中跳转

系统准备好了之后,我们需要学习的第一件事就是怎样在文件系统树中跳转。这次课我们的主要内容有三小部分,首先用大概3分钟时间介绍一下文件系统树形结构,接下来是绝对路径和相对路径的概念,最后作为这些内容的实战,我们演示一下 cd 命令的使用。

理解文件系统树的结构

先来看看第一部分,Linux 系统下的文件系统是怎样的结构。

先聊聊 Windows 系统下的情况。在 Windows 系统中,我们会把硬盘分为多个分区( C盘,D盘…)每个盘的最顶级都是多个文件夹( folder ),每个文件夹下面有文件和子文件夹,子亦有孙,孙亦有子,形成一个树形结构。 每个分区会有自己的一个树。每一根儿树的最顶端是像 C: 或 D: 这样的盘符。

Linux 系统下的情况类似,硬盘也会被分为多个分区( partition ),但是名字不叫 C 盘 D 盘,而是叫 sda1,sda2… 文件的组织也是一个树形结构。区别是,Linux 下把文件夹( folder )叫做目录( directory ),而且整个系统不管有多少个分区,文件系统却只会有一棵树。树的顶端是一个目录(名字叫/)。

到这里我们就不理解了,分区有多个,但是文件系统树只有一个,那怎么对应呢?这就涉及到挂载点这个概念。 例如,如果我么把 sda1 挂载到名为/的这个目录上(目录其实就是文件系统树上的一个“点”,所以叫做挂载点)。那么由于系统上的所有文件和目录都包含于/这个目录之中,所以这样的话我们所有的数据都会存储到 sda1 这个分区上。

但是,如果我们在此基础之上,把sda2挂载到 /home/ 这个目录上,那以后所有 /home/ 下的数据就都存在 sda2 这个分区之上了。

分区情况,我们暂时不用关心。那我们这节中要玩转的对象就很简单了,就是 “Only One Tree”。

首先一个重要的概念是“根目录”,根目录指的是文件系统树的最顶端的名为/的这个目录,之所以把它叫根目录,是因为文件系统是一个倒挂的树,/是整个树的根( root ),所有其他的文件和目录都是由此衍生出的枝蔓。所以根目录也可叫做“老祖宗”目录。

另一个重要概念是“当前工作目录”( Current Working Directory )。当前工作目录不是文件系统上的某个固定位置,而是当前用户所处的那个目录。 文件系统是一棵倒置的大树,我们能够站立在树中间某个点上,也就是位于一个目录中。这样我们用 ls 命令能够看到这个目录所包含的文件 还有子目录。那么,我们所处的这个目录就叫做“当前工作目录”。 可以使用pwd( Print Working Directory,打印工作目录)命令,来显示当前工作目录名。

$ pwd
/home/peter/

也可以用ls这个命令来列出当前工作目录中的内容。

$ ls
a.txt files

绝对路径和相对路径

绝对路径名从根目录开始,其后跟随着一个个枝干(子目录)直到我们所期望的目录或文件。例如,系统中一个目录 的绝对路径名是 /usr/bin 。这意思是从根目录开始(由路径名中开头的/表示), 有一个叫做 usr 的目录,这个目录下包含一个叫做 bin 的子目录。

一个绝对路径名从根目录开始到达目的地,而相对路径则是从工作目录开始。文件系统使用几个 特殊的符号来表示在文件系统树中的相对位置。这些特殊符号是...。 这个.符号是指当前工作目录,而..符号是指当前工作目录的父目录。

当然 ./peter 可以省略那个点,而写成 peter,我们基本上可以这样说,绝对路径是以 / 开头的路径,例如 /home/peter,而相对路径是以点开头的(可能是一个点,也可能是两个点,当然一个点得时候,可以省略),例如 ./peter 或者 ../billie

更改当前工作目录( cd: Change Dir )

更改你的工作目录(目录树中,我们所站之处),需要使用 cd 命令。为了实现目标, 输入 cd 命令,其后跟所期望到的工作目录。路径名就是我们沿着目录树枝干到达 我们所要目录所经过的路线。路径名可以用两种方式来指定,一个是绝对路径名, 另一个是相对路径名。

比如我们当前位置是 /home/peter/ 如果我们想要把当前工作路径改为 /home/peter/docs 就可以有下面两种方式。

指定绝对路径

$ cd /home/peter/docs
$ pwd
/home/peter/docs

指定相对路径:

$ cd ./docs/
$ pwd
/home/peter/docs

通常./是可以省略的,也就是可以

$ cd docs/
$ pwd
/home/peter/docs

原因就是如果我们在目录名(这里是 docs )之前不写路径的话(也就是不加 ./ ),那系统默认取当前工作目录。

如果我们 cd 到系统根目录

$ cd /
$ ls

这是我们会看到很多系统默认就会有的目录,到底这些目录都是干嘛的呢? 可以参考 http://billie66.github.io/TLCL/book/zh/chap04.html 中的 “表 4-4: Linux 系统中的目录”这部分。

下面有个小技巧分享给大家,就是 ”tab 补齐“功能。不管我用绝对路径还是相对路径,只要我们的路径前面部分没有敲错,那么后面的部分是可能通过敲 tab 键自动补齐的。比如我们想跳转到当前目录下的 media 目录中,就可以敲 cd me<tab> 就可以了。如果匹配项不唯一那么也可以敲两下 tab 直接显示出所有备选项。

好这一节我们就聊这么多,更多内容可以看看

http://billie66.github.io/TLCL/book/zh/chap03.html