Linux 文件系统把硬盘分为三个部分:超级块、inode 列表、数据区

  inode 指示:该文件的数据存放在数据区的哪些块内。因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身。(值得注意的是,文件名与文件本身不是直接映射起来的,中间隔着 inode)

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

  链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。

  Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。

硬链接

  硬链接相当于是一个指针,指向文件索引节点,系统并不为它重新分配inode。用 ln 命令来建立硬链接。

  当我们创建了一个文件的硬链接时,硬链接会使用和文件相同的inode号,此时我们发现,原来的文件的inode连接数由最初的1变为了2,实际上硬链接和文件使用了相同的inode,只不过是inode连接数增加了,删除文件不会影响硬链接,硬链接的inode数会从2变为1

# 不管是硬链接还是软连接,源文件必须先存在
[root@tanbaobao thy]# touch codefile.txt
[root@tanbaobao thy]# vi codefile.txt # 索引数量为1
[root@tanbaobao thy]# ls -il
总用量 8
922461 -rw-r--r-- 1 root root 6 12月 18 11:04 codefile.txt # 默认不加任何参数是创建硬链接,且参数二必须是要创建的链接文件
[root@tanbaobao thy]# ln codefile.txt h_codefile.txt # 查看硬链接,会发现它们的inode索引号是相同的,但索引的数量会加1
[root@tanbaobao thy]# ls -il
总用量 12
922461 -rw-r--r-- 2 root root 6 12月 18 11:04 codefile.txt
922461 -rw-r--r-- 2 root root 6 12月 18 11:04 h_codefile.txt # 删除源文件并不会影响硬链接(只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。)
[root@tanbaobao thy]# rm -rf codefile.txt
[root@tanbaobao thy]# ls -li
总用量 8
922461 -rw-r--r-- 1 root root 6 12月 18 11:04 h_codefile.txt

PS:硬链接,只能应用于文件,而不能应用于目录,而且不能跨文件系统(即分区)。不可以在不同文件系统的文件间建立链接。

软连接(符号链接)

  符号链接是对一个文件的间接指针。硬链接直接指向文件的i节点。 

  软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。甚至可以跨越不同机器、不同网络对文件进行链接。建立软链接只要在ln后面加上选项 –s。   

  在创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同,软链接的inode里存放着指向文件的路径,删除文件,软链接也无法使用了,因为文件的路径不存在了;当我们再次创建这个文件时(文件名与之前的相同),软链接又会重新指向这个文件(inode号与之前的不同了),而硬链接不会受其影响

# 先创建源文件
[root@tanbaobao thy]# touch srcfile.txt
[root@tanbaobao thy]# ls -l
总用量 4
-rw-r--r-- 1 root root 38 12月 18 11:01 srcfile.txt # 创建软连接(参数二必须是软连接文件名)
[root@tanbaobao thy]# ls -l
总用量 4
-rw-r--r-- 1 root root 38 12月 18 11:01 srcfile.txt # 查看(软连接的索引是不相同的,且索引数量都为1,并且软连接文件名后边会指向链接的源文件)
[root@tanbaobao thy]# ls -il
总用量 8
922457 lrwxrwxrwx 1 root root 11 12月 18 11:02 desfile.txt -> srcfile.txt
922460 -rw-r--r-- 1 root root 64 12月 18 11:03 srcfile.txt # 删除源文件,软连接就会失效(因为索引指向的源文件路径已经不存在了)
[root@tanbaobao thy]# rm -r srcfile.txt
rm:是否删除普通文件 "srcfile.txt"?y
[root@tanbaobao thy]# ls -il
总用量 4
922457 lrwxrwxrwx 1 root root 11 12月 18 11:02 desfile.txt -> srcfile.txt

查看软连接文件会显示没有该文件:

重新创建之后又会恢复,因为路径指向的文件存在:

[root@tanbaobao thy]# touch srcfile.txt
[root@tanbaobao thy]# ll -i
总用量 4
922457 lrwxrwxrwx 1 root root 11 12月 18 11:02 desfile.txt -> srcfile.txt
922458 -rw-r--r-- 1 root root 0 12月 18 11:43 srcfile.txt

说明:可以创建多个链接文件,但是不能在软连接文件上创建链接文件,这样会导致断裂,形成混乱的链接链

区别:

挂载点

  只能在同种存储媒体上的文件之间创建硬链接(Hard Link),不能在不同挂载点下的文件间创建硬链接,对于后一种情况,可以使用软链接;(区分不同挂载点与同一挂载点不同目录)

