什么是链接?

链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

它是用来干什么的?

你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS X 中的替身),Linux 中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更易访问的目录中。在这些用途上,我们通常会使用到软链接(也称符号链接)。

软链接和硬链接的区别是?

下面我们进入正题,来探讨一下软硬两种链接到底有什么区别?

首先,从使用的角度讲,两者没有任何区别,都与正常的文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行。

那区别在哪呢?在底层的原理上。

为了解释清楚,我们首先在自己的一个工作目录下创建一个文件,然后对这个文件进行链接的创建:

$ touch myfile && echo "This is a plain text file." > myfile
$ cat myfile

This is a plain text file.
现在我们创建了一个普通地不能再普通的文件了。然后我们对它创建一个硬链接,并查看一下当前目录:
$ ln myfile hard
$ ls -li

25869085 -rw-r--r--  2 unixzii  staff  27  7  8 17:39 hard
25869085 -rw-r--r--  2 unixzii  staff  27  7  8 17:39 myfile
在 ls 结果的最左边一列,是文件的 inode 值,你可以简单把它想成 C 语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。
你也看到了,这两个文件就如同一个文件一样,inode 值相同,都指向同一个区块。
然后我们修改一下刚才创建的 hard 链接文件:
$ echo "New line" >> hard
$ cat myfile

This is a plain text file.
New line
可以看到,这两个文件果真就是一个文件。
下面我们看看软链接(也就是符号链接)和它有什么区别。
$ ln -s myfile soft
$ ls -li

25869085 -rw-r--r--  2 unixzii  staff  36  7  8 17:45 hard
25869085 -rw-r--r--  2 unixzii  staff  36  7  8 17:45 myfile
25869216 lrwxr-xr-x  1 unixzii  staff   6  7  8 17:47 soft -> myfile
诶,你会发现,这个软链接的 inode 竟然不一样啊,并且它的文件属性上也有一个 l 的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。
下面我们试着删除 myfile 文件,然后分别输出软硬链接的文件内容:
$ rm myfile
$ cat hard

This is a plain text file.
New line
$ cat soft

cat: soft: No such file or directory
之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。
然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。
为验证这一猜想,我们再向这个软链接写点东西:
$ echo "Something" >> soft
$ ls

hard   myfile soft
可以看到,刚才删除的 myfile 文件竟然又出现了!这就说明,当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。
总结

到这里我们其实可以总结一下了:
硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

如何删除链接呢?

rm -rf xxxxx 而不是 rm -rf xxxx/

作者:Cyandev
链接:http://www.jianshu.com/p/dde6a01c4094
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

软连接与硬链接的区别,以及如何删除软链接相关推荐

  1. 查看论坛隐藏链接_软连接与硬链接的区别

    点击上方蓝色"后端开发杂谈"关注我们, 专注于后端日常开发技术分享 硬链接与软连接的联系与区别 文件都有文件名和数据, 这在Linux上被分为两部分: 用户数据(user data ...

  2. 文件系统之软连接、硬链接的区别/文件删除与空间的联系/df和du的区别

    目录 1.软连接 2.硬链接 3.硬链接和软连接的异同点 4.删除文件与空间的联系 5.du和df的区别 文件系统中的软连接和硬链接. 每个文件创建好之后,都会维护两个计数器:i_count和i_nl ...

  3. 软连接和硬链接的区别

    1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引 ...

  4. i节点详解以及软连接和硬链接的区别

    i节点是一个64字节长的表,表中包含了文件的相关信息,其中有文件的大小,文件的所有者,文件的存取方式以及文件的类型等重要信息.在i节点表中最重要的内容是磁盘地址表. 在磁盘地址表中有13个块号,文件将 ...

  5. Linux系统 软连接和硬链接的区别

    硬链接:hard link 软连接:symbolic link 软链接: 以路径形式存在,类似于快捷方式 可以跨文件系统 可以对一个不存在的文件名进行链接 可以对目录进行链接 硬链接: 以文件副本形式 ...

  6. 软链接与硬链接的区别

    软连接与硬链接的区别: 1.符号链接又叫软链接,和原文件不是一个文件.例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了.符号链接记录的是目标的path.符号链接可以 ...

  7. linux如何删除硬链接,linux下创建和删除软、硬链接

    在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号. 文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问 ...

  8. 软连接和硬连接的区别linux,软链接和硬链接的区别你真的知道吗?

    导读 在 Linux 系统中,一切都是文件,然而为了区分不同类型的事物,我们有了:普通文件:目录文件:链接文件:设备文件 Linux 系统中,一切都是文件,然而为了区分不同类型的事物,我们有了: 普通 ...

  9. centos7删除符号链接_面试 | Linux 下软链接和硬链接的区别

    在 Linux 系统中,一切都是文件,然而为了区分不同类型的事物,我们有了: 普通文件 目录文件 链接文件 设备文件 在之前的文章<阿里面试题 | Nginx 所使用的 epoll 模型是什么? ...

最新文章

  1. php和python写爬虫-python写爬虫方便还是php方便
  2. 【STM32】随机数发生器相关函数和类型
  3. BD-09 GCJ-02 WGS84 坐标之间的转换
  4. [MODX] 2. Chunks $
  5. 工作329:uni-数据为空不显示
  6. 微软Webcast课程下载软件iReaper正式登陆Android平台
  7. hadoopsdk使用_hadoop部署使用问题及解决
  8. ios如何获取gps坐标(定位第二节)
  9. 当主数据库挂掉的时候,一个可行的备份方法
  10. python如何访问对象的属性_Python:从存储在字典中的对象访问对象属性
  11. 用xml文件保存系统设置
  12. python自动化办公excel-Python自动化办公之操作Excel文件
  13. php单例模式深入讲解
  14. java的在线帮助文档
  15. 校园二手交易平台小程序《云开发演示》
  16. 详解机器学习算法基础--K近邻算法
  17. Shiro保姆级教程
  18. 努比亚android P的功能,努比亚Z17Android P 正式版已开启小批量FOTA推送
  19. 进程和线程的区别 进程间的通信方式
  20. 关于Win10 64位Cadence16.6中OrCAD Capture CIS导网表出现ERROR无效指针的解决办法

热门文章

  1. linux中特殊字符反引号,linux中的特殊符号$ ‘’ 反引号 反斜杠
  2. php7如何安装swoole,初学Swoole:PHP7安装Swoole的步骤
  3. Java并发包JUC的Lock锁讲解
  4. 浏览器的cookie和服务器存储的session有什么关联,下面妙文为你解答
  5. 对偶上升实例-MATLAB代码
  6. 计算机专业很不稳定,浅谈计算机网络专业教学的创新因素:引起计算机系统不稳定的因素有哪些...
  7. Java 并发编程之线程池 ExecutorService 接口
  8. php h5读写数据库,H5学习_番外篇_PHP数据库操作
  9. python for循环 内存_python中for循环的内存分配
  10. sklearn GridSearchCV网格搜索案例与代码