[Linux]ln:软链接与硬链接
1 硬链接与软链接的【语法】
- 软链接:
ln -s 源文件 目标文件 - 硬链接:
ln 源文件 目标文件
【-s : symbolic,符号/代号】
2 软链接/硬链接的【比喻】 / (编辑)同步性
[root@centos7 ~]# cat demofile.txt
001 - init - create demofile.txt - 20201023 0036
[root@centos7 ~]# ll
total 4
-rw-r--r-- 1 root root 48 Oct 22 16:37 demofile.txt
2-1 软链接 ≈ Windows的快捷方式
【实验1】
[root@centos7 ~]# ln -s ./demofile.txt ./file.soft
[root@centos7 ~]# ll -i (或ls -i)
total 4
12333 -rw-r--r-- 1 root root 48 Oct 22 16:37 demofile.txt
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 从软链接与源文件的[时间戳/innode]不同】
------------------------------------
[root@centos7 ~]# vi file.soft 【编辑软链接 : 验证软链接文件与源文件的同步性】
modify - add content - in file.soft (新增内容)
[root@centos7 ~]# ls -li
total 4
12333 -rw-r--r-- 1 root root 85 Oct 22 16:41 demofile.txt
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 从软链接的时间戳可见: 编辑软链接文本后,并没有改变软链接的最近修改时间,而源文件的时间戳被改变了;
说明:
编辑软链接,本质上是在编辑源文件,二者文本内容同步】
[root@centos7 ~]# cat demofile.txt
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
[root@centos7 ~]# cat file.soft
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
------------------------------------
[root@centos7 ~]# vi demofile.txt 【编辑源文件 : 验证软链接文件与源文件的同步性】
modify - add content - in demofile.txt (新增内容)
[root@centos7 ~]# ll -i
total 4
12333 -rw-r--r-- 1 root root 124 Oct 22 16:47 demofile.txt
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 从软链接的时间戳可见: 编辑源文件文本后,并没有改变软链接的最近修改时间,而源文件的时间戳被改变了;
说明:
编辑源文件,本质上是在编辑源文件,依旧不会变动软链接的修改时间,二者文本内容同步】
[root@centos7 ~]# cat file.soft
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
[root@centos7 ~]# cat demofile.txt
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
通过上述实验,可证明: 软链接就是Windows中的快捷方式!
2-2 硬链接 ≈ cp -p + 同步
【实验2】
[root@centos7 ~]# ln ./demofile.txt ./file.hard
[root@centos7 ~]# ll -i (或ls -i)
total 8
12333 -rw-r--r-- 2 root root 124 Oct 22 16:47 demofile.txt
12333 -rw-r--r-- 2 root root 124 Oct 22 16:47 file.hard
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 从硬链接与源文件的[时间戳/innode]完全相同】
------------------------------------
[root@centos7 ~]# cp demofile.txt demofile.txt.cp1 【拷贝源文件(cp),验证: 拷贝文件的时间戳是否与源文件一致】
[root@centos7 ~]# ll -i
total 12
12333 -rw-r--r-- 2 root root 124 Oct 22 16:47 demofile.txt
30834 -rw-r--r-- 1 root root 124 Oct 22 16:56 demofile.txt.cp1
12333 -rw-r--r-- 2 root root 124 Oct 22 16:47 file.hard
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 拷贝文件(cp)的[时间戳/innode]与源文件不一致】
------------------------------------
[root@centos7 ~]# cp -p demofile.txt demofile.txt.cp2 【拷贝源文件(cp -p),验证: 拷贝文件的时间戳是否与源文件一致】
【#解释# cp -p的 -p:= same as --preserve=mode,ownership,timestamps】
[root@centos7 ~]# ll -i
total 16
12333 -rw-r--r-- 2 root root 124 Oct 22 16:47 demofile.txt
30834 -rw-r--r-- 1 root root 124 Oct 22 16:56 demofile.txt.cp1
29719 -rw-r--r-- 1 root root 124 Oct 22 16:47 demofile.txt.cp2
12333 -rw-r--r-- 2 root root 124 Oct 22 16:47 file.hard
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 拷贝文件(cp -p)的[innode]与源文件不一致,但[时间戳]一致!】
------------------------------------
[root@centos7 ~]# vi file.hard 【编辑硬链接 : 验证硬链接文件与源文件的同步性】
modify - add content - in file.hard(新增内容)
[root@centos7 ~]# ls -li
total 16
12333 -rw-r--r-- 2 root root 160 Oct 22 17:02 demofile.txt
30834 -rw-r--r-- 1 root root 124 Oct 22 16:56 demofile.txt.cp1
29719 -rw-r--r-- 1 root root 124 Oct 22 16:47 demofile.txt.cp2
12333 -rw-r--r-- 2 root root 160 Oct 22 17:02 file.hard
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 从硬链接的时间戳可见: 编辑硬链接文本后,硬链接文件的时间戳被改变了,且也已同步改变了源文件的最近修改时间!
说明:
编辑硬链接,本质上也是在编辑源文件,二者文本内容同步】
[root@centos7 ~]# cat demofile.txt
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
modify - add content - in file.hard
[root@centos7 ~]# cat file.hard
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
modify - add content - in file.hard
------------------------------------
[root@centos7 ~]# vi demofile.txt 【编辑源文件 : 验证硬链接文件与源文件的同步性】
modify - add content - in demofile.txt (新增内容)
[root@centos7 ~]# ll -i
total 16
12333 -rw-r--r-- 2 root root 199 Oct 22 17:06 demofile.txt
30834 -rw-r--r-- 1 root root 124 Oct 22 16:56 demofile.txt.cp1
29719 -rw-r--r-- 1 root root 124 Oct 22 16:47 demofile.txt.cp2
12333 -rw-r--r-- 2 root root 199 Oct 22 17:06 file.hard
30833 lrwxrwxrwx 1 root root 14 Oct 22 16:38 file.soft -> ./demofile.txt
【#解释# 从硬链接/软链接/源文件的时间戳可见: 编辑源文件文本后,源文件和硬文件的时间戳被改变了,但没有改变软链接的最近修改时间。
说明:
编辑源文件,本质上是在编辑源文件/硬文件,依旧不会变动软链接的修改时间,三者文本内容同步】
[root@centos7 ~]# cat file.hard
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
modify - add content - in file.hard
modify - add content - in demofile.txt
[root@centos7 ~]# cat file.soft
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
modify - add content - in file.hard
modify - add content - in demofile.txt
[root@centos7 ~]# cat demofile.txt
001 - init - create demofile.txt - 20201023 0036
modify - add content - in file.soft
modify - add content - in demofile.txt
modify - add content - in file.hard
modify - add content - in demofile.txt
通过上述实验,可证明:
- 硬链接 :=
cp -p+ 同步
【小结】
通过上面的实验,还可知:
- 【(编辑)同步性】:编辑 硬链接/软链接/源文件 后,三者的文本内容始终保持同步
3 索引节点 | 删除(源文件/软链接/硬链接)操作的影响
3-1 删除操作的影响
- 删除软链接: 源文件/硬链接文件 存在,且可正常使用
- 删除硬链接: 源文件/软链接文件 存在,且可正常使用
- 删除源文件: 软链接 存在,但不可正常使用; 但硬链接 也存在,且可正常使用

