创建游戏场(实战演习)

用到的指令:

 

在创建游戏场之前,先要复习一个关于链接的知识:

 

ln 命令即可创建硬链接,也可以创建符号链接。可以用其中一种方法来使用它:
ln file link
创建硬链接,和:
ln -s item link
创建符号链接,“item” 可以是一个文件或是一个目录。

硬链接
硬链接和符号链接比起来,硬链接是最初 Unix 创建链接的方式,而符号链接更加现代。在
默认情况下,每个文件有一个硬链接,这个硬链接给文件起名字。当我们创建一个硬链接以后,
就为文件创建了一个额外的目录条目。硬链接有两个重要局限性:
1. 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身
不在同一个磁盘分区上的文件。
2. 一个硬链接不能关联一个目录。
一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录内
容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接被删除,但是文
件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配),直到所有关联这个文

件的链接都删除掉。知道硬链接很重要,因为你可能有时会遇到它们,但现在实际中更喜欢使
用符号链接,下一步我们会讨论符号链接。

符号链接
创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个特殊类型的文
件,这个文件包含一个关联文件或目录的文本指针。在这一方面,它们和 Windows 的快捷方
式差不多,当然,符号链接早于 Windows 的快捷方式很多年;-)
一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。例
如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而,当你删除一个
符号链接时,只有这个链接被删除,而不是文件自身。如果删除这个文件早于文件的符号链接,
这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为坏链接。在许多实
现中,ls 命令会以不同的颜色展示坏链接,比如说红色,来显示它们的存在。
关于链接的概念,看起来很迷惑,但不要胆怯。我们将要试着练习这些命令,希望,它变
得清晰起来。

创建游戏场(实战演习)
下面我们将要做些真正的文件操作,让我们先建立一个安全地带,来玩一下文件操作命令。
首先,我们需要一个工作目录。在我们的主目录下创建一个叫做 “playground” 的目录。

再在playground下创建dir1和dir2,一次性创建mkdir -p可以多层目录一起:

下一步,让我们得到一些数据到我们的游戏场中。通过复制一个文件来实现目的。使用 cp

命令,我们从/etc 目录复制 passwd 文件到当前工作目录下:

现在,仅仅是为了高兴,重复操作复制命令,使用 “-v” 选项(唠叨),看一个它的作用: 

cp 命令再一次执行了复制操作,但是这次显示了一条简洁的信息,指明它进行了什么操
作。注意,cp 没有警告,就重写了第一次复制的文件。这是一个案例,cp 假定你知道你的所
作所为。为了得到警示信息,在命令中包含 “-i” 选项。

响应命令提示信息,输入 “y”,文件就会被重写,其它的字符(例如,”n”)会导致 cp 命令
不理会文件。


现在,“passwd” 这个名字,看起来不怎么有趣,这是个游戏场,所以我们给它改个名字:

让我们来传送 fun 文件,通过移动重命名的文件到各个子目录,然后再把它移回到当前目录:

 

最后,再把 fun 文件带回到当前工作目录:

接下来,我们复制目录:

首先还是先把fun移动到dir1下。

然后移动 dir1 到 dir2 目录,用 ls 来确认执行结果;

注意:因为目录 dir2 已经存在,mv 命令移动 dir1 到 dir2 目录。如果 dir2 不存在,mv 会重新命名 dir1 为 dir2。

最后,再把所有的东西放回原处。

现在,我们试着创建链接。首先是硬链接。我们创建一些关联我们数据文件的链接:

 

 

注意到一件事,列表中,文件 fun 和 fun-hard 的第二个字段是 “4”,这个数字是文件 “fun”
的硬链接数目。你要记得一个文件至少有一个硬链接,因为文件名就是由链接创建的。所以,
我们怎样知道实际上 fun 和 fun-hard 是一样的文件呢?在这个例子里,ls 不是很有用。虽然我
们能够看到 fun 和 fun-hard 文件大小一样(第五字段),但我们的列表没有提供可靠的信息来
确定(这两个文件一样)。

