Linux基础知识之软硬链接

系统环境:

   该博文以CentOS6.8_x86_64系统为基础,Xshell5远程登录CentOS6.8系统,以root身份登录系统。

为什么要学习符号(软)链接和硬链接?

   符号(软)链接和硬链接是Linux文件系统中的一个重要的概念,软硬链接的学习过程中会涉及一些文件系统中的索引节点(inode),索引节点是虚拟文件系统上的非常重要的知识,我们通过分析和学习软链接和硬链接的区别,可以更好利用软硬链接的知识去分析文件系统,更好的去理解Linux系统的原理,使用软硬链接会更加缩小系统,还有就是可以更加方便的去移值Linux系统(绝对路径和相对路径的使用会更加方便的进行系统的移值)。

   硬链接(Hard Link)的分析:

    课件的解析:blob.png

    硬链接的详细解析:

    硬链接是通过索引节点来进行连接文件的。在Linux系统之中,保存在磁盘分区中的文件都有一个单一的inode号(因为Linux一切皆文件,不管什么类型的文件,都会对应一个Linux的节点号,※磁盘上的每一个分区都会有一套自己的inode编号,等分析inode的博客会详细的讲解这些知识)。在Linux之中,多个文件名或单个文件名会通过单一的索引节点指向每一个单一的文件。硬链接的作用是允许一个文件拥有多个有效路径名,这样每一个用户都会将一些重要文件通过硬链接生成多个文件名,可以防止用户删除某一个文件名,而导致删除整个文件的链接关系被删除,导致文件被删除,建立链接的关系之后,删除单一的硬链接,文件系统的对应关系都不会被删除,只有当文件的最后一个硬链接被删除之后,文件才会被删除,这样简单的备份即不用另外使用太多另外的磁盘空间,而做到防止“误删”的功能。真正的文件删除的条件是与之相关的所有的硬件接文件均被删除,文件才会被删除,文件的数据块和目录的连接才会被释放。

   硬链接的语法和命令的使用实例:

        ln filename [linkname ]

   实例分析:

      a.创建一个文件名为f1的文件;
      b.将how are you? 通过输入重定向写入f1文件中;

      c.给f1文件创建一个名为f2的硬链接;

      d.使用ls -i 查看f1文件和f2文件的inode号,显示为同一个inode号(11);

      e.删除文件f1;

      f.查看f2中的内容,发现和f1中的内容相同,说明f1和f2互为相互的硬连接。

  blob.png

   符号(软)链接(Symbolic Link)的分析:

      课件的解析:

blob.png

    语法:

       ln -s filename [linkname]

    符号链接的详细解析:

             a.linux下的软链接类似于windows下的快捷方式

             b.假设b文件是a文件的软链接,当我们打开b文件实际通过b文件的链接指向的是a文件,确切的说我们最后打开的b文件是通过a文件的inode打开的文件。与此不同的是,b文件是a文件的硬链接的话,其实都是通过相同的inode打开文件。

              c.当b目录为a目录的软链接的时候,进入b目录,但实际上进入的是a目录。

              d.软连接的两个文件的inode号是不相同的,硬链接的两个inode号是相同的。

              e.软链接文件a和b的权限是不相同的,硬链接的a和b文件的权限是相同的。   

              f.当创建软连接时,a文件和它的软连接b不再同一目录时,一定要说明软链接b对于文件a的相对路径(相对路径是相对于软链接文件的路径,而不是现对于当前目录的路径),或者直接指明绝对路径。(※在真正的系统中,软链接多数使用的是指定的相对路径,而不是绝对路径,使用相对路径便于文件和链接文件的移值性※)

              g.默认创建软连接的时候,认为创建的链接文件和目标文件是在同一目录。

    符号(软)链接实例:

      a.新建文件f1,创建f1的软链接f2.(f1 f2 文件的inode号不同,f2 指向f1 文件)

      blob.png

      b.在root目录下创建文件f1,对文件f1分别在/testdir/目录下,利用下面三种方法创建软链接f1、f2、f3。我们可以发现,f1是错误的,f2、f3都是正确的,f2使用的是绝对路径的创建软链接(在本地系统使用无障碍,但是移值系统之后,可能会造成软链接无法使用),f3是使用的相对路径创建的软链接。(※相对路径是相对于软链接文件的路径,而不是现对于当前目录的路径※,增强文件跟随系统的移值性。)

      blob.png

原创文章,作者:sjsir,如若转载,请注明出处:http://www.178linux.com/26682

(0)
sjsirsjsir
上一篇 2016-08-02 10:53
下一篇 2016-08-02 10:54

相关推荐

  • Flex Ant自动构建

    1.  Flex SDK Ant        Flex开发者会遇到很多,比如自动构建,在一个有着N多模块,N处源码,构建过程复杂的Flex项目开发中,依赖人力手工构建项目非常不现实(机械重复且枯燥无味的过程,相信哪位开发人员都会避之唯恐不及,而且对于人力是非常大的浪费),而通过使用Ant,我们可以将这些工作…

    Linux干货 2016-03-22
  • MySQL入门书籍和方法分享

    原文:http://cenalulu.github.io/mysql/mysql-book-for-newbie/           作者: 卢钧轶     本文罗列了一些适用于MySQL及运维入门和进阶使用的书籍。 背景:各大论坛上总是…

    Linux干货 2015-04-09
  • 马哥linux2014|2015全套教程

    1、本课程全程将基于集成了Openstack云环境、支持高精度时间(PTP)及虚拟化性能大大提升的RHEL 6.5或CentOS 6.6,间或介绍CentOS 7系统的使用; 2、此文章给出的只是个课程知识点框架,实际讲解过程相当精细;另外,知识点讲授的次序未必同此文章所标示的顺序相同; 3、第15期面授班定于2015年3月24号开课;本期将会是马哥教育数年…

    Linux干货 2015-07-14
  • Linux系统用户与组管理命令及配置文件总结

    一、Linux系统用户及组分类 1、用户类别 Linux系统中的用户大致可分为三类:root用户、系统用户、普通用户。每一个用户都拥有一个唯一的身份标识UID。 2、组分类 与用户信息对应的,Linux系统中的组也可分为三类:root组、系统组、普通组。每一个组也有一个对应的唯一标识GID。 需要说明的是,UID和GID为0的用户对应的就是固定的root,即…

    Linux干货 2016-10-23
  • diy自己的linux

    准备一台liunx的机器,我用的是liunx虚拟机 单独加载一块硬盘,我加载了一块20G的硬盘,然后用fdisk /dev/sdb进行分区,sdb1用来作为将来系统的/boot分区,所有100M就可以了,sdb2用来作为将来系统的/分区,我给了10G。然后将两个分区格式化为ext4系统。 mkdir /mnt/boot mkdir /mnt/sdc2 mou…

    Linux干货 2016-09-14
  • Shell编程if语句

    Shell编程if语句 条件选择if语句(#if输入keywork) 选择执行: 注意:if语句可嵌套 单分支 if 判断条件(#如果为真执行下一条);then 条件为真的分支代码 fi(结尾) 双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi if 语句 多分支 if 判断条件1; then 条件为真的分支代码 e…

    2018-01-01