zoukankan      html  css  js  c++  java
  • Linux 软硬链接的区别及目录权限对软硬链接的影响

    目录权限的影响

     首先,构建实验环境如下图:

      

      有 A、B 两个目录,A 目录下建有 test 文件,且文件中的内容为 "Hello"。B 目录下分别创建 test 文件的硬链接 testHard 和 软链接 testSoft。

      分别 cat 这两个链接文件,都可以正常的输出内容:

      

      现在将 A 目录的权限更改为 000,命令为 chmod 000 A。

      再分别 cat 链接文件,输出的结果为:

      

      可见,软链接失去了访问的权限,而硬链接却正常。

    借用一张图片:

      

      可知,应该是路径限制了软链接的访问,而硬连接则不受路径权限的影响。

    二者的区别

    1.原理上

    硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。

    软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

    2.使用限制上

    硬链接

    a.不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数);

    b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下;

    c:不能对不存在的文件创建硬链接,由原理即可知原因;

    软链接

    a.可以对目录创建软链接,遍历操作会忽略目录的软链接;

    b:可以跨文件系统;

    c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了;

    3.命令

    硬链接:ln 源文件 链接名

    软链接:ln -s 源文件 链接名

    参考链接:www.cnblogs.com/ylan2009/p/4287929.html

  • 相关阅读:
    搭建本地源
    shell中tar加密打包
    mysql出现ERROR 1819 (HY000)的解决方法
    mysql 创建用户及授权(2)
    mysql 创建用户及授权(1)
    Redis 工具 redis-port 使用
    mysql中 drop、truncate和delete的区别
    dlerror和dlclose用法
    dlsym用法
    dlopen用法
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/10774598.html
Copyright © 2011-2022 走看看