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

1、硬链接

在Linux中,每个文件都有一个索引节点号(Inode index); 多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。

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

 

2、测试硬链接

(1)创建方式: ln  file1  file2

root@ubuntu01:/home/test# seq 5 > a.txt
root@ubuntu01:/home/test# ls
a.txt
root@ubuntu01:/home/test# cat a.txt
1
2
3
4
5
root@ubuntu01:/home/test# ln a.txt b.txt     ## 创建a.txt的硬链接文件b.txt 
root@ubuntu01:/home/test# ls
a.txt  b.txt
root@ubuntu01:/home/test# cat b.txt
1
2
3
4
5
root@ubuntu01:/home/test# ll
total 16
drwxr-xr-x 2 root root 4096 3月  26 11:31 ./
drwxr-xr-x 6 root root 4096 3月  26 11:19 ../
-rw-r--r-- 2 root root   10 3月  26 11:31 a.txt
-rw-r--r-- 2 root root   10 3月  26 11:31 b.txt

 

(2)、硬链接和源文件的索引节点号一致

root@ubuntu01:/home/test# seq 5 > a.txt
root@ubuntu01:/home/test# ln a.txt b.txt   ## 创建a.txt的硬链接文件b.txt
root@ubuntu01:/home/test# seq 5 > c.txt
root@ubuntu01:/home/test# ls
a.txt  b.txt  c.txt
root@ubuntu01:/home/test# cat a.txt
1
2
3
4
5
root@ubuntu01:/home/test# cat b.txt
1
2
3
4
5
root@ubuntu01:/home/test# cat c.txt
1
2
3
4
5
root@ubuntu01:/home/test# ls -li       ## 硬链接文件的 文件节点索引号一致
total 12
532490 -rw-r--r-- 2 root root 10 3月  26 11:33 a.txt
532490 -rw-r--r-- 2 root root 10 3月  26 11:33 b.txt
532494 -rw-r--r-- 1 root root 10 3月  26 11:33 c.txt

 

(3)、硬链接防止文件误删,删除源文件或者链接文件并不影响文件内容

root@ubuntu01:/home/test# seq 5 > a.txt
root@ubuntu01:/home/test# ln a.txt b.txt   ## 创建硬链接
root@ubuntu01:/home/test# ls
a.txt  b.txt
root@ubuntu01:/home/test# ls -li
total 8
532490 -rw-r--r-- 2 root root 10 3月  26 11:36 a.txt
532490 -rw-r--r-- 2 root root 10 3月  26 11:36 b.txt
root@ubuntu01:/home/test# cat a.txt
1
2
3
4
5
root@ubuntu01:/home/test# cat b.txt
1
2
3
4
5
root@ubuntu01:/home/test# rm a.txt   ## 删除源文件,并不影响b.txt
root@ubuntu01:/home/test# ls
b.txt
root@ubuntu01:/home/test# cat b.txt
1
2
3
4
5

 

(4)、硬链接与复制的区别; 硬链接指向同一个文件; 复制是两个单独的文件

root@ubuntu01:/home/test# seq 5 > a.txt
root@ubuntu01:/home/test# ln a.txt b.txt   ## 硬链接
root@ubuntu01:/home/test# ls
a.txt  b.txt
root@ubuntu01:/home/test# ls -li
total 8
532490 -rw-r--r-- 2 root root 10 3月  26 11:38 a.txt
532490 -rw-r--r-- 2 root root 10 3月  26 11:38 b.txt
root@ubuntu01:/home/test# seq 5 > c.txt
root@ubuntu01:/home/test# ls
a.txt  b.txt  c.txt
root@ubuntu01:/home/test# cp c.txt d.txt     ## 复制
root@ubuntu01:/home/test# ls
a.txt  b.txt  c.txt  d.txt
root@ubuntu01:/home/test# echo "xxxxxxx" >> a.txt    ## 追加内容
root@ubuntu01:/home/test# echo "xxxxxxx" >> c.txt    ## 追加内容
root@ubuntu01:/home/test# cat a.txt
1
2
3
4
5
xxxxxxx
root@ubuntu01:/home/test# cat b.txt      ##对a.txt的修改直接影响b.txt; 说明两者指向同一个文件
1
2
3
4
5
xxxxxxx
root@ubuntu01:/home/test# cat c.txt
1
2
3
4
5
xxxxxxx
root@ubuntu01:/home/test# cat d.txt     ## 对c.txt的修改并不影响d.txt; 说明两者是单独的文件
1
2
3
4
5

 

3、软链接

       也叫符号连接, 类似于Windows的快捷方式, 是一个特殊的文件, 包含的有另一文件的位置信息

 

4、创建软连接方式

ln -s file1  file2

 

5、测试软链接

(1)、

root@ubuntu01:/home/test# seq 5 > a.txt
root@ubuntu01:/home/test# ls
a.txt
root@ubuntu01:/home/test# ln -s a.txt b.txt    ## 创建a.txt文件的软链接文件b.txt
root@ubuntu01:/home/test# ls
a.txt  b.txt
root@ubuntu01:/home/test# cat a.txt
1
2
3
4
5
root@ubuntu01:/home/test# cat b.txt
1
2
3
4
5
root@ubuntu01:/home/test# ls -li   ## 查看节点、文件类型
total 4
532490 -rw-r--r-- 1 root root 10 3月  26 11:50 a.txt               ## 普通文本文件
532494 lrwxrwxrwx 1 root root  5 3月  26 11:50 b.txt -> a.txt      ## 文件类型为l,表示为link文件

 

(2)、对源文件的删除,直接影响链接文件的使用

root@ubuntu01:/home/test# seq 5 > a.txt
root@ubuntu01:/home/test# ls
a.txt
root@ubuntu01:/home/test# ln -s a.txt b.txt   ## 创建软链接文件
root@ubuntu01:/home/test# ls
a.txt  b.txt
root@ubuntu01:/home/test# cat a.txt
1
2
3
4
5
root@ubuntu01:/home/test# cat b.txt
1
2
3
4
5
root@ubuntu01:/home/test# rm a.txt   ## 删除源文件
root@ubuntu01:/home/test# ls
b.txt
root@ubuntu01:/home/test# cat b.txt    ## 删除源文件后, 链接文件不可用
cat: b.txt: No such file or directory

 

posted @ 2022-03-26 11:42  小鲨鱼2018  阅读(229)  评论(0编辑  收藏  举报