-
2021-05-15 11:47:13
硬链接
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。
作用:
允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止"误删"的功能。
软链接
软链接文件有点类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
硬链接和软链接区别
软链接:
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
硬链接:
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
ln命令
上面说到这两个概念,不得不提ln命令,它默认创建的是硬链接。
创建硬链接
$ ln source.txt hard.txt
创建软链接
$ ln -s source.txt soft.txt
例子
$ echo hello > source.txt
$ ln source.txt hard.txt
$ ln -s source.txt soft.txt
$ rm source.txt
$ echo world > soft.txt
这个例子可以理解两个链接的区别
需要说明的是:最后两步:先删除原始文件,这样源文件不存在了,假若往软链接写入,那么原始文件就会重新出现。
那是因为echo 写入软链接的时候,会自动变成源文件的真实路径,那么一写入,就写到原始文件了。
更多相关内容 -
硬链接与软链接
2021-01-07 22:45:23硬链接与软链接 使用linux中的文件系统来演示软链接与硬链接。 硬链接 linux的文件系统存放着很多节点,在我们创建了file文件(指向节点是1062772),再将file1文件硬链接到file文件时,实质上是将file1文件也指向... -
PTtool:PT硬链接工具。方便PT用户硬链接文件,不需要再最大可能情况下节约空间,并保持做种。小于1M的文件...
2021-04-04 01:35:14硬链接工具 设计目的 小于1M的文件直接复制,方便emby,tmm等工具刮削修改nfo等小文件。大于1M的文件硬链接到目的目录,可以修改文件名,但不能修改文件内容! 例如:/ share / Download / src#保存下载的PT文件/ ... -
详解linux软连接和硬链接
2021-01-10 12:27:02本篇文章详细介绍了linux软连接和硬链接,废话不多说,接着往下看把。 一 链接文件 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 ... -
区分Linux硬链接与软链接
2021-01-09 01:21:56这种称为硬链接(hard link),也叫作实体链接。 软链接与硬链接是两种完全不一样的东西。 1.硬链接(hard link) 1.1简介 一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。但是,Unix/... -
Linux下创建和删除软、硬链接(ln)
2020-08-30 05:04:12在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在...Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号... -
【Windows】通过右键快速创建文件的硬链接
2018-02-26 09:51:29一般情况下,文件的硬链接都是通过命令行的方式来创建的。本资源就是将那命令集成到鼠标右键中,更方便地创建文件硬链接。 -
Linux软连接和硬链接
2021-01-09 17:31:13Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 【硬连接】 硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在... -
PyHardLinkBackup:使用 Python 进行硬链接重复数据删除备份
2021-05-29 20:27:06硬链接备份 使用 Python 进行硬链接/重复数据删除备份。 备份应保存为文件系统中的普通文件: 无需任何额外软件或额外元文件即可访问 非专有格式 使用版本控制创建备份 每次备份运行都会创建一个完整的文件系统... -
软链接与硬链接的使用.txt
2021-09-13 16:03:23软链接与硬链接的使用 -
Linux操作系统的硬链接与软链接讲解
2020-03-03 23:20:18在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。...Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。 -
mac-hardlink:macOS上的硬链接
2021-05-09 12:55:54macOS上的硬链接 安装 npm i -g mac-hardlink 用法 hardlink -h hardlink <src> 或取消链接: hardlink <dir> -u -
dupe-krill-快速文件重复数据删除器。 用硬链接替换具有相同内容的重复文件。-Rust开发
2021-05-27 19:11:20Dupe krill-快速文件重复数据删除器用硬链接替换具有相同内容的文件,因此所有副本的文件数据仅存储一次,Dupe krill-快速文件重复数据删除器用硬链接替换具有相同内容的文件。副本仅存储一次,从而节省了磁盘空间。... -
Linux 硬链接和软链接详细介绍
2021-01-10 23:24:16Linux中的硬链接和软链接 软链接和硬链接 命令ln ln是创建链接的命令: 创建硬链接:ln file link 创建软链接:ln -s file link 硬链接 硬链接(hard link)是Unix系统最早的创建链接的方式。 默认情况下... -
CSBackup:带有硬链接的命令行备份,出色的内存节省策略-开源
2021-05-29 04:47:50它使用 NTFS 硬链接来保存硬盘位置并创建备份历史记录。 主要功能之一是对长文件名(超过255个字符)的支持以及对UTF-8的支持。 * 文件夹别名的使用 * 从根备份完整的驱动器 * 按大小和日期比较文件更改(比哈希码... -
SmartDupe:通过硬链接替换文件重复项-开源
2021-05-07 19:15:15SmartDupe是bash脚本,它通过硬链接替换给定路径中的文件重复,以释放硬盘上的可用空间。 -
rsyncshot:使用rsync和硬链接进行简单Linux备份
2021-04-05 04:56:00rsyncshot 具有硬链接,rsync,cron和bashLinux备份。 灵感来自 -
Linux 硬链接与软链接
2021-01-09 16:34:08Linux 中有两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接也称为符号链接(Symbolic Link)。 硬链接 硬链接其实已存在文件的另一个名字,链接与原来的文件并没有什么区别 -
Linux下硬链接与符号链接
2021-01-08 01:47:33硬链接的核心是在硬链接所在目录的数据区块中添加一条关联数据:硬链接这个文件的名字和inode号(这个inode号是实际数据inode号,改inode号对应实际数据对应的数据区块) 例:使用 ln /etc/crontab /root/crontab ... -
Linux硬链接与软链接原理及用法解析
2021-01-09 02:44:04链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。 硬链接概念 硬链接(hard link, 也称链接)就是一个文件的一个或多个文件名 硬链接是指通过索引节点来... -
linux下创建和删除软、硬链接
2021-05-15 16:19:44在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。...Linux中包括两种链接:硬链接(Hard Link) 和软链接(Soft Link),软链接又称为符号链接(Symbolic...在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。
文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。
Linux中包括两种链接:
硬链接(Hard Link) 和软链接(Soft Link),
软链接又称为符号链接(Symbolic link)。
符号连接相当于Windows下的快捷方式。
一、硬链接
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。
可以用:ln命令来建立硬链接。
语法:
ln [options] existingfile newfile(sexistingfile 待建立链接文件的文件,newfile是新创建的链接文件)
ln [options] existingfile-list directory
-f 建立时,将同档案名删除.
-i 删除前进行询问.
ln -s abc cde 建立abc 的软连接
ln abc cde 建立abc的硬连接,
用法:
第一种:为”existingfile”创建硬链接,文件名为”newfile”。
第二种:在”directory”目录中,为”existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。
下面举一些例子:
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
[root@rekfan.com test]# ln file2 file2hand
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]#
注意在创建链接前,file1 显示的链接数目为1,
创建链接后file1和file1hard的链接数目都变为2;
file1和file1hard在inode号是一样的file1和file1hard显示的文件大小也是一样。
可见进行了ln命令的操作结果:
file1和file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,
建立文件file1的硬链接,就是为file1的文件索引节点在当前目录上建立一个新指针。
你可以删除其中任何一个,如rm file2 ,每次只会删除一个指针,链接数同时减一,
当链接数减为0时,内核才会把文件内容从磁盘上删除。
还可以在不同目录,但同一文件系统中建立文件的硬链接。
设file1、file2在目录/home/root/dir1中,
下面的命令,在/home/root中建立file2的硬链接。
ln file2 /home/root/file2hard
下面的程序,是将dir1目录中所有文件,在目录dir2中建立硬链接
#mkdir dir2
#ln /home/root/dir1/* /home/root/dir2
如果使用了 ln –f existingfile newfile,如果newfile已经存在,则无论原来newfile是什么文件,
只用当前用户对它有写权限,newfile就成为exisitngfile的硬链接文件。
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:
(1)不可以在不同文件系统的文件间建立链接
(2)只有超级用户才可以为目录创建硬链接。
二、软链接(符号链接)
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。
因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
建立软链接,只要在ln后面加上选项 –s,下面举个例子
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]# ln -s file1 file1soft
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。
区别:硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,
而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;
在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,
因为在本质上硬链接文件和原文件是完全平等关系;
链接数目是不一样的,软链接的链接数目不会增加;
文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,
这用强调,因为是等同的嘛,而这里软链接显示的大小与原文件就不同了,
file1大小是48B,而file1soft是5B,这里面的5实际上就是“file1”的大小。
总之,建立软链接就是建立了一个新文件。
当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
在不同系统之间建立软链接、对目录建立链接,这里就不举例了,读者可以自己去尝试,我也是在不断实践中学习的。
当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,
所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了~~,
而硬链接就没有这个缺陷,你想怎么移就怎么移(呵呵);
还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
补充一下:可以通过symlink来查看链接文件,可以用 man symlink来学习。
三、删除链接
有创建就有删除
rm -rf symbolic_name
注意不是rm -rf symbolic_name/
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]# rm -rf file1soft
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]#
————————————
linux 软连接和硬链接的区别:
————————————
4点不同 :
(1)软连接可以 跨文件系统 ,硬连接不可以 。
实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录 下 bb,cc .
ln -s aa.txt /root/bb 连接成功 。
ln aa.txt /root/bb 失败 。
(2)关于 I节点的问题 。
硬连接不管有多少个,都指向的是同一个I节点,会把 结点连接数增加 ,
只要结点的连接数不是 0,文件就一直存在 ,不管你删除的是源文件还是 连接的文件 。
只要有一个存在 ,文件就存在 (其实也不分什么 源文件连接文件的 ,因为他们指向都是同一个 I节点)。
当你修改源文件或者连接文件任何一个的时候 ,其他的 文件都会做同步的修改 。
软链接不直接使用i节点号作为文件指针,而是使用文件路径名作为指针。
所以 删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件 。
软链接有自己的inode,并在磁盘上有一小片空间存放路径名.
(3)软连接可以对一个不存在的文件名进行连接 。
(4)软连接可以对目录进行连接。
备注:
I节点 :
它是UNIX内部用于描述文件特性的数据结构.我们通常称I节点为文件索引结点(信息结点).
i节点 含有关于文件的大部分的重要信 息,包括文件数据块在磁盘上的地址.
每一个I节点有它自己的标志号,我们称为文件顺序号.
I节点包含的信息
1.文件类型
2.文件属主关系
3.文件的访问权限
4.文件的时间截.
-
windows文件硬链接
2013-07-12 03:20:19可以copy硬性链接,尤其适用于dropbox,比如你想把其他地方的文件放到dropbox上,可以利用此软件,做一个硬性链接 -
Linux中软链接和硬链接的区别
2021-05-16 04:04:05Linux中软链接和硬链接的区别链接文件:Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。Inode文件除了纯数据本身之外,还必须包含有对这些纯数据的管理信息...Linux中软链接和硬链接的区别
链接文件:
Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。
Inode
文件除了纯数据本身之外,还必须包含有对这些纯数据的管理信息
文件名;
访问权限;
文件的属主以;
该文件的数据所对应的磁盘数据块;
文件的时间戳;
access time
modify time
chang time
链接数,即有多少文件名指向这个inode;
这些管理信息称之为元数据(mata data),保存在文件的inode节点之中。我们可以通过stat命令查看一个文件的inode信息:
命令格式:
stat [OPTION]… FILE…
[root@wang ~]17:21# stat /root/wang
文件:"wang"
大小:2474 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:139145901 硬链接:3
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2016-10-20 16:17:13.046000565 +0800
最近更改:2016-10-18 04:31:46.303621312 +0800
最近改动:2016-10-20 16:03:57.389348957 +0800
用stat查看文件的inode信息时,我们看到输出的信息中有一行Inode:139145901,这个是/root/wang文件的inode号。每个inode都有一个全文件系统唯一的inode号,操作系统内核正是通过inode号而非文件名来识别不同的文件。文件名仅仅是为了方便用户使用而已,内核是通过文件名找到inode,然后通过inode访问实际文件数据的。既然系统是通过inode号找到的文件内容,那么是否可以存在多个文件的inode号是相同的情况呢?答案是有的就是开头提到的硬链接。
硬链接(Hard Link)
硬链接文件其实就是与原文件在不同或者同一目录(必须同分区)下的另外一个外号,与原文件指向同一个Inode,对应同样的磁盘数据块,具有相同的访问权限、属性等等。也就是说硬链接其实就是同一个人的别名或者是外号,不管叫什么其实都是指的同样的人。
命令格式:ln filename [ linkname ]
硬链接的优点;
节省系统空间,一段磁盘数据块不论有多少个硬链接都只占用一次空间;
硬链接文件之间互相没有关联,当一个文件删除时其他文件依然可以正常使用;
硬链接的缺点;
不能跨分区创建硬链接。因为inode号只有在一个分区内才能保证是唯一的,跨越分期统则inode号就可能重复。
不能对目录创建硬链接。
软连接(symbolic link)
软链接又叫符号链接(symbolic link),与硬链接不同的是软链接本身也是文件有自己独立的Inode号,软链接的文件内容是其所链接的另外一个文件或者目录的路径。当访问软链接时,会按照路径找到软链接所指向的实际目标文件。举个例子 软链接和Windows系统下的快捷方式十分类似。
命令格式:ln -s filename [linkname]
使用”ls -l ”令查看文件长格式时 第一位显示为“l”的文件为软链接文件。软链接的文件内容就是引用文件的名称。
[root@wang ~]19:57# ll /tmp/testdir/
总用量 0
drwxr-xr-x. 2 root root 6 10月 20 19:31 wang
drwxr-xr-x. 2 root root 6 10月 20 15:30 zz
lrwxrwxrwx. 1 root root 15 10月 20 15:31 zz.1nk -> /tmp/testdir/zz
软链接的优点
可以对目录创建软链接
可以跨分区使用
软链接的缺点
链接文件的位置或者目标文件的位置发生改变时,软链接可能会失效。
演示
创建一个指向 /tmp/testdir/test 的链接接文件 slink
[root@wang ~]20:18# mkdir /tmp/testdir
[root@wang ~]20:19# touch /tmp/testdir/test
[root@wang ~]20:19# ln -s /tmp/testdir/test /tmp/testdir/slink
使用ls -li /tmp/testdir/ 查看会发现新创建的软链接文件slink的inode:4323463而原文件test的inode:4323457
使用ln /tmp/testdir/test /tmp/testdir/hlink创建一个/tmp/testdir/test 的硬链接文件 hlink
使用ls -li /tmp/testdir/查看会发现新创建的硬链接文件hlink和原文件test的inode相同都是4323457,属主、属组权限相同同时链接数变成了2
使用rm /tmp/testdir/test删除原文件test后,再次使用ls -li /tmp/testdir/查看会发现软连接slink已经失效,硬链接文件链接数减少了一个。
2016-10-20 20:54:36
原创文章,作者:M21-13-王振中,如若转载,请注明出处:http://www.178linux.com/53258
-
软链接和硬链接
2015-04-23 19:32:30Linux之软链接和硬链接 -
软链接与硬链接 详细讲解
2020-02-02 16:51:33软链接与硬链接是用来干什么的呢? 为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还...1、链接作用
软链接与硬链接是用来干什么的呢?
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
2、硬链接
2.1、硬链接特性说明
由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。
硬连接之间没有主次之分,删除某个硬链接,只是将其从目录的数据块中删除相关信息,并且文件链接数减一。不会从inode表中删除inode,除非只剩下一个链接数。
下面举例说明:
#创建文件夹hardlink [root@localhost ~]# mkdir /hardlink #在hardlink内创建文件aa.txt [root@localhost hardlink]# touch aa.txt #查看其链接数为1 #注意,此处链接数就是硬链接的次数 [root@localhost hardlink]# ls -il total 0 51190844 -rw-r--r--. 2 root root 0 Feb 2 13:04 aa.txt #创建硬链接 [root@localhost hardlink]# ln aa.txt aa.link [root@localhost hardlink]# ls -il total 0 51190844 -rw-r--r--. 2 root root 0 Feb 2 13:04 aa.link 51190844 -rw-r--r--. 2 root root 0 Feb 2 13:04 aa.txt #往aa.txt文件中写入一些内容 [root@localhost hardlink]# echo "123" >aa.txt #发现aa.link中也同样可以看到 [root@localhost hardlink]# cat aa.txt 123 [root@localhost hardlink]# cat aa.link 123 #删除aa.txt [root@localhost hardlink]# rm -f aa.txt #aa.link依然可以正常查看内容 [root@localhost hardlink]# cat aa.link 123 #l链接数 -1,inode不变 [root@localhost hardlink]# ls -il total 4 51190844 -rw-r--r--. 1 root root 4 Feb 2 14:00 aa.link
那这时候,就有个疑问了,如果链接数只剩下一个,再次删除,会进行什么样的操作呢?
实际上,如果我们这时候再删除aa.link这个文件,系统只会删除掉inode table中aa.link指向的inode信息,和hardlink 目录项中aa.link的相关信息。然后会将aa.link inode指针所指向的数据块设置为空闲的状态,告诉系统这些数据块可以被再次使用。而里面的内容却不会被删除,直到新的数据覆盖为止!这也就说明了,实际上 linux中被删除的文件数据是可以被找回的,只要相应的数据块没有被再次覆盖使用。
如果观察的再细致一些,我们会发现,为什么hardlink这个文件夹再创建后就会有两个链接数呢?
[root@localhost hardlink]# ls -ail total 4 51190841 drwxr-xr-x. 2 root root 21 Feb 2 14:02 . 64 dr-xr-xr-x. 20 root root 267 Feb 2 13:02 .. 51190844 -rw-r--r--. 1 root root 4 Feb 2 14:00 aa.link [root@localhost hardlink]# ls -il / total 20 51190841 drwxr-xr-x. 2 root root 21 Feb 2 14:02 hardlink ....
通过上述查看,我们可以看出,当进入hardlink目录下后,默认会有个 **.**的隐藏目录,而该目录也就是当前目录的意思。即hardlink目录。所以才会有两个链接数。
2.2、硬链接存在的问题
1、无法跨分区,跨设备创建硬链接
[root@localhost hardlink]# ln aa.link /boot/ ln: failed to create hard link ‘/boot/aa.link’ => ‘aa.link’: Invalid cross-device link
因为每个分区都有自己独立的inode体系,假设A分区的文件在B分区做了一个硬链接,此时访问B分区的此链接,按照我们想的是需要它访问A分区的inode,进行数据查询,但是它只会根据B分区的inode,在B数据块中查找数据。就相当于两套独立的数据库,你不可能拿着A数据库的某个主键去B数据库搜索数据,是一样的道理。
2、无法创建文件夹的硬链接
[root@localhost hardlink]# ln /hardlink /test/dir.link ln: ‘/hardlink’: hard link not allowed for directory
至于为何设置为无法创建文件夹,这里还是用反推来验证。假设可以创建文件夹的硬链接:ln /hardlink /test/dir.link。那么有个问题,首当其冲。
[root@localhost hardlink]# ls -al total 4 drwxr-xr-x. 2 root root 21 Feb 2 14:02 . dr-xr-xr-x. 20 root root 267 Feb 2 13:02 .. -rw-r--r--. 1 root root 4 Feb 2 14:00 aa.link
hardlink目录下的 . 是当前目录的意思,此处代表hardlink,那dir.link中的 **.**是代表test目录呢?还是 hardlink目录呢?
其次,假设存在目录 /A/B.link 和 /B/A.link。如果B.link是B目录的硬链接,A.link是
A目录的硬链接。那A.link既然是/A的链接,那它里面肯定有B.link。同理B.link里面肯定有A.link。这样依次循环 /A/B.link/A.link/B.link/A.link/…。就造成了死循环的现象。这也就是为什么不允许创建文件夹硬链接的原因了。由于硬链接局限性比较多,所以工作中使用的不多。
3、软链接
(又称符号链接,即 soft link 或 symbolic link):相当于我们 Windows 中的快捷方式,即如果你软链接一个目录,只是一个目录的快捷方式到指定位置,操作系统找这个快捷方式会直接找到真实目录下的文件。
下面举例说明软链接的特性
[root@localhost ~]# mkdir /softlink [root@localhost ~]# cd /softlink/ [root@localhost softlink]# touch aa.txt #创建软链接 [root@localhost softlink]# ln -s aa.txt soft.link [root@localhost softlink]# ls -il total 0 1156025 -rw-r--r--. 1 root root 0 Feb 2 15:12 aa.txt 1156029 lrwxrwxrwx. 1 root root 6 Feb 2 15:13 soft.link -> aa.txt
如上可以看出,软连接与原文件并不是同一inode,链接数也没有增加。并且为何连大小也不一样呢?
这里我们写入一些内容到aa.txt中[root@localhost softlink]# echo "111111111111111111111" >aa.txt [root@localhost softlink]# ls -il total 4 1156025 -rw-r--r--. 1 root root 22 Feb 2 15:27 aa.txt 1156029 lrwxrwxrwx. 1 root root 6 Feb 2 15:13 soft.link -> aa.txt
再次查看,原文件大小发生了改变,而链接文件大小依旧没变化。
这其实就是软链接的特性之一,因为软链接的inode指向的数据块保存的是 原文件的路径,如果没有路径,是由文件名,默认会在软链接所在路径查找
再次举例验证:[root@localhost softlink]# ln -s /usr/bin/ls ls.link #ls.link大小正好是 /usr/bin/ls的路径字符串大小 [root@localhost softlink]# ll total 4 -rw-r--r--. 1 root root 22 Feb 2 15:27 aa.txt lrwxrwxrwx. 1 root root 11 Feb 2 15:45 ls.link -> /usr/bin/ls lrwxrwxrwx. 1 root root 6 Feb 2 15:13 soft.link -> aa.txt
软链接的使用,如果观察Centos7,会发现,既有使用相对路径创建的软链接,也有使用绝对路径创建的软链接。
而使用相对路径创建软链接,则有如下注意点:
上图中,我们使用 ln -s …/aa.txt /tmp/aa.link在/tmp下创建了软链接,却发现,竟然提示报错!找不到aa.txt。因为/tmp/aa.link在指向…/aa.txt 的过程中。它会以自己的路径为初始点去寻找aa.txt。即 /tmp/aa.link -> …/aa.txt,在系统看来,它会理解成。以aa.link所在路径为起点,回到上一级目录,去寻找aa.txt。很显然没有找到,所以报错。创建的软连接,指向的文件,默认会以软链接的路径为主,去寻找指向的文件,所以创建时,请以软链接的路径作为起点路径 去写原文件的相对路径
那既然相对路径创建这么麻烦,为什么还要使用这种方式呢?因为使用相对路径的话,迁移只要相对迁移,不会影响链接的使用,更加灵活。而绝对路径的软链接,则必须要求路径的正确性。
而由于软链接 inode指向的数据块只保存 原文件的地址字符串,所以可以跨分区、跨设备创建,并且文件夹也可以创建。当然如果原文件被删除了,链接则也会失效,无法向硬链接那样拥有独立性。
4、软链接与硬链接的区别
1、本质:
硬链接:同一个inode,只是多个名字。
软链接:是不同的文件,inode不同
2、跨分区
硬链接无法跨分区、跨设备建立,软链接可以
3、目录
硬链接无法创建目录硬链接,软链接可以
4、相互关系
硬链接没有主次之分,相互独立
软链接依赖于原文件,原文件被删除,软链接即不可用
5、链接数
硬链接会删除增加会影响链接数,软链接不会,因为inode不一样。
6、相对路径
硬链接创建时,原始文件路径是相对于当前路径。
软链接创建时,原始文件路径是 相对于软链接的路径
7、文件类型
硬链接的类型与原始文件类型一致,软链接则会显示 symbolic link
8、创建方式
硬链接创建:ln [原文件] [硬链接]
软链接创建:ln -s [原文件] [软链接] -
硬链接到底占不占用磁盘空间?
2021-05-14 20:20:15硬链接到底占不占用磁盘空间?查了很多资料都说 硬链接不占用磁盘空间,于是乎,我做了如下实验,竟意外地发现有的硬链接也占用了磁盘空间!!!文件系统是 ext4,centos虚拟机。不多说,往下看吧。。。新建了一个... -
符号链接和硬链接有什么区别?
2019-12-22 15:32:05最近我在求职面试时被问到这个问题。 我是诚实的,并说我知道符号链接的行为以及如何创建一个,但不理解硬链接的使用以及它与符号链接的区别。 -
Linux中的ln命令:创建软链接和硬链接
2021-05-08 21:01:45在本教程分享了如何使用ln命令创建软链接和硬链接。链接是对另一个文件的引用。链接为同一个文件赋予多个名称,并允许它们同时存在于两个或多个位置。链接有两种类型:软链接或符号链接:这只是原始文件的快捷方式。...