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

相关推荐

  • N21天天第十六周课程练习

    1、源码编译安装LNMP架构环境; 一、安装Nginx 1、解决依赖 [root@localhost ~]# yum groupinstall 开发工具 服务器平台开发 -y 2、安装 [root@localhost ~]# tar xf pcre-8.37.…

    Linux干货 2016-12-14
  • 通过FTP服务怒刷基础功法熟练度(匿名篇)

        Linux门派多种多样,那么本次就讲讲本人刷基本命令熟练度的方法。FTP原理什么的都不说了,网上有很多。直接上酸菜~学徒水平,大师勿笑。     本篇搭载的是FTP匿名用户访问,同时可以在服务器上进行创建删除等操作。危险系数有点点大,仅推荐用来刷命令熟练度使用。我用的Li…

    2017-07-25
  • VIM入门及进阶

    什么是VIM?     VIM类似于Vi编辑器, 它是一个功能强大、可高度定制的文本编辑器, 是一个纯粹的自由软件。注意:vi和vim不完全相同 为什么要使用VIM?     相信大多数人接触Linux时使用的第一个文本编辑器都不是VIM,很多人看到VIM复杂的命令操作就望而祛步…

    系统运维 2016-03-04
  • 系统启动流程

    linux系统启动流程 内核的设计结构单内核:linux(线程–lwp轻量级进程)微内核:windows(支持真正意义上的多线程) 单内核:很多功能驱动都集成在一起 微内核:内核很小,功能单一。模块化 linux为了适应众多用户的不同硬件需求,linux内核在设计上采用模块化设计。可以动态加载模块。核心模块:ko 内核所独有的。共享对象:so 红…

    Linux干货 2016-09-19
  • 正则表达式和变量写脚本

    #!/bin/bash 检查系统所有用户的shell是否为bash? 注释:用grep查找是否有此类用户,如果有则为真,则$?必然为0;显示的passwd结果对我们没意义,所以重定向到空。  grep “\bbash\b$” /etc/passwd &> /dev/null  A=`echo $?` …

    Linux干货 2017-04-16
  • rsyslog将日志记录于MySQL中

    数据库服务器:CentOS7 192.168.119.159   日志:CentOS6 192.168.119.129     准备mysql数据库 和 用户账户 [root@localhost ~]# yum install mariadb-server   [root@localhost ~]# systemctl…

    2018-02-05