zoukankan      html  css  js  c++  java
  • 创建游戏场(实战演习)

    用到的指令:

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

    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 练习,使用通配符来为各种各样的
    操作命令指定文件。关于链接的概念,在刚开始接触时会觉得有点迷惑,花些时间来学习它们
    是怎样工作的。它们能成为真正的救星。

  • 相关阅读:
    Centos下安装Redis
    BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法
    BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举
    BZOJ 4584 [Apio2016]赛艇 ——动态规划
    BZOJ 2806 [Ctsc2012]Cheat ——后缀自动机 单调队列优化DP
    BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
    Topcoder SRMCards ——贪心
    CTSC 1999 家园 【网络流24题】星际转移
    BZOJ 3489 A simple rmq problem ——KD-Tree
    BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7084164.html
Copyright © 2011-2022 走看看