linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。
硬链接:
在 Linux 中,多个文件名指向同一索引节点是存在的,所以硬连接指通过索引节点来进行的连接,即每一个硬链接都是一个指向对应区域的文件。
软链接:
软连接可以是任意文件或目录,可以链接不同文件系统的文件,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身,这一点类似于 Windows 操作系统下的快捷方式。
测试:
[root@iZ2ze3tzd3n3binlxkotjwZ home]# touch f1 #使用 touch 创建一个文件f1
[root@iZ2ze3tzd3n3binlxkotjwZ home]# ln f1 f2 #建立f1的硬链接f2
[root@iZ2ze3tzd3n3binlxkotjwZ home]# ls
cheng f1 f2 peng www
[root@iZ2ze3tzd3n3binlxkotjwZ home]# ln -s f1 f3 #创建f1的软链接f3
[root@iZ2ze3tzd3n3binlxkotjwZ home]# ll
total 12
drwxr-xr-x 2 root root 4096 Jul 20 13:37 cheng
-rw-r--r-- 2 root root 0 Jul 21 16:12 f1
-rw-r--r-- 2 root root 0 Jul 21 16:12 f2
lrwxrwxrwx 1 root root 2 Jul 21 16:14 f3 -> f1
drwxr-xr-x 2 root root 4096 Jul 20 22:11 peng
drwx------ 3 www www 4096 Jul 19 22:26 www
#可以看出f1和f2为普通文件,f3为链接
#给文件f1输入文本
[root@iZ2ze3tzd3n3binlxkotjwZ home]# echo "hello world" >>f1
#查看f1,f2,f3的内容
[root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f1
hello world
[root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f2
hello world
[root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f3
hello world
#删除文件f1,查看f2和f3的情况
[root@iZ2ze3tzd3n3binlxkotjwZ home]# rm -rf f1
[root@iZ2ze3tzd3n3binlxkotjwZ home]# ls
cheng f2 f3 peng www
[root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f2
hello world #f2硬链接存在
[root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f3
cat: f3: No such file or directory #f3软链接不存在,因为源文件删了,快捷方式也就不在了
主要区别、限制:
硬链接:
a:不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)
b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。
c:不能对不存在的文件创建硬链接,由原理即可知原因。
软链接:
a:可以对目录创建软链接,遍历操作会忽略目录的软链接。
b:可以跨文件系统
c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了
\