• 硬链接与软链接


      Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接,即符号链接(Symbolic Link)。

      在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,这个编号被称之为索引节点号(Inode Index),也就是常说的inode号。Inode号上与文件名关联,下与用户数据库(data block)关联。

      硬链接指文件名与索引节点号(即inode号)的链接(所以创建一个新的文件,该文件使用stat命令查看时,links显示的是1),索引节点号(inode号)可以对应一个或多个文件名,并且这些文件名可以在同一或不同目录。

      由于硬链接是直接将文件名与索引节点号(即inode号)链接,因此硬链接存在以下几个特点: 1、文件有相同的inode号及data block,这使得修改其中一个硬链接文件属性或文件数据时,其他硬链接文件都会发生相应修改;2、只能对已存在的文件进行创建;3、不能跨文件系统(即分区)进行创建;4、不能对目录文件进行创建;5、删除其中一个硬链接文件时,不会对其他硬链接文件产生影响。

     

      软链接类似于Windows的快捷方式。它实际上是一个特殊的文件,有着自己的索引节点号(即inode号)以及用户数据块(data block),但用户数据块(data block)中包含的是另一个文件的位置信息。

      由于软链接有着自己的索引节点号(即inode号)以及用户数据块(data block),因此没有硬链接的诸多限制,它的特性如下:1、软链接有自己的文件属性、inode号和data block,但是编辑文件其实就是编辑源文件;2、可以对不存在的文件或目录进行创建;3、可以跨文件系统(即分区)进行创建,使用ln命令跨文件系统创建时,源文件必须是绝对路径,否则为死链接;4、可以对文件或目录文件进行创建;5、删除软链接并不影响源文件,但源文件被删除,则相关软链接文件变为死链接(dangling link),若源文件(原地址原文件名)重新被创建,则死链接恢复为正常软链接。

      实例:如果源文件没有给others读写权限,软链接显示的是有权限,但实际不能读写。

     

      硬链接与软链接特性比较

    //第一个特性,硬链接与源文件具有相同inode号和data block,修改文件属性或文件数据会应影响所有硬链接(包括源文件);
    //软链接虽然有自己的inode号和data block,但修改的其实还是源文件
    [xf@xuexi ~]$ stat File |grep Inode  //也可使用ls -i File查看
    Device: 803h/2051d	Inode: 52016343    Links: 2
    [xf@xuexi ~]$ stat link1 |grep Inode
    Device: 803h/2051d	Inode: 52016343    Links: 2
    [xf@xuexi ~]$ stat link2 |grep Inode
    Device: 803h/2051d	Inode: 52016746    Links: 1
    [xf@xuexi ~]$ echo aaaa >> link1  //硬链接修改文件数据
    [xf@xuexi ~]$ cat File 
    aaaa
    [xf@xuexi ~]$ echo aaaa >> link2  //软链接修改文件数据 
    [xf@xuexi ~]$ cat File 
    aaaa
    aaaa
    [xf@xuexi ~]$ ll File link2
    -rw-rw-r--. 2 xf xf 0 3月 11 14:27 File
    lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File
    [xf@xuexi ~]$ chmod +x link2  //软链接修改文件属性
    [xf@xuexi ~]$ ll File link2
    -rwxrwxr-x. 2 xf xf 0 3月 11 14:27 File
    lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File
    [xf@xuexi ~]$ stat File 
    文件:"File"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d	Inode:52016343 硬链接:2
    权限:(0775/-rwxrwxr-x) Uid:( 1000/ xf) Gid:( 1000/ xf)
    环境:unconfined_u:object_r:user_home_t:s0
    最近访问:2019-03-11 14:27:29.750638827 +0800
    最近更改:2019-03-11 14:27:29.750638827 +0800
    最近改动:2019-03-11 14:38:22.936661898 +0800
    创建时间:-
    [xf@xuexi ~]$ stat link2
    文件:"link2" -> "File"
    大小:4 块:0 IO 块:4096 符号链接
    设备:803h/2051d	Inode:52016746 硬链接:1
    权限:(0777/lrwxrwxrwx) Uid:( 1000/ xf) Gid:( 1000/ xf)
    环境:unconfined_u:object_r:user_home_t:s0
    最近访问:2019-03-11 14:28:37.354054265 +0800
    最近更改:2019-03-11 14:28:37.353054303 +0800
    最近改动:2019-03-11 14:28:37.353054303 +0800
    创建时间:-
    //第二个特性,硬链接不能对不存在的文件进行创建,但软链接可以(包括目录文件)
    [xf@xuexi ~]$ ls
    File  link1  link2  公共  模板  视频  图片  文档  下载  音乐  桌面
    [xf@xuexi ~]$ ln File1 link3
    ln: failed to access "File1": 没有那个文件或目录
    [xf@xuexi ~]$ ln -s File1 link4
    [xf@xuexi ~]$ ls -l link4
    lrwxrwxrwx. 1 xf xf 5 3月  11 11:50 link4 -> File1  //这是一个死链接
    //第三个特性,硬链接不可以跨文件系统(即分区)创建,软链接可以
    [xf@xuexi ~]$ su -
    密码:
    上一次登录:一 3月 11 13:16:55 CST 2019pts/0 上
    [root@xuexi ~]# file -s /dev/sdb1  //查看分区文件系统类型
    /dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
    [root@xuexi ~]# mount /dev/sdb1 /sdb1  //挂载分区
    [root@xuexi ~]# ln /home/xf/File /sdb1/link5  //硬链接无法跨文件系统创建
    ln: 无法创建硬链接"/sdb1/link5" => "/home/xf/File": 无效的跨设备连接
    [root@xuexi ~]# ln -s /home/xf/File /sdb1/link6  //软链接可以,但源文件必须是绝对路径,否则为死链接
    [root@xuexi ~]# ls -l /sdb1/link6 
    lrwxrwxrwx. 1 root root 13 3月  11 13:19 /sdb1/link6 -> /home/xf/File
    //第四个特性,硬链接不能对目录创建链接,但软链接可以
    [root@xuexi ~]# exit
    登出
    [xf@xuexi ~]$ ls
    File  link1  link2  link4  公共  模板  视频  图片  文档  下载  音乐  桌面
    [xf@xuexi ~]$ mkdir newDir
    [xf@xuexi ~]$ ln newDir link7
    ln: "newDir": 不允许将硬链接指向目录
    [xf@xuexi ~]$ ln -s newDir link8
    [xf@xuexi ~]$ ll link8
    lrwxrwxrwx. 1 xf xf 6 3月  11 13:26 link8 -> newDir
    [xf@xuexi ~]$ cd link8  //link8可以执行cd命令
    [xf@xuexi link8]$
    //第五个特性,删除源文件,硬链接没有影响;软链接变成死链接,但在相同位置重新创建同名文件,软链接变成指向新文件的链接
    [xf@xuexi link8]$ cd ..
    [xf@xuexi ~]$ cat File 
    aaaa
    aaaa
    [xf@xuexi ~]$ rm File  //删除源文件
    [xf@xuexi ~]$ cat link1  //硬链接没有影响
    aaaa
    aaaa
    [xf@xuexi ~]$ cat link2  //软链接变为死链接
    cat: link2: 没有那个文件或目录
    [xf@xuexi ~]$ touch File  //相同位置创建同名文件
    [xf@xuexi ~]$ echo bbbb >> File
    [xf@xuexi ~]$ cat link1  //硬链接没有影响
    aaaa
    aaaa
    [xf@xuexi ~]$ cat link2  //软链接指向新建立的同名文件
    bbbb

      这里还隐含了一个问题,虽然目录无法创建硬链接,但是目录的链接数却是2。其实这是由于目录文件本身以及其下的'.'文件。

    [xf@xuexi ~]$ mkdir newDir
    [xf@xuexi ~]$ stat newDir
      文件:"newDir"
      大小:6         	块:0          IO 块:4096   目录
    设备:803h/2051d	Inode:17263583    硬链接:2
    权限:(0775/drwxrwxr-x)  Uid:( 1000/      xf)   Gid:( 1000/      xf)
    环境:unconfined_u:object_r:user_home_t:s0
    最近访问:2019-03-11 15:08:17.061905895 +0800
    最近更改:2019-03-11 15:08:17.061905895 +0800
    最近改动:2019-03-11 15:08:17.061905895 +0800
    创建时间:-
    [xf@xuexi ~]$ ls -id newDir newDir/.
    17263583 newDir  17263583 newDir/.  //可以看到inode号是一样的
    

      

  • 相关阅读:
    docker 部署 zabbix
    docker 搭建私有云仓库
    doeker部署zabbix
    LVS
    zabbix安装与配置
    keepalive
    Shell编程(5)
    Shell编程(4)
    Shell编程(3)
    几种Toast用法
  • 原文地址:https://www.cnblogs.com/diantong/p/10507132.html
Copyright © 2020-2023  润新知