Linux —— 软链接和硬链接

Posted 何翰宇

tags:

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

文章目录

一、引入知识

ls -l能显示出文件的详细信息,那么权限位后面的数字是什么意思呢?

  • 如果是目录:这个数字就表示目录里还有几个目录(包括隐藏目录...
  • 如果是文件:就表示该文件的连接数
[root@lamp tmp]# ll
total 0
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root  0 Jul 26 12:51 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
[root@lamp tmp]# ll -a dir
total 0
drwxr-xr-x 3 root root 18 Jul 26 12:52 .
drwxr-xr-x 3 root root 69 Jul 26 12:51 ..
drwxr-xr-x 2 root root  6 Jul 26 12:52 test

二、软链接

1.软连接的创建

1)文件创建软链接

语法:ln -s [源文件] [连接文件]

[root@lamp tmp]# ll
total 0
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root  0 Jul 26 12:51 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
[root@lamp tmp]# ln -s file1 test1
[root@lamp tmp]# ll
total 0
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root  0 Jul 26 12:51 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1

改变连接文件和源文件

[root@lamp tmp]# cat file1
[root@lamp tmp]# cat test1
[root@lamp tmp]# echo "hello" >> file1
[root@lamp tmp]# cat test1
hello
[root@lamp tmp]# echo "world" >> test1
[root@lamp tmp]# cat file1
hello
world

发现,改变链接文件源文件也会改变,同样改变源文件链接文件也会跟着改变

2)目录创建软链接

[root@lamp ~]# ln -s tmp dirtest
[root@lamp ~]# ll
lrwxrwxrwx   1 root root         3 Jul 26 13:05 dirtest -> tmp
drwxr-xr-x   3 root root        82 Jul 26 12:59 tmp

[root@lamp ~]# ll tmp
total 4
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root 12 Jul 26 13:01 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1

[root@lamp ~]# ll dirtest/
total 4
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root 12 Jul 26 13:01 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1

修改链接目录和源目录

[root@lamp ~]# ll tmp
total 4
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root 12 Jul 26 13:01 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
[root@lamp ~]# touch dirtest/test.c
[root@lamp ~]# ll tmp
total 4
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root 12 Jul 26 13:01 file1
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
-rw-r--r-- 1 root root  0 Jul 26 13:07 test.c


[root@lamp ~]# rm tmp/file1 -f
[root@lamp ~]# ll dirtest/
total 0
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 1 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
-rw-r--r-- 1 root root  0 Jul 26 13:07 test.c

改变链接目录源目录也会改变,同样改变源目录链接目录也会跟着改变

3. 删除软链接

文件直接把链接文件删除旧好了
如果是目录就使用unlink 目录名

[root@lamp tmp]# ll -i
total 0
 1655188 drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
52382236 -rw-r--r-- 1 root root  0 Jul 26 12:51 file2
52382237 -rw-r--r-- 1 root root  0 Jul 26 12:51 file3
52382238 -rw-r--r-- 1 root root  0 Jul 26 12:51 file4
52382239 lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
52382224 -rw-r--r-- 1 root root  0 Jul 26 13:07 test.c
[root@lamp tmp]# ln file2 test2
[root@lamp tmp]# ll -i
total 0
 1655188 drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
52382236 -rw-r--r-- 2 root root  0 Jul 26 12:51 file2
52382237 -rw-r--r-- 1 root root  0 Jul 26 12:51 file3
52382238 -rw-r--r-- 1 root root  0 Jul 26 12:51 file4
52382239 lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
52382236 -rw-r--r-- 2 root root  0 Jul 26 12:51 test2
52382224 -rw-r--r-- 1 root root  0 Jul 26 13:07 test.c

二、硬链接

1. 硬链接特点

  1. 文件内容相同
  2. 一个文件改变另一文件也跟着改变
  3. 删除一个文件不会影响其它硬链接
  4. inode号相同
  5. Linux中,不能直接对目录创建硬链接

2. 硬链接的创建

语法:ln [源文件] [链接文件名]

[root@lamp tmp]# ll -i
total 0
 1655188 drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
52382236 -rw-r--r-- 1 root root  0 Jul 26 12:51 file2
52382237 -rw-r--r-- 1 root root  0 Jul 26 12:51 file3
52382238 -rw-r--r-- 1 root root  0 Jul 26 12:51 file4
52382239 lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
52382224 -rw-r--r-- 1 root root  0 Jul 26 13:07 test.c
[root@lamp tmp]# ln file2 test2
[root@lamp tmp]# ll -i
total 0
 1655188 drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
52382236 -rw-r--r-- 2 root root  0 Jul 26 12:51 file2
52382237 -rw-r--r-- 1 root root  0 Jul 26 12:51 file3
52382238 -rw-r--r-- 1 root root  0 Jul 26 12:51 file4
52382239 lrwxrwxrwx 1 root root  5 Jul 26 12:59 test1 -> file1
52382236 -rw-r--r-- 2 root root  0 Jul 26 12:51 test2
52382224 -rw-r--r-- 1 root root  0 Jul 26 13:07 test.c

发现链接文件和源文件是的inode是相同的

3. 删除

发现删除源文件并不影响硬链接文件

[root@lamp tmp]# ll
total 0
drwxr-xr-x 3 root root 18 Jul 26 12:52 dir
-rw-r--r-- 2 root root  0 Jul 26 12:51 file2
-rw-r--r-- 1 root root  0 Jul 26 12:51 file3
-rw-r--r-- 1 root root  0 Jul 26 12:51 file4
-rw-r--r-- 2 root root  0 Jul 26 12:51 test2
-rw-r--r-- 1 root root  0 Jul 26 13:07 test.c
[root@lamp tmp]# echo "hello word" >> test2
[root@lamp tmp]# cat file2
hello word
[root@lamp tmp]# rm -f file2
[root@lamp tmp]# cat test2
hello word

3. 特殊硬链接

目录一般不能直接创建硬链接的
但系统中有一些特殊的连接,不是我们自己创建的.
我们说自己创建的硬链接是删除不影响的,但这是一定不能删除的

[root@lamp ~]# ll -id /etc/init.d/
50332840 drwxr-xr-x. 2 root root 83 Jul 24 15:17 /etc/init.d/
[root@lamp ~]# ll -id /etc/rc.d/init.d
50332840 drwxr-xr-x. 2 root root 83 Jul 24 15:17 /etc/rc.d/init.d

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

Linux中硬链接和软链接的区别与联系!

Linux命令——建立软链接和硬链接

Linux 下的软链接和硬链接

Linux软链接和硬链接

[转帖]Linux 下软链接和硬链接的区别

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