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. MySql计算字段的长度

    用户账号有用中文字符,查找所有含有中文字符的账号 SELECT member_name FROM table_member WHERE length(member_name)!=char_length ...

  2. 机器学习十大算法总览(含Python3.X和R语言代码)

    引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...

  3. 如何在导航条的button点击变换时,切换对应的控制器

    1.导航条内的button被点击 切换对应的控制器 让控制器作为调航条的代理 1.定义代理 2.遵循代理协议 3.实现代理 4.在合适的地方调用代理    当按钮被点击的时候切换控制器

  4. Kubernetes 时代的安全软件供应链

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 汤志敏  阿里云 ...

  5. idea 使用下Java JDK安装

    下载idea 百度云: 链接:https://pan.baidu.com/s/1pmDTH-W1_BhSYJAlcAvljQ          提取码:sgmk 下载Java1.8(jdk-8u181 ...

  6. Python中的Tcp协议应用之TCP服务端-协程版(推荐)

    利用gevent第三方库,实现协程. 通过协程实现一个服务端服务多个客户端需求. 使用协程的好处是协程比线程更加节省内存资源. gevent安装命令: pip3 install gevent 注意:在 ...

  7. KETTLE教程实战

    kettle初探 Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.Kettle 中文名称叫水壶,该项目的主程 ...

  8. Python报错ERROR: Command errored out with exit status 1:

    解决方法: 1.以管理员身份打开cmd 2.pip install robotframework-AutoItLibrary (本次安装时Python基于3.7.3,pip为最新版本) 3.安装成功

  9. iOS 手势及触摸

    转自:http://justsee.iteye.com/blog/1885538 一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来 ...

  10. Node.js 中 process.cwd()与__dirname的区别

    process.cwd() 是当前执行node命令时候的文件夹地址 --工作目录,保证了文件在不同的目录下执行时,路径始终不变 __dirname 是被执行的js 文件的地址 --文件所在目录 当前模 ...