当前位置: 代码迷 >> 综合 >> Linux 硬链接软链接
  详细解决方案

Linux 硬链接软链接

热度:71   发布时间:2023-10-22 12:39:11.0

LINUX 下的链接文件有点类似于Windows的快捷方式,但又不完全一样。

链接文件有两种:一种是硬链接,另一种是符号链接(又称软链接)。

硬链接类似于复制了一个新的文件,这个文件不会随着源文件的丢失/修改而无法读取或者出现问题。

但是软连接类似于windows的快捷方式,新的数据块中存放的内容是另一文件的路径名的指向,所以源文件的丢失/修改都会影响新的链接。

ln(link)创建链接,表示生成一个硬链接文件,-s表示生成软链接文件。

  软链接 硬链接
修改源文件 可以访问到 同步修改
删除源文件 无法访问 可以访问
文件类型 文件类型为l 需要查看inode,和源文件用同一inode
大小 很小 和源文件一样大
修改时间 新建时间 与源文件相同
访问权限 全开,但能否访问取决于源文件 和源文件相同
限制   不能跨分区建立、不能针对目录使用
箭头标识 详细信息中有箭头标识  

硬链接

[root@Zabbix py]# ll
total 4
-rw-r--r-- 1 root root 39 Jan 12 18:52 hello.py
[root@Zabbix py]# python hello.py 
hello world
[root@Zabbix py]# 
[root@Zabbix py]# ln hello.py /linkhello.py
[root@Zabbix py]# cd /
[root@Zabbix /]# ll
total 72
lrwxrwxrwx    1 root root     7 Feb  2  2016 bin -> usr/bin
dr-xr-xr-x.   4 root root  4096 Feb  2  2016 boot
drwxr-xr-x   20 root root  3020 Nov 17 17:46 dev
drwxr-xr-x.  81 root root  4096 Nov 17 17:43 etc
drwxr-xr-x.   3 root root  4096 Jun 30  2020 home
lrwxrwxrwx    1 root root     7 Feb  2  2016 lib -> usr/lib
lrwxrwxrwx    1 root root     9 Feb  2  2016 lib64 -> usr/lib64
-rw-r--r--    2 root root    39 Jan 12 18:52 linkhello.py
drwx------.   2 root root 16384 Jul 11  2014 lost+found
drwxr-xr-x.   2 root root  4096 Aug 12  2015 media
drwxr-xr-x.   2 root root  4096 Aug 12  2015 mnt
-rw-r--r--    1 root root    39 Jan 12 17:36 newhello.py
drwxr-xr-x.   3 root root  4096 Jun 29  2020 opt
dr-xr-xr-x  148 root root     0 Nov 17 17:42 proc
-rw-r--r--    1 root root    39 Jan 12 18:49 py
dr-xr-x---.   5 root root  4096 Jan 12 17:33 root
drwxr-xr-x   23 root root   660 Jan 12 16:48 run
lrwxrwxrwx    1 root root     8 Feb  2  2016 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 Aug 12  2015 srv
dr-xr-xr-x   13 root root     0 Nov 17 17:42 sys
drwxrwxrwt.  10 root root  4096 Jan 12 03:52 tmp
drwxr-xr-x.  13 root root  4096 Jan 12 18:40 usr
drwxr-xr-x.  20 root root  4096 Nov 17 17:42 var
[root@Zabbix /]# python linkhello.py 
hello world
[root@Zabbix /]# 

在创建硬链接后,源文件和link文件都可读可写,

查看源文件NODE,发现NODE为2,

[root@Zabbix py]# ls -il
total 4
1443459 -rw-r--r-- 2 root root 39 Jan 12 18:52 hello.py
[root@Zabbix py]#

修改源文件

[root@Zabbix py]# vi hello.py 
[root@Zabbix py]# python hello.py 
hello worldthis is a link file
[root@Zabbix py]# 
[root@Zabbix py]# 
[root@Zabbix py]# 

修改后,查看link文件并执行,

link文件和源文件的文件序号一致。

