ln命令:软链接与硬链接的区别与应用
ln命令:软链接与硬链接的区别与应用
摘要
Linux系统中,链接是一个十分常见且实用的文件处理命令,它分为软链接和硬链接两种类型。软链接类似于Windows中的快捷方式,硬链接又有着与原文件保持同步更新的特性,两种链接方式各有特点,也各有其应用。接下来我们一起来深入认识一下这两种链接方式。
ln命令详解
英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:
ln -s [原文件] [目标文件]
-s 创建软链接
默认是硬链接(不指定-s)
功能描述:生成链接文件
范例:
> ln -s /etc/issue /tmp/issue.soft #创建文件/etc/issue的软链接/tmp/issue.soft
> ln /etc/issue /tmp/issue.hard #创建文件/etc/issue的硬链接/tmp/issue.hard
1. 软链接
A. 特征:类似Windows快捷方式
(1) lrwxrwxrwx 其中l 表示软链接。任何新建的软链接文件权限都为rwxrwxrwx,此权限不决定原文件权限
(2) 文件大小-只是符号链接,非常小,一般只有十几个字节,与原文件大小无关
(3) /tmp/issue.soft->/etc/issue 箭头指向原文件
B. 应用场景:
Q:什么时候用软链接文件?
A:需要快捷方式的时候就用软链接文件,只是为了便于管理和使用。
2. 硬链接
A. 特征:
(1) 相当于 拷贝(cp -p) + 同步更新 的功能
实验:
这里默认已经执行了范例中的命令创建了软/硬链接
[root@centos7-master /]# cat /etc/issue #查看当前原文件内容
\S
Kernel \r on an \m
[root@centos7-master /]# cat /tmp/issue.hard #查看当前硬链接内容
\S
Kernel \r on an \m
[root@centos7-master /]# echo "this is a test" >> /etc/issue #向原文件末尾追加新内容
[root@centos7-master /]# cat /etc/issue #查看更新后原文件内容
\S
Kernel \r on an \m
this is a test
[root@centos7-master /]# cat /tmp/issue.hard #查看原文件更新后硬链接的内容
\S
Kernel \r on an \m
this is a test #可以看到,这里硬链接与原文件保持了同步更新
[root@centos7-master /]# rm /etc/issue #删除原文件
rm: remove regular file ‘/etc/issue’? y
[root@centos7-master /]# cat /tmp/issue.soft #检验软链接是否仍有效
cat: /tmp/issue.soft: No such file or directory
[root@centos7-master /]# cat /tmp/issue.hard #原文件就算删除或丢失,硬链接依然可以访问
\S
Kernel \r on an \m
this is a test
上述实验我们可以看到,原文件有修改和更新,则硬链接也同步会进行更新;且原文件就算删除或丢失,硬链接依然可以访问,即如同拷贝(cp -p) + 同步更新功能。
(2) 可通过i节点识别。
一个文件一定有一个i节点,一个i节点不一定只对应一个文件。某文件的i节点和某文件的硬链接的i节点一般相同。当我们把原文件删除,硬链接依然会映射到对应的i节点。
关于i节点的知识,请浏览这篇文章:——————
实验:
软链接很好判断,如果软链接对应的原文件被删除后,我们通过ls查看软链接的文件信息,会发现软链接被标红,并不停闪烁。

