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 ~]#
损坏的软链接。