当考虑到硬链接,想象文件是由两部分组成:数据部分包含文件的内容,名字部分包含文
件的名字,这样可以帮助理解。当我们创建了文件的硬链接,实际上,我们给文件添加了额外
的名字,这些名字都涉及一样的数据内容。系统分配了一系列的盘块给所谓的索引节点,它和
文件名字想关联。因此每个硬链接都关系到一个具体的索引节点,这个节点包含了文件的内
容。
ls 命令有一种方法,来展示(文件索引节点)的信息。在命令中加上 “-i” 选项:

在这个版本的列表中,第一字段表示文件索引节点号,正如我们所见到的,fun 和 fun-hard共享一样的索引节点号,这就证实这两个文件是一样的文件。

创建符号链接
建立符号链接的目的是为了克服硬链接的两个缺点:硬链接不能跨越物理设备,硬链接不
能关联目录,只能是文件。符号链接是文件的特殊类型,它包含一个指向目标文件或目录的文
本指针。
符号链接的建立过程相似于创建硬链接:

记住,当我们创建一个符号链接的时候,会建立一个目标文件在那里和符号链接有关联的文本描述。如果我们看看 ls 命令的输出结果,比较容易理解。

目录 dir1 中,fun-sym 的列表说明了它是一个符号链接,通过在第一字段中的首字符 “l”
可知,并且它还指向 “../fun”,也是正确的。相对于 fun-sym 的存储位置,fun 在它的上一个目
录。同时注意,符号链接文件的长度是 6,这是字符串 “../fun” 所包含的字符数,而不是符号
链接所指向的文件长度。
当建立符号链接时,你即可以使用绝对路径名:

 

 

也可用相对路径名,正如前面例题所展示的。使用相对路径名更令人满意,因为它允许一
个包含符号链接的目录重命名或移动,而不会破坏链接。
除了普通文件,符号链接也能关联目录:

正如我们之前讨论的,rm 命令被用来删除文件和目录。我们将要使用它来清理一下我们的
游戏场。首先,删除一个硬链接:

结果不出所料。文件 fun-hard 消失了,文件 fun 的链接数从 4 减到 3,正如目录列表第二字段所示。
下一步,我们会删除文件 fun:

在提示符下输入 “y”,删除文件。让我们看一下 ls 的输出结果。注意,fun-sym 发生了什么
事? 因为它是一个符号链接,指向已经不存在的文件,链接已经坏了:

大多数 Linux 的发行版本配置 ls 显示损坏的链接。在 ubuntu系统中,坏的链接以闪烁的
红色文本显示!损坏链接的出现,并不危险,但是相当混乱。如果我们试着使用损坏的链接,
会看到以下情况:

稍微清理一下现场。删除符号链接:

对于符号链接,有一点值得记住,执行的大多数文件操作是针对链接的对象,而不是链接
本身。而 rm 命令是个特例。当你删除链接的时候,删除链接本身,而不是链接的对象。(这句话上面意思呢?测试例程如下:)

{

  建立一个main.c,写入hello内容,创建符号链接main-sym,然后把main-sym的更改为hello world,最后查看main.c,main.c也被更改。但是rm指令是个特例哦,删除的就是链接符号,而不是链接对象。

 

}
最后,我们将删除我们的游戏场。为了完成这个工作,我们将返回到我们的主目录,然后
用 rm 命令加上选项 (-r),来删除目录 playground,和目录下的所有内容,包括子目录

 

总结
在这一章中,我们已经研究了许多基础知识。我们得花费一些时间来全面的理解。反复练
习 playground 例题,直到你觉得它有意义。能够良好的理解基本文件操作命令和通配符,非
常重要。空闲时,通过添加文件和目录来拓展 playground 练习,使用通配符来为各种各样的
操作命令指定文件。关于链接的概念,在刚开始接触时会觉得有点迷惑,花些时间来学习它们
是怎样工作的。它们能成为真正的救星。

posted @ 2017-06-27 11:18  Crystal_Guang  阅读(276)  评论(0编辑  收藏  举报