如何判断硬链接呢?我们分别创建软/硬链接后查看i节点编号。
[root@centos7-master tmp]# cd /tmp
[root@centos7-master tmp]# ln issue.bak issue.bak.hard
[root@centos7-master tmp]# ln -s issue.bak issue.bak.soft
[root@centos7-master tmp]# ls -i issue.bak issue.bak.hard issue.bak.soft
8395173 issue.bak 8395173 issue.bak.hard 9116906 issue.bak.soft
可以看到,原文件的i节点编号是8395173,硬链接也是对应8395173编号的i节点的一个映射,而软链接的i节点编号则不同。
这样我们也可以十分容易理解为什么硬链接可以同步更新了,因为当我们对原文件进行修改操作时,在内核层面来看,这个操作实际上是针对对应的i节点进行操作,因为该i节点同时映射到了两个文件,所以硬链接也自然能体现出同步更新。
(3) 硬链接不能跨分区,但软链接可以
[root@centos7-master tmp]# ln /tmp/issue.bak /boot/issue.bak.hard
ln: failed to create hard link ‘/boot/issue.bak.hard’ => ‘/tmp/issue.bak’: Invalid cross-device link # 根分区/ 和 /boot分区不属于同一个分区
[root@centos7-master tmp]# ln -s /tmp/issue.bak /boot/issue.bak.soft
这相当于在Windows下将C盘的一个文件硬链接到D盘,是不被系统允许的。
(4) 硬链接不能针对目录使用,但软链接可以
[root@centos7-master tmp]# ln /tmp /root/tmp.hard
ln: ‘/tmp’: hard link not allowed for directory
[root@centos7-master tmp]# ln -s /tmp /root/tmp.soft
这相当于在Windows下将D盘的一个目录软链接到桌面,系统是允许的。
B. 应用场景:
硬链接使用场景并不多,但可以将其作为一个实时备份来使用。
参考文献
[1] 兄弟连.兄弟连Linux入门视频教程[DB/OL].http://c.biancheng.net/view/1713.html,2018-12-21/2020-05-04
ln命令:软链接与硬链接的区别与应用的更多相关文章
- [转帖]Linux 下软链接和硬链接的区别
Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...
- Linux上ln命令详细说明及软链接和硬链接的区别
硬链接(hard link) UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接.它可以使得单个程序对同一文件使用不同的名字.这样的好处是文件系 统只存在一个文件的副本, ...
- linux中软链接和硬链接的区别与小结
ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...
- linux 下的使用 ln 创建 软链接 和 硬链接
linux 下的一个指令 ln 作用: 创建软链接或者硬链接 Linux 系统下每创建一个文件,系统都会为此文件生成一个 index node 简称(inode) ,而每一个文件都包含用户数据(use ...
- linux下软链接与硬链接及其区别
linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...
- LINUX “软链接”和“硬链接”的区别
今天在知乎上看到一篇十分有趣的问题: 如何评价微软高级工程师痴迷于soft link这一linux常见概念? 虽然又是知名撕逼王曾某的撕逼帖,但是我还是想就题目中链接的问题简单地讲讲. 什么是链接? ...
- Linux下软链接与硬链接的区别
由于下面会说到inode,所以如果没有了解过,请务必搞懂inode的真正含义,厚颜无耻的推荐我的一篇博客:Linux磁盘与文件系统管理 如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象 ...
- ln 软链接与硬链接的区别再次回顾
以下是整理的笔记 软硬链接区别 硬链接 软链接 文件有相同的 inode 及 data block 是另一个文件 只能对已存在的文件进行创建 可以对不存在的文件进行创建 不能交叉文件系统进行硬链接的创 ...
- 描述Linux下软链接和硬链接的区别(计时2分钟)
在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...
随机推荐
- [Python] 字符串加密解密
1. 最简单的方法是用base64: import base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1 ...
- 05-CSV文件读取(问题)
1.支持.txt,.log,.json三种格式 并且也支持.csv格式文件类型----.csv在使用时会出现乱码情况 2.当时遇到问题: CSV文件.txt文本内有数据,如:user ,pwd adm ...
- lr集合点
集合点:rendezvous point =====>>loadrunner的虚拟用户中,并发concurrent\ 同时simultaneous的区别: concurrent并发:指虚拟 ...
- Docker 清理命令 删除所有的镜像和容器
杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有未打 dangling ...
- python批量添加hexo文章封面
❝ 本文需要工具: 「excel」 「python3.x」 ❞ 今天突然觉得,我的博客的文章更新这么多了竟然还没有一个封面,觉得首页相当低调了- 首页 正好皮肤带有文章封面功能,所以我觉得要将文章批量 ...
- echarts多个数据添加多个纵坐标
在我们echarts开发中,肯定会遇到一个问题.那就是当有多个数据且数据大小差距太大时,就会出现有些数据小到看不到的情况.所以在遇到这种情况时,我通常的解决办法就是给他多加一个坐标轴. option ...
- L18 批量归一化和残差网络
批量归一化(BatchNormalization) 对输入的标准化(浅层模型) 处理后的任意一个特征在数据集中所有样本上的均值为0.标准差为1. 标准化处理输入数据使各个特征的分布相近 批量归一化(深 ...
- Python程序设计实验报告二:顺序结构程序设计(验证性实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩 日期 2020.3.22 指导老师 修宇 [实验 ...
- v&n赛 ML 第一步(python解决)
题目链接 给了70组x,y,根据提示,是求拟合曲线,再通过x求y 知道MATLAB应该录入就能解决吧,但是没下这软件,试试用python解决 #coding:utf- from pwn import ...
- Java面试系列第一篇-基本类型与引用类型
这篇文章总结一下我认为面试中最应该掌握的关于基本类型和引用类型的面试题目. 面试题目1:值传递与引用传递 对于没有接触过C++这类有引用传递的Java程序员来说,很容易误将引用类型的参数传递理解为引用 ...