Linux 下软链接和硬链接的区别

http://os.51cto.com/art/201911/605267.htm

软连接 文件是小的  只是一个链接 删除和其他处理不影响 原始文件的计数  删除源文件 链接文件立马完蛋 但是可以跨文件挂载点进行连接. 

硬链接 增加了innode 的引用计数. 删除时 只要还有一个有链接 文件就还有. 但是不能跨挂载点进行硬链接

软连接 就是 ln -s 硬链接 直接 ln

在 Linux 系统中,一切都是文件,然而为了区分不同类型的事物,我们有了:

  • 普通文件
  • 目录文件
  • 链接文件
  • 设备文件

在之前的文章《阿里面试题 | Nginx 所使用的 epoll 模型是什么?》中我们讨论了文件描述符的概念:

文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其值是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行 I/O 操作的系统调用都通过文件描述符。

对于 Linux 有一些使用的用户来说,会有类似如下的写法:

g++ lots_of_errors 2>&1 | head

其中 2>&1 中的2 就是表示的「标准错误」,1 就是「标准输出」,中间的 & 表示后面跟的数字是文件描述符而不是一个文件(不然所有的「标准错误」就都重定向到了一个名为 1 的文件中了)。

本文将针对另一个面试重点进行展开阐述:

说说看 Linux 下有哪几种链接?软链接和硬链接?它们之间的区别是什么呢?

Linux 下的链接

作为的一个 Linux 的使用者,Linux 系统下提供 ln 指令来进行文件链接,我们一定见过类似如下指令:

此时如果 ls 查看当前目录下的文件的话,会发现:

那么这个 foo.txt 究竟是个什么呢?

这个就是一个文件链接,文件链接主要分为硬链接和软链接,通过查看 ln --help,可以看到一些重要的内容:

ln 指令默认创建的是硬链接,如果加入了 -s 参数,则会生成一个软链接。

硬链接

先来看看 ln 默认创建的硬链接,由于 Linux 下的文件是通过索引节点(Inode)来识别文件,在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Number)。

在 Linux 中,多个文件名指向同一索引节点是存在的,所以硬连接指通过索引节点来进行的连接,即每一个硬链接都是一个指向对应区域的文件。

我们这里创建一个文件 foo.txt 然后建立一个它的硬链接看看:

前面的 6817859是文件的 inode,可以简单把它想成 C 语言中的指针,它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失,这里我们会发现,这两个文件拥有相同的 inode,通过查看文件内容也会发现是同一个文件:

硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能,由于对应该目录的索引节点有一个以上的连接,假设我们删除了原始的 foo.txt 文件:

此时文件的内容依然存在,所以只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个链接被删除后,文件的数据块及目录的连接才会被释放,也就是说,文件才会被真正删除。

软链接

软链接又叫符号链接,这个文件包含了另一个文件的路径名,例如在上图中,foo.txt 就是 bar.txt 的软连接,bar.txt 是实际的文件,foo.txt 包含的是对于 bar.txt 的 inode 的记录。

软连接可以是任意文件或目录,可以链接不同文件系统的文件,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身,这一点类似于 Windows 操作系统下的快捷方式。

软链接和硬链接的区别

在有了上面的知识后我们就可以简要地回答面试中的问题了:

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

我们来总结一下:

在掌握了链接方面的知识之后,还有以下相关面试题也可以一起准备起来:

  • Linux 文件系统有哪些
  • Linux 有哪些文件类型
  • 用户进程间通信主要哪几种方式
  • 中断与系统调用的概念

[转帖]Linux 下软链接和硬链接的区别的更多相关文章

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

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

  2. Linux下软链接与硬链接的区别

    由于下面会说到inode,所以如果没有了解过,请务必搞懂inode的真正含义,厚颜无耻的推荐我的一篇博客:Linux磁盘与文件系统管理 如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象 ...

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

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

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

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

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

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

  6. 【转】Linux下软、硬链接的创建和删除

    原文:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/05/2199534.html 在Linux系统中,内核为每一个新创建的文件分 ...

  7. Windows和Linux创建软链接和硬链接

    1.Wondows创建软链接和硬链接 mklink [/d] [/h] link target /d--创建目录软链接:默认为文件软链接:创建目录链接时必须使用该选项不然创出的软链接无效 /h--创建 ...

  8. linux下软、硬链接的创建和删除

    linux下软.硬链接的创建和删除 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复 ...

  9. linux 创建软链接和硬链接

    Linux 系统中有软链接和硬链接两种特殊的“文件”. 软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录. 硬链接则透过文件系统的inode来产生新档名,而不是产生新档案. ...

随机推荐

  1. 51nod1463 找朋友

    [传送门] 写的时候一直没有想到离线解法,反而想到两个比较有趣的解法.一是分块,$f[i][j]$表示第$i$块块首元素到第$j$个元素之间满足条件的最大值(即对$B_l + B_r \in K$的$ ...

  2. ArrayList存储随机数字

    package com.fgy.demo; import java.util.ArrayList; import java.util.Random; /** * ArrayList实现存储随机数字 * ...

  3. RedisTemplate在项目中的应用

    如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo,看 RedisTemplate 的使用. 体验地址:http://video.71xun.com:8080  账户 ...

  4. GoCN每日新闻(2019-10-18)

    GoCN每日新闻(2019-10-18) 在Go1.13使用Errors https://blog.golang.org/go1.13-errors Go的扁平化应用结构 https://www.ca ...

  5. 计蒜客——Reversion Count

    Reversion Count 解析:题目数字的长度最大为 99,因此使用字符串处理,那么必然这些数存在某些规律.对于数 a (XYZW) 和数 b (WZYX),原式 = (1000X + 100Y ...

  6. (11)Go方法/接收者

    方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数.这种特定类型变量叫做接收者(Receiver).接收者的概念就类似于其他语言中的this或者 self. 方法的定义格式如 ...

  7. 第12组 Beta版本演示

    前言 组长博客 组名: To Be Done 组员和贡献比例 短学号 姓名 分工 贡献比例 614 王永福* 前后端实现.发任务.催进度 30% 440 孙承恺 UI设计 15% 529 邱畅杰 文本 ...

  8. Linux 备份工具dump

    dump的功能很强,除了可以备份整个文件外,还能够针对目录来备份,还可以指定等级.什么意思呢?假设你的/home是独立的一个 文件系统,那你第一次进行过dump后,再进行第二次dump时,可以指定不同 ...

  9. Spring Boot 面试,一个问题就干趴下了!(下)

    前些天栈长在Java技术栈微信公众号分享一篇文章:Spring Boot 面试,一个问题就干趴下了!,看到大家的留言很精彩,特别是说"约定大于配置"的这两个玩家. 哈哈,上墙的朋友 ...

  10. 使用pwn_deploy_chroot部署国赛pwn比赛题目

    目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...