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 13:09
下一篇 2016-10-20 15:38

相关推荐

  • DHCP简单阐述及配置实现方法

    DHCP是什么…… DHCP是Dynamic Host Configuration Protocol的缩写,它是TCP/IP协议簇中的一种,主要是用来给网络客户机分配动态的IP地址。 其主要功能是: 用于内部网络或网络服务供应商自动分配IP地址给用户 用于内部网络管理员作为对所有电脑作中央管理的手段 直接点就是,这些被…

    Linux干货 2016-12-05
  • Samba & Vsftp

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2016-12-20
  • linux任务管理与计划

    linux系统作业控制的命令:     job(作业):一个作业通常包含多个命令(也有可能只包含一个),联合起来由单个小程序组合,完成复杂任务,对Linux而言作业有两种;前台作业和后台作业        前台作业(forgroud):通过终端启动,且启动后会…

    Linux干货 2016-09-13
  • centos 6系统启动流程分析

    linux 系统启动流程: 之前有描述过linux的启动流程,但还有许多模糊的地方,经过一段时间了学习,查资料,看脚本,比初次理解更深,可以将上次模糊或不足的地方描述得比较清楚一些。 先看一张启动流程图。   分析: linux系统的启动流程大概可以分为两大部分: 第一部分为内核空间的启动 第二部分为用户空间的启动 其中,内核空间的启动主要可为分四…

    2017-05-15
  • 磁盘文件挂载与卸载

    挂载(mount)何为挂载?挂载指将文件系统与根文件系统的某个现存的目录建立起来的关联关系,这样我们就可以将目录作为访问磁盘文件的入口,进行存取交互。挂载点:挂载点指的是被挂载的对象,通常挂载点是一个目录,不过有时候也有文件作为挂载点格式:mount 设备 挂载点 ;此挂载方法味临时挂载,只在当前的shell中有效,退出则清除挂载关联设备文件在/dev/sd…

    Linux干货 2017-04-24
  • Centos6系统救援模式

    CentOS 6系统救援模式 在学习了CentOS 5、6系统启动流程与启动故障排除之后,为了加深印象进行了如下破坏性尝试。 删除/boot目录与/etc/fstab文件后尝试修复系统 1. 首先是第一步删除/boot目录与/etc/fstab 删除/boot /etc/fstab 可以看到虽然boot目录无法删除但是目录中的文件已经全部删掉了。 2. 重新…

    Linux干货 2016-11-24