[root@Zabbix /]# ls -il 
total 7214 lrwxrwxrwx    1 root root     7 Feb  2  2016 bin -> usr/bin917506 dr-xr-xr-x.   4 root root  4096 Feb  2  2016 boot1025 drwxr-xr-x   20 root root  3020 Nov 17 17:46 dev655361 drwxr-xr-x.  81 root root  4096 Nov 17 17:43 etc
1048578 drwxr-xr-x.   3 root root  4096 Jun 30  2020 home17 lrwxrwxrwx    1 root root     7 Feb  2  2016 lib -> usr/lib13 lrwxrwxrwx    1 root root     9 Feb  2  2016 lib64 -> usr/lib64
1443459 -rw-r--r--    2 root root    71 Jan 12 19:02 linkhello.py11 drwx------.   2 root root 16384 Jul 11  2014 lost+found
1179651 drwxr-xr-x.   2 root root  4096 Aug 12  2015 media131074 drwxr-xr-x.   2 root root  4096 Aug 12  2015 mnt
1443461 -rw-r--r--    1 root root    39 Jan 12 17:36 newhello.py262146 drwxr-xr-x.   3 root root  4096 Jun 29  2020 opt1 dr-xr-xr-x  149 root root     0 Nov 17 17:42 proc16 -rw-r--r--    1 root root    39 Jan 12 18:49 py917505 dr-xr-x---.   5 root root  4096 Jan 12 17:33 root1152 drwxr-xr-x   23 root root   660 Jan 12 16:48 run15 lrwxrwxrwx    1 root root     8 Feb  2  2016 sbin -> usr/sbin
1048579 drwxr-xr-x.   2 root root  4096 Aug 12  2015 srv1 dr-xr-xr-x   13 root root     0 Nov 17 17:42 sys
1179649 drwxrwxrwt.  10 root root  4096 Jan 12 03:52 tmp786434 drwxr-xr-x.  13 root root  4096 Jan 12 18:40 usr393217 drwxr-xr-x.  20 root root  4096 Nov 17 17:42 var
[root@Zabbix /]# python linkhello.py 
hello worldthis is a link file
[root@Zabbix /]# 

link文件同步修改。

 

 

软链接

root@Zabbix ~]# ln -s /root/py/hello.py /root/slin.py
[root@Zabbix ~]# cd /root/
[root@Zabbix ~]# 
[root@Zabbix ~]# 
[root@Zabbix ~]# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 12 19:33 py
lrwxrwxrwx 1 root root   17 Jan 12 19:34 slin.py -> /root/py/hello.py
-rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reuse~
-rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reusy~
-rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reusz~
[root@Zabbix ~]# python slin.py 
hello world
[root@Zabbix ~]# 
[root@Zabbix ~]# ls -il
total 16
1443458 drwxr-xr-x 2 root root 4096 Jan 12 19:33 py921809 lrwxrwxrwx 1 root root   17 Jan 12 19:34 slin.py -> /root/py/hello.py921806 -rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reuse~921808 -rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reusy~921807 -rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reusz~
[root@Zabbix ~]# 

 

文件号已经改变,说明已经是两个文件。

[root@Zabbix ~]# cd /root/py
[root@Zabbix py]# 
[root@Zabbix py]# ll
total 4
-rw-r--r-- 2 root root 39 Jan 12 19:19 hello.py
[root@Zabbix py]# 
[root@Zabbix py]# rm hello.py 
rm: remove regular file ‘hello.py’? y
[root@Zabbix py]# ll
total 0
[root@Zabbix py]# 

将源文件删除

执行运行链接后的文件

[root@Zabbix ~]# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 12 19:37 py
lrwxrwxrwx 1 root root   17 Jan 12 19:34 slin.py -> /root/py/hello.py
-rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reuse~
-rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reusy~
-rw-r--r-- 1 root root    2 Jul  6  2020 tcp_tw_reusz~
[root@Zabbix ~]# python slin.py 
python: can't open file 'slin.py': [Errno 2] No such file or directory
[root@Zabbix ~]# 

无法执行,找不到文件。

file看一下

[root@Zabbix ~]# file slin.py 
slin.py: broken symbolic link to `/root/py/hello.py'
[root@Zabbix ~]# 

损坏的软链接。