目录

  软连接就相当于 win 中的快捷方式即如果软链接一个目录只是一个目录的快捷方式到指定位置,操作系统找这个快捷方式会直接找到真实目录下的文件。但是硬链接的话,相当于镜像的方式,创建一个目录的硬链接之后,操作系统需要把这个目录下所有的文件都要做一次硬链接(复制一份过去),这样操作系统在访问这个链接的时候要不断去遍历,大大增加复杂度,而且很容易进入死循环。

  硬链接不能对目录创建受限于文件系统的设计。Linux 文件系统中的目录均隐藏了两个特殊的目录,当前目录和父目录。其实是两个硬链接,若系统运行对目录创建硬链接,则会产生目录环。

总结:

  1)硬链接原文件&链接文件共用一个inode号,说明他们是同一个文件;而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;

  2)在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系,就像文件被复制了一份一样;

  3)链接数目是不一样的,软链接的链接数目不会增加,硬链接会相应的加一;  

  4)文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,而这里软链接显示的大小与原文件就不同了。

【linux命令】软连接和硬链接的区别(ln命令)的更多相关文章

  1. linux中软连接和硬链接的区别

    linux中创建软连接和硬链接的方法: 软连接: ln -s oldfile slink 硬连接: ln oldfile hlink linux中创建软连接和硬链接的区别:        原理上,硬链 ...

  2. Linux的软连接、硬链接和find命令

    软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...

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

    Linux软链接硬链接的区别   ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下 ...

  4. [转帖]Linux 下软链接和硬链接的区别

    Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...

  5. linux下符号链接和硬链接的区别

    存在2众不同类型的链接,软链接和硬链接,修改其中一个,硬链接指向的是节点(inode),软链接指向的是路径(path) 软连接文件 软连接文件也叫符号连接,这个文件包含了另一个文件的路径名,类似于wi ...

  6. linux中软链接和硬链接的区别与小结

    ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...

  7. linux下软链接与硬链接及其区别

    linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...

  8. 描述Linux下软链接和硬链接的区别(计时2分钟)

    在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...

  9. Linux的软连接与硬链接

    Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于复制一个文件,但不同的是两个文件内容同步.如创建一个文件A的硬连接B, 如果我修改A里面的内容,同时B中的内容也会 ...

随机推荐

  1. centos7.6安装python3.7

    1.安装python3.7后,需要: yum install libffi-devel -y 然后再到python源码目录再make install 重新编译一下. 否则pip安装一些包时会安装不上, ...

  2. mysql那些事(6) WHERE条件 字符串的引号

    前言:所谓的坑,两个意思,一个是软件本身的bug,一个是使用者常犯的错误. phper在日常开发中经常和mysql打交道.特别是在没有分层的中小应用中,phper开发要关注sql语句的实现. 入正题, ...

  3. hello gulp,使用gulp的第一天。

    昨天花了一天的时间,学习了一下gulp,今天整理一下,也分享给朋友们. 首先当然是去gulp的官网逛一圈了: http://gulpjs.com/ 中文站地址: http://www.gulpjs.c ...

  4. 高德APP全链路源码依赖分析工程

    一.背景 高德 App 经过多年的发展,其代码量已达到数百万行级别,支撑了高德地图复杂的业务功能.但与此同时,随着团队的扩张和业务的复杂化,越来越碎片化的代码以及代码之间复杂的依赖关系带来诸多维护性问 ...

  5. Thinkphp5——实现分页(模型和Db分页,多种方法)

    现在很多网站的数据量的很多,如果全部在一页里显示效果不好,数据量太大,那怎么办?这时我们就需要分页,而分页的好处就是分段显示数据,这样页面就不用加载很多数据,需要时才加载,下面我教大家实现ThinkP ...

  6. Python异常处理与上下文管理器

    Python异常处理 异常与错误 错误 可以通过IDE或者解释器给出提示的错误opentxt('a.jpg','r') 语法层面没有问题,但是自己代码的逻辑有问题if age>18: print ...

  7. 【云速建站】微信公众平台中维护IP白名单

    [摘要] 介绍获取接入IP白名单的操作步骤 网站后台对接微信公众号.支付等都依赖于白名单,接下来就介绍一下白名单的配置. 1.1      为什么要设置白名单 为了提高公众平台开发者接口调用的安全性, ...

  8. 接口访问报错:The valid characters are defined in RFC 7230 and RFC 3986

    写了个接口,在测试访问的时候,需要传json串,但是后台报错了 The valid characters are defined in RFC 7230 and RFC 3986 当前使用的tomca ...

  9. MySQL必知必会(Select, Order by子句)

    SELECT prod_name FROM products ORDER BY prod_name; SELECT prod_id, prod_price, prod_name FROM produc ...

  10. HDU3870- intervals(差分约束)

    You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a program that: ...