Linux的硬链接和软链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的硬链接和软链接相关的知识,希望对你有一定的参考价值。

硬链接和软链接

Linux链接分两种:

? 一种被称为硬链接(Hard Link),

? 另一种被称为符号链接(Symbolic Link)。

默认情况下,ln命令创建硬链接, ln -s 创建软连接


【硬连接】

硬连接指通过索引节点来进行连接。

在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。

多个文件名指向同一索引节点是存在的,一般这种连接就是硬连接。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。因为只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接都被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

创建硬链接

ln命令

语法格式:

? ln 源文件 目标文件(目标文件可以不存在,在创建链接时候会默认创建同名的文件)

示例:

[[email protected] ~]# mkdir anuo
[[email protected] ~]# ln anuo/ /tmp/
ln: "/tmp/": 不允许将硬链接指向目录

[[email protected] ~]# touch anuo.txt
[[email protected] ~]# ln anuo.txt /tmp/    --创建链接到/tmp/目录下
[[email protected] ~]# ll
-rw-r--r--  2 root root     0 5月  13 17:54 anuo.txt
[[email protected] ~]# ll /tmp/
-rw-r--r--  1 root root     12 5月  13 17:57 anuo.txt

[[email protected] ~]# cat /tmp/anuo.txt    
[[email protected] ~]# echo "123456" >> /tmp/anuo.txt   --往链接文件里追加内容
[[email protected] ~]# cat anuo.txt     --查看源文件也增加了一样的内容
123456

[[email protected] ~]# echo "abcd" >> anuo.txt  --给源文件追加内容
[[email protected] ~]# cat /tmp/anuo.txt    --链接文件也一样增加相同的内容
123456
abcd

[[email protected] ~]# \rm anuo.txt -f  --删除源文件
[[email protected] ~]# cat /tmp/anuo.txt    --链接文件不变
123456
abcd

小结:

优点:硬链接相当于给文件做了备份,而且还是实时的互相备份,源文件变化链接文件也变化,源文件被删除,也不影响链接文件的正常使用

缺点:硬链接 无法针对目录,跨分区无法实现


【软连接】

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

创建软连接

语法: ln -s 源文件 目标文件

示例:

目录测试:

[[email protected] ~]# mkdir anuo
[[email protected] ~]# ln -s anuo/ abc
[[email protected] ~]# ll
总用量 4
lrwxrwxrwx 1 root root    5 5月  13 19:39 abc -> anuo/
drwxr-xr-x 2 root root 4096 5月  13 19:36 anuo
[[email protected] ~]# touch anuo/{a..c}.txt    --在源目录创建文件
[[email protected] ~]# cd abc/      --链接目录下也会有
[[email protected] abc]# ls
a.txt  b.txt  c.txt

[[email protected] ~]# touch abc/{1..5}.txt     --在链接目录里创建文件
[[email protected] ~]# ll abc/
总用量 0
-rw-r--r-- 1 root root 0 5月  13 19:42 1.txt
-rw-r--r-- 1 root root 0 5月  13 19:42 2.txt
……
[[email protected] ~]# ll anuo/     --查看到源目录里也有了
总用量 0
-rw-r--r-- 1 root root 0 5月  13 19:42 1.txt
-rw-r--r-- 1 root root 0 5月  13 19:42 2.txt
……
[[email protected] ~]# \rm anuo/ -rf    --删除源目录
[[email protected] ~]# cd abc       
-bash: cd: abc: 没有那个文件或目录
[[email protected] ~]# ll       --可以看到链接目录还在,但失效了
总用量 0
lrwxrwxrwx 1 root root 5 5月  13 19:39 abc -> anuo/

文件测试:

[[email protected] ~]# touch anuo.txt
[[email protected] ~]# ln -s anuo.txt  abc.txt
[[email protected] ~]# ll
总用量 4
lrwxrwxrwx 1 root root    5 5月  13 19:51 abc -> anuo/
lrwxrwxrwx 1 root root    8 5月  13 19:55 abc.txt -> anuo.txt
drwxr-xr-x 2 root root 4096 5月  13 19:51 anuo
-rw-r--r-- 1 root root    0 5月  13 19:55 anuo.txt
[[email protected] ~]# echo "123456" >>anuo.txt 
[[email protected] ~]# cat abc.txt 
123456
[[email protected] ~]# echo "abcd123" >>abc.txt 
[[email protected] ~]# cat anuo.txt 
123456
abcd123

[[email protected] ~]# \rm abc.txt      --删除链接文件
[[email protected] ~]# ll
总用量 8
lrwxrwxrwx 1 root root    5 5月  13 19:51 abc -> anuo/
drwxr-xr-x 2 root root 4096 5月  13 19:51 anuo
-rw-r--r-- 1 root root   15 5月  13 19:56 anuo.txt
[[email protected] ~]# cat anuo.txt     --源文件还存在没有影响
123456
abcd123

[[email protected] ~]# ln -s anuo.txt abc.txt   --再创建链接
[[email protected] ~]# cat abc.txt 
123456
abcd123
[[email protected] ~]# \rm anuo.txt     --删除源文件
[[email protected] ~]# ll
总用量 4
lrwxrwxrwx 1 root root    5 5月  13 19:51 abc -> anuo/
lrwxrwxrwx 1 root root    8 5月  13 20:01 abc.txt -> anuo.txt
drwxr-xr-x 2 root root 4096 5月  13 19:51 anuo
[[email protected] ~]# cat abc.txt      --链接文件也失效了
cat: abc.txt: 没有那个文件或目录

源文件被删除,链接文件失效

能针对目录创建

能跨分区创建

软链接:相当于windows中的快捷方式

以上是关于Linux的硬链接和软链接的主要内容,如果未能解决你的问题,请参考以下文章

Linux的硬链接和软链接

Linux的硬链接和软链接

linux系统中的硬链接和软链接

linux的硬链接和软连接的区别

详解 Linux 中的硬链接和软链接

Linux的硬链接和软连接