Linux硬链接和软链接

标签:

   inode

   软链接

   硬链接

一、ionde及inode编号

  在计算机中,信息一般以扇区(sectors)的形式存储在硬盘上,而每个扇区包括512个字节的数据和一些其他信息(即一个扇区包括两个主要部分:存储数据地点的标识符和存储数据的数据段)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(blocks)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sectors组成一个 blocks

  如此以来对于操作系统而言,必须采用一种方式来找到这个存储文件数据的“块”,为此操作系统便引入了一个非常重要的概念”inode”,中文名为“索引结点” 。既然引进inode的目的是为了找到“块”,那么inode中必然包括像文件数据block位置这么重要的信息,当然也不仅仅包括这么一个信息等。

  inode包含文件的元信息,具体有以下内容:

  * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctimeinode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置

   Linux 在读取数据的时候,是先查询 inode table 以得到数据是放在那个 Block 里面,然后再去该 Block 里面读取真正的数据内容。这个inode编号在一定范围内(在同一个分区内)是唯一的,类似于我们的身份证。所以对于Linux来说,ionde编号是唯一辨识一个文件的表示符号。

二、硬链接

  由于inode编号作为Linux内唯一辨识一个文件的表示符号,Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"hard link)。

  硬链接的特性:  

          1)只能对已存在的文件进行创建,创建硬链接会在inode里不添加计数。

          2)指向inode相同,与源文件的data block也相同。

          3)不能对目录创建硬链接。

          4)不能跨文件系统进行硬链接的创建。

          5)创建硬链接会在硬链接父目录添加映射条目:hard link映射源文件inode。

          6)删除一个硬链接文件,会在父目录清除该条映射,inode计数减一,所以不影响其他有相同 inode 号的文件。

 示例:

   1)只能对已存在的文件创建硬链接,源文件不存在则无法创建硬链接,创建硬链接会对ionde里不添加计数

[root@localhoast testdir]# ls
21.sh  dir1  www
[root@localhoast testdir]# ln aaa bbb
ln: accessing `aaa': No such file or directory
[root@localhoast testdir]#

   QQ图片20161020144025.png

   2)不能对目录创建硬链接

[root@localhoast /]# ls -ld testdir/
drwxr-xr-x. 3 root root 4096 Oct 19 19:47 testdir/
[root@localhoast /]# ln testdir aaa
ln: `testdir': hard link not allowed for directory

   3)不支持跨文件系统建立硬链接

[root@localhoast ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_localhoast-lv_root
                      51475068 2002336  46851292   5% /
tmpfs                   502068       0    502068   0% /dev/shm
/dev/sda1               487652   34526    427526   8% /boot
/dev/mapper/vg_localhoast-lv_home
                      69608928   53032  66013268   1% /home
[root@localhoast ~]# touch /home/source
[root@localhoast ~]# ln /home/source /boot/aaa
ln:

   4)创建硬链接会在硬链接父目录添加映射条目:hard link映射源文件inode

QQ图片20161020145057.png

   5)删除一个硬链接文件,会在父目录清除该条映射,连接数计数减一,ionde数目无变化所以不影响其他有相同 inode 号的文件。

    QQ图片1.pngQQ图片2.png

QQ图片3.png

三、软链接

  文件A和文件Binode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B"软链接"soft link)或者"符号链接(symbolic link)。

  这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件Binode号码,文件Binode"链接数"不会因此发生变化。

  通俗的来讲,软链接就是相当于window操作系统里面的快捷方式。当源文件被删除之后,快捷方式(软连接)也就没有作用了。

  软链接的特性:

         1)可以指向一个目录。 

         2)可以跨文件系统(分区)。

         3)是一个指向源文件名称的指针,是一个独立的文件。

         4)指向的是另一个文件的路径;其大小为指向的路径字符串的长度;增加或减少目标文件inode 的引用计数。

  特性示例:

     

      1)可以指向一个目录

[root@localhoast testdir]# ls
21.sh  dir1  www
[root@localhoast testdir]# ls -ld dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
[root@localhoast testdir]# ln -s dir1  aaa
[root@localhoast testdir]# ll
total 8
-rw-r--r--. 1 root root    0 Oct 19 03:09 21.sh
lrwxrwxrwx. 1 root root    4 Oct 19 20:42 aaa -> dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
-rw-r--r--. 1 root root  192 Oct 19 05:43 www

      2)可以跨文件系统(分区)

[root@localhoast ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_localhoast-lv_root
                      51475068 2002328  46851300   5% /
tmpfs                   502068       0    502068   0% /dev/shm
/dev/sda1               487652   34527    427525   8% /boot
/dev/mapper/vg_localhoast-lv_home
                      69608928   53032  66013268   1% /home
[root@localhoast ~]# cd /home/
[root@localhoast home]# ls
han  lost+found  source
[root@localhoast home]# ln -s han  /boot/abc
[root@localhoast home]# ll /boot/abc 
lrwxrwxrwx. 1 root root 3 Oct 19 20:44 /boot/abc -> han
[root@localhoast home]#

      3)是一个指向源文件名称的指针,是一个独立的文件

 QQ图片4.png

      4)指向的是另一个文件的路径;其大小为指向的路径字符串的长度;

QQ图片20161020153328.png

  会增加和减少inode的计数

 QQ图片20161020154758.png

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

(0)
hanlln1hanlln1
上一篇 2016-10-20
下一篇 2016-10-20

相关推荐

  • 第九周shell脚本编程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; 2、写一个脚本 (1) 获取当前主机的主机名,保存于hostname变量中; (2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改www.magedu.com; (3…

    2017-11-23
  • N25-第七周博客作业

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; 查看当前分区情况 [root@han ~]# fdisk -l Disk /dev/sda: 42…

    Linux干货 2017-02-23
  • Linux磁盘和文件系统管理进阶(swap、磁盘配额、RAID、LVM、btrfs)

    概述:     上篇已经介绍了一些磁盘和文件系统管理的基础概念,对磁盘的硬件构造,文件系统的基础概念部分有了一个大致的了解。本篇就分享一些关于磁盘和文件系统管理的一些高级应用,具体包含:     1、swap交换分区的管理     2、挂载…

    Linux干货 2016-08-30
  • yum与rpm包

    yum与rpm包 包命名和工具 包:分类和拆包 Application-VERSION-ARCH.rpm:主包 Application-devel-VERSION-ARCH.rpm 开发子包 Application-utils-VERSION-ARHC.rpm 其它子包 Application-libs-VERSION-ARHC.rpm 其它子包 包之间:可…

    Linux干货 2017-05-08
  • 文件系统管理_设定文件系统的配额

    认识配置配额系统 :为控制用户使用的空间的大小,在linux可以实现对分区的大小控制,控制用户在这个分区内使用空间的大小同时还可以对用户的文件个数实现控制。 在linux系统中其遵循文件分区来实现控制 磁盘的配额只针对单个分区来实现控制,不能对单块磁盘(硬盘)来实现控制的 【搭建试验环境 1】 怎样把某一个文件夹(/home)单独放到(迁移)一个独立的分区中…

    Linux干货 2017-04-24
  • 2016/08/11:初涉shell脚本编程

    感悟 :    经过对文本处理工具grep,sed等内容的,以及vim文本编辑器的学习,马不停蹄的又进行了对shell脚本的学习。对shell脚本的认识是可以保存在本地,用的时候只要执行相关脚本,简短的命令就可以完成操作,可以用来应对日常重复性工作,有效提高系统管理员的效率,避免在重复性工作上花费不必要的时间。 *************…

    Linux干货 2016-08-16