一、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作为文件指针,而是使用文件路径名作为指针。
原文地址:http://blog.51cto.com/yy1109lll/2296515
时间: 2024-10-11 17:29:12