3-2 索引节点

因此: 删除了源文件(demofile.txt),只是删除了从索引节点(12333)到源文件(demofile.txt)的映射关系,但不影响索引节点(12333)和新的硬链接文件(file.hard)的映射关系
【硬链接】
硬链接指通过索引节点来与源文件进行连接/同步。
在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配1个编号,称为索引节点号(Inode Index)。
在Linux中,多个文件名可指向同一索引节点是存在的。一般这种链接,就是硬连接。
硬连接的作用是允许1个文件拥有N个有效路径名,这样用户就可以建立硬链接到重要文件,以【防止用户误删】的功能。
其原因如上所述,因为对应该目录的索引节点有1个以上的连接。
只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。
也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
【软链接】
另外一种链接称之为符号链接(Symbolic Link),也叫软链接。
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。
在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
4 ln命令说明
-b like --backup but does not accept an argument
-d, -F, --directory allow the superuser to attempt to hard link
directories (note: will probably fail due to
system restrictions, even for the superuser)
-f, --force remove existing destination files
-i, --interactive prompt whether to remove destinations
-L, --logical dereference TARGETs that are symbolic links
-n, --no-dereference treat LINK_NAME as a normal file if
it is a symbolic link to a directory
-P, --physical make hard links directly to symbolic links
-r, --relative create symbolic links relative to link location
-s, --symbolic make symbolic links instead of hard links
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file always
-v, --verbose print name of each linked file
--help display this help and exit
--version output version information and exit
X 参考文献
[Linux]ln:软链接与硬链接的更多相关文章
- Windows和Linux创建软链接和硬链接
1.Wondows创建软链接和硬链接 mklink [/d] [/h] link target /d--创建目录软链接:默认为文件软链接:创建目录链接时必须使用该选项不然创出的软链接无效 /h--创建 ...
- [转帖]Linux 下软链接和硬链接的区别
Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...
- linux中软链接和硬链接的区别与小结
ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...
- Linux之软链接与硬链接
什么是链接? 链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件. 它是用来干什么的? 你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS ...
- linux下软链接与硬链接及其区别
linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...
- linux 创建软链接和硬链接
Linux 系统中有软链接和硬链接两种特殊的“文件”. 软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录. 硬链接则透过文件系统的inode来产生新档名,而不是产生新档案. ...
- linux文件软链接与硬链接
1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间. 2.命令功能: Linux文件系统中,有所谓的链接(link),我们 ...
- Linux 中软链接和硬链接的使用
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link). 硬链接和软链接 硬链接 --- ln 要链接的文件 新硬链接名 软连接 --- l ...
- Linux下软链接与硬链接的区别
由于下面会说到inode,所以如果没有了解过,请务必搞懂inode的真正含义,厚颜无耻的推荐我的一篇博客:Linux磁盘与文件系统管理 如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象 ...
- 描述Linux下软链接和硬链接的区别(计时2分钟)
在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...
随机推荐
- 通过【leaflet】 调用高德离线瓦片地图
官网:https://leafletjs.com/ 首先在官网下载[leaflet.css]和[leaflet.js] 引用js和css <link href="js/leaflet. ...
- Java实现简单的大顶堆
Java实现简单的大顶堆 今天刷LeetCode的347. 前 K 个高频元素的时候使用到了优先队列,由于对大顶堆掌握不算熟练,于是写了一个简单大顶堆练手: 实现代码在最后 之前很少使用泛型来写代码, ...
- poi读取Excel文件,数字变成科学计数法及数字自动带上“.0”的处理办法
解决poi解析excel遇到数值类型科学计数问题 NumberFormat nf = NumberFormat.getInstance();HSSFCell cell= hssfRow.getCell ...
- RuntimeError: Expected object of backend CUDA but got backend CPU for argument #4 'mat1'
原因:变量没有加cuda data=data.cuda()
- PHP实现JWT登录鉴权
一.什么是JWT 1.简介 JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. 简单的说,JWT就是一种Token的编码算法,服务器端负责根据一个 ...
- Crypto入门 (三)Morse
前言: Morse电码(Morsecode)是大家耳熟能详的编码方式,很多人都误认为它是一种加密方式,但其实它是一种编码,因为它并不存在密钥.在只能使用电报长短音传递信息的条件下,使用摩斯电码是为了方 ...
- 杨辉三角形实现过程详解-C语言基础
这一篇要探讨的是"杨辉三角形的实现以及如何人工走循环".涉及的知识点和内容很少,主要是想说明如何看懂循环,如何跟着循环走.属于C语言基础篇. 学习编程的人,在学习的初期,几乎都会接 ...
- Assert的使用和简单解释
Assert 的简单使用 Document d = Jsoup.connect("http://www.baidu.com").get(); Assert.notNull(d, & ...
- 1007.Django模型基础02
一.常用的查询 常用的查询方法(注:User为app项目): 获取所有的记录: rs = User.objects.all() 获取第一条数据:rs = User.objects.first() 获取 ...
- JavaScript 字符串和正则相关的方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...