LInux软硬链接概念

Posted

tags:

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

一、LInux软硬链接概念

Linux链接分为符号链接(Symbolic Link)也叫软链接和硬链接(Hard Link)两种,默认情况下,ln命令会产生硬链接。

二、软连接

    1.创建软连接命令:ln -s sourcefile newfile

    2.简介:

软链接又叫做符号链接,软链接文件有类似于Wondows的快捷方式。它实际上是一个特殊的文件。

    3.连接件特点:

3.1? 可以链接任何文件或者目录,还可以链接不同文件系统的文件或者目

3.2? 要链接文件时,新文件是必须存在的,当源文件不存在时,建立的链接是一个空链接。空链接文件也可以操作,而且对空链接操作,例如,emptyfile是空链接,对emptyfile进行vim emptyflie,并写入一些字符时保存时,系统就会自动生成一个emptyfile对应的源文件。空链接就会变成软链接。

3.3?? 软链接相当于windows系统的快捷方式,windows系统下改变快捷方式,例如对快捷方式重命名等不会改变源文件的内容。而在linux系统下,改变newfile时,sourcefile也会同步改变。当然,改变sourcefile也会引发newfile的同步改变。

3.4??删除newfile时,不会对sourcefile产生影响,但是删除sourcefile时,newfile就会变成一个空链接。当然,再对newfile写入内容,系统又会生成newfile对应的源文件。

[[email protected] data]#ln -s f1 f2
[[email protected] data]#echo "I am f1 file">>f1
[[email protected] data]#
[[email protected] data]#cat f1
I am f1 file
[[email protected] data]#cat f2
I am f1 file

[[email protected] data]#rm -rf f2
[[email protected] data]#cat f1
I am f1 file
[[email protected] data]#cat f2
cat: f2: No such file or directory
[[email protected] data]#

[[email protected] data]#ln -s f1 f2
[[email protected] data]#cat f2
I am f1 file

[[email protected] data]#rm -rf f1
[[email protected] data]#cat f2
cat: f2: No such file or directory
[[email protected] data]#

当删除原始文件f1时,软连接文件无效。

    4.不足:

因为链接文件包含原文件的路径信息,所以当原文件从一个目录下移动到另一个目录下,再访问链接文件,系统就找不到了。

三、硬链接

1.创建硬链接的命令:ln sourcefile newfile

2.简介

    由于Linux下的文件是通过索引节点来识别文件的,硬链接可以认为是一个指针,是一个指向文件索引节点的指针。系统并部位它重新分配inode,每添加一个硬链接,文件的链接数就加一。说到这里,就不得不提一下inodeinode是Unix内部用于描述文件特性的数据结构。我们通常称inode为文件索引节点Index Node(信息节点)。inode含有文件系统关于文件的大部分重要信息。在Unix创建文件时,同时会创建大量的inode节点。通常,文件系统磁盘空间中约百分之一的空间分配给了inode表。inode指的是数据结构,而索引编号实际上是inode的标识编号。inode表包含一份清单。列出了对应文件系统的所有文件inode编号,当用户搜索或者访问一个文件时,Unix系统通过inode表查找到相对应的inode编号。在找到inode编号后,相应的命令才能访问该inode,并对它进行访问等操作。

3.特点

3.1? sourcefile和newfile相互影响,同步执行。

3.2? 建立硬链接后,sourcefile和newfile的连接数都为2,当删除sourcefile文件后newfile文件不受影响,只是连接数减一,从链接文件变为普通文件。因为删除一个文件,实际上是删除inode信息。当链接数为0时,才会彻底删除该文件。也就是说,文件真正删除的条件是与之相关的所有硬链接文件都被删除。

3.3? 硬链接不占用磁盘空间。

3.4? 硬链接只作用于文件。

[[email protected] data]#touch f1
[[email protected] data]#ln f1 f2
[[email protected] data]#ls -li
total 0
67 -rw-r--r--. 2 root root 0 Sep 29 15:31 f1
67 -rw-r--r--. 2 root root 0 Sep 29 15:31 f2
[[email protected] data]#ln -s f1 f3
[[email protected] data]#ls -li
total 0
67 -rw-r--r--. 2 root root 0 Sep 29 15:31 f1
67 -rw-r--r--. 2 root root 0 Sep 29 15:31 f2
68 lrwxrwxrwx. 1 root root 2 Sep 29 15:31 f3 -> f1
[[email protected] data]#echo "I am f1 file">>f1
[[email protected] data]#cat f1
I am f1 file
[[email protected] data]#cat f2
I am f1 file
[[email protected] data]#cat f3
I am f1 file
[[email protected] data]#rm -rf f3
[[email protected] data]#cat f1
I am f1 file
[[email protected] data]#cat f2
I am f1 file
[[email protected] data]#cat f3
cat: f3: No such file or directory
[[email protected] data]#

4.不足

4.1? 不允许给目录创建硬链接。

4.2? 只有在同一文件系统中的文件才能创建硬链接。

    为什么不允许给目录创建硬链接?

原因:系统在遍历文件夹的时候,假设可以创建目录的硬链接,则因为系统不能识别出该硬链接是链接还是文件本身。这样,系统就会无限的递归下去。而软链接可以被系统识别,就不会出现这样的问题。

    为什么只有在同一文件系统下的文件才能创建硬链接?

原因:不同的文件系统可能具有相同的inode编号,假设可以在A系统创建B系统文件的硬链接,这是,假设B系统的文件B1的硬链接文件为A系统的A1。那么,理论上,他们具有相同的inode编号,如111,但是,假设此时A系统中本来就可能存在inode号为111的文件。假设此时想访问inode号为111的文件,那么久不知道到底是访问A系统的文件还是访问B系统的文件。

四、 总结:

软硬链接的相同点与区别:

相同点:

1.链接文件newfile在创建前都必须为空。

2.newfile和sourcefile的改变读会影响对方。

不同点:

1.软链接可以跨文件系统,硬链接不可以。

2.软链接可以对目录链接。

3.软链接可以对一个不存在的文件进行链接。

4. 硬链接通过inode访问文件,软链接不直接使用inode作为文件指针,而是使用文件路径名作为指针。

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

Linux深入理解重定向inode详解与软硬链接的概念及区别

Linux软硬链接

Linux基础-软硬连接Block概念

Linux课程笔记 软硬链接

Linux中软硬链接那些事儿

Linux系统编程:基础IO 下dup2 实现输出重定向输入重定向追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接