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

相关推荐

  • linux 简单命令

    前面介绍一些基本基础篇 后面主要介绍screen命令的用法。

    2017-11-19
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-22
  • Linux的终端类型

    一、了解终端   在早期的年代,主机不是很多,都是一系列的大型主机,简单来说就是用户很多,但主机很少,不可能做到人手一台,但可以在主机上连接一个分屏器,在分屏器上可以连接鼠标键盘以及显示器,这些东西是没有计算能力的,仅仅担任输入和输出的工作,运算和处理都是由主机来完成的。   简单来说终端是用户与主机交互,是必然用到的…

    Linux干货 2016-10-14
  • 第七周作业:bash脚本,逻辑卷管理,磁盘管理,raid管理

    第七周作业 1、创建一个10G分区,并格式为ext4文件系统; ~]#fdisk -l   #查看已有分区    设备 Boot      Start     &nbsp…

    Linux干货 2016-12-12
  • 推荐-常用RAID级别详解

    一、RAID是什么       RAID(Redundant Arrays of Indent Disks)的名称是独立磁盘冗余阵列,是一种通过将多块硬盘按照某种特定的结构组织起来当做一块硬盘来使用的技术,多块硬盘不同的组织结构我们称之为RAID的级别。而RAID技术的特性主要表现在两个方面: (1)提高硬盘…

    Linux干货 2016-03-27
  • wordpress和discuz的负载均衡(lvs-dr)

    wordpress和discuz的负载均衡 实验目的:利用lvs-dr模型实现wordpress和discuz的负载均衡 实验要求:客户端访问wordpress或discuz服务器时,无论被调度至哪台RS上,其会话和访问的页面都应保持一致; 实验环境:一台server用作VS,两台server用作RS,一台server用于部署mysql、NFS、wordpr…

    2017-05-13