12-4 硬链接与软连接
2016.6.25
12-4-1硬链接(hard link)
- 一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名
- 但是linux系统允许多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容
ln命令可以创建硬链接:
ln 源文件 目标文件
- 运行这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中的“连接数”这时就会增加1
12-4-2软连接(symblic link)
- 文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件 B的路径。读取文件A时,系统会自动将访问者导向文件B。这时文件A就成为文件B的“软连接”(soft link)或者“符号链接”(symbolic link)
- 这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错
- 这时软连接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode“连接数”不会因此发生变化
- 创建命令:
ln -s 源文件或目录 目录文件或目录
创建硬链接1:ln install.log install.log_hln
[root@test2 ~]# ln install.log install.log_hln
[root@test2 ~]# ls -lh
total 113M
-rw-------. 1 root root 1.6K May 18 04:13 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4.0K Jun 23 11:18 Desktop
drwxr-xr-x. 2 root root 4.0K Jun 15 20:52 Documents
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Downloads
-rw-r--r-- 1 root root 9.6M Jun 4 14:23 etc.tar.gz
-rw-r--r-- 1 root root 104M Jun 15 20:51 home.bak.tar.gzip
-rw-r--r--. 2 root root 49K May 18 04:13 install.log
-rw-r--r--. 2 root root 49K May 18 04:13 install.log_hln
-rw-r--r--. 1 root root 9.8K May 18 04:11 install.log.syslog
-rw-r--r-- 1 root root 206 Jun 4 17:32 man2.txt
-rw-r--r-- 1 root root 206 Jun 4 17:35 man.txt
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Music
drwxr-xr-x 2 root root 4.0K Jun 10 21:21 mvtotrash
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Pictures
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Public
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Templates
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Videos
[root@test2 ~]#
创建硬链接2:ln install.log install.log_hln_3
[root@test2 ~]# ln install.log install.log_hln_3
[root@test2 ~]# ls -lh
total 113M
-rw-------. 1 root root 1.6K May 18 04:13 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4.0K Jun 23 11:18 Desktop
drwxr-xr-x. 2 root root 4.0K Jun 15 20:52 Documents
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Downloads
-rw-r--r-- 1 root root 9.6M Jun 4 14:23 etc.tar.gz
-rw-r--r-- 1 root root 104M Jun 15 20:51 home.bak.tar.gzip
-rw-r--r--. 3 root root 49K May 18 04:13 install.log
-rw-r--r--. 3 root root 49K May 18 04:13 install.log_hln
-rw-r--r--. 3 root root 49K May 18 04:13 install.log_hln_3
-rw-r--r--. 1 root root 9.8K May 18 04:11 install.log.syslog
-rw-r--r-- 1 root root 206 Jun 4 17:32 man2.txt
-rw-r--r-- 1 root root 206 Jun 4 17:35 man.txt
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Music
drwxr-xr-x 2 root root 4.0K Jun 10 21:21 mvtotrash
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Pictures
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Public
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Templates
drwxr-xr-x. 2 root root 4.0K May 25 01:00 Videos
[root@test2 ~]#
可以发现这里面硬链接数在增加,而且是同时的
删除硬链接:
[root@test2 ~]# rm -r install.log_hln_3
rm: remove regular file `install.log_hln_3'? y
查看删除是否成功:
[root@test2 ~]# ls -lh | grep install
-rw-r--r--. 2 root root 49K May 18 04:13 install.log
-rw-r--r--. 2 root root 49K May 18 04:13 install.log_hln
-rw-r--r--. 1 root root 9.8K May 18 04:11 install.log.syslog
[root@test2 ~]#
这里可以看到硬链接的数量在减少
想模仿视频当中的ks.cfg,来设置软连接
[root@test2 ~]# ls -l
total 115584
-rw-------. 1 root root 1578 May 18 04:13 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 Jun 23 11:18 Desktop
drwxr-xr-x. 2 root root 4096 Jun 15 20:52 Documents
drwxr-xr-x. 2 root root 4096 May 25 01:00 Downloads
-rw-r--r-- 1 root root 10061329 Jun 4 14:23 etc.tar.gz
-rw-r--r-- 1 root root 108117207 Jun 15 20:51 home.bak.tar.gzip
-rw-r--r--. 2 root root 49565 May 18 04:13 install.log
-rw-r--r--. 2 root root 49565 May 18 04:13 install.log_hln
-rw-r--r--. 1 root root 10033 May 18 04:11 install.log.syslog
-rw-r--r-- 1 root root 206 Jun 4 17:32 man2.txt
-rw-r--r-- 1 root root 206 Jun 4 17:35 man.txt
drwxr-xr-x. 2 root root 4096 May 25 01:00 Music
drwxr-xr-x 2 root root 4096 Jun 10 21:21 mvtotrash
drwxr-xr-x. 2 root root 4096 May 25 01:00 Pictures
drwxr-xr-x. 2 root root 4096 May 25 01:00 Public
drwxr-xr-x. 2 root root 4096 May 25 01:00 Templates
drwxr-xr-x. 2 root root 4096 May 25 01:00 Videos
没找到这个ks.cfg
因为我在root的家目录下面没有找到ks.cfg,所以我用Desktop来做实验
[root@test2 ~]# ls -l | grep Desktop
drwxr-xr-x. 3 root root 4096 Jun 23 11:18 Desktop
[root@test2 ~]#
错误的软连接语法:
[root@test2 ~]# ln -s D Desktop
[root@test2 ~]# ls -l | grep D
drwxr-xr-x. 3 root root 4096 Jun 25 18:06 Desktop
drwxr-xr-x. 2 root root 4096 Jun 15 20:52 Documents
drwxr-xr-x. 2 root root 4096 May 25 01:00 Downloads
[root@test2 ~]# ls -l
total 115584
-rw-------. 1 root root 1578 May 18 04:13 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 Jun 25 18:06 Desktop
drwxr-xr-x. 2 root root 4096 Jun 15 20:52 Documents
drwxr-xr-x. 2 root root 4096 May 25 01:00 Downloads
-rw-r--r-- 1 root root 10061329 Jun 4 14:23 etc.tar.gz
-rw-r--r-- 1 root root 108117207 Jun 15 20:51 home.bak.tar.gzip
-rw-r--r--. 2 root root 49565 May 18 04:13 install.log
-rw-r--r--. 2 root root 49565 May 18 04:13 install.log_hln
-rw-r--r--. 1 root root 10033 May 18 04:11 install.log.syslog
-rw-r--r-- 1 root root 206 Jun 4 17:32 man2.txt
-rw-r--r-- 1 root root 206 Jun 4 17:35 man.txt
drwxr-xr-x. 2 root root 4096 May 25 01:00 Music
drwxr-xr-x 2 root root 4096 Jun 10 21:21 mvtotrash
drwxr-xr-x. 2 root root 4096 May 25 01:00 Pictures
drwxr-xr-x. 2 root root 4096 May 25 01:00 Public
drwxr-xr-x. 2 root root 4096 May 25 01:00 Templates
drwxr-xr-x. 2 root root 4096 May 25 01:00 Videos
[root@test2 ~]# cd D
bash: cd: D: No such file or directory
并没有查看到D的软连接,当想要进入到D中的时候,提示没有这个目录。
正确的语法:
[root@test2 ~]# ln -s Desktop D
[root@test2 ~]# ls -l
total 115584
-rw-------. 1 root root 1578 May 18 04:13 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Jun 25 18:07 D -> Desktop
drwxr-xr-x. 3 root root 4096 Jun 25 18:06 Desktop
drwxr-xr-x. 2 root root 4096 Jun 15 20:52 Documents
drwxr-xr-x. 2 root root 4096 May 25 01:00 Downloads
-rw-r--r-- 1 root root 10061329 Jun 4 14:23 etc.tar.gz
-rw-r--r-- 1 root root 108117207 Jun 15 20:51 home.bak.tar.gzip
-rw-r--r--. 2 root root 49565 May 18 04:13 install.log
-rw-r--r--. 2 root root 49565 May 18 04:13 install.log_hln
-rw-r--r--. 1 root root 10033 May 18 04:11 install.log.syslog
-rw-r--r-- 1 root root 206 Jun 4 17:32 man2.txt
-rw-r--r-- 1 root root 206 Jun 4 17:35 man.txt
drwxr-xr-x. 2 root root 4096 May 25 01:00 Music
drwxr-xr-x 2 root root 4096 Jun 10 21:21 mvtotrash
drwxr-xr-x. 2 root root 4096 May 25 01:00 Pictures
drwxr-xr-x. 2 root root 4096 May 25 01:00 Public
drwxr-xr-x. 2 root root 4096 May 25 01:00 Templates
drwxr-xr-x. 2 root root 4096 May 25 01:00 Videos
[root@test2 ~]# cd D
[root@test2 D]# pwd
/root/D
对比软连接和目录的内容:
[root@test2 D]# ls
cpuburn-in D httpd-2.2.15.tar.gz untitled folder
cpuburn-in.tar.gz glibc-2.18-12mgc30.1.i686.rpm README webmin-1.690-1.noarch.rpm
[root@test2 D]# cd ../Desktop/
[root@test2 Desktop]# ls
cpuburn-in D httpd-2.2.15.tar.gz untitled folder
cpuburn-in.tar.gz glibc-2.18-12mgc30.1.i686.rpm README webmin-1.690-1.noarch.rpm
[root@test2 Desktop]#
可以看出来两个目录中的内容是一样的。
重新理解ln --help
[root@test2 ~]# ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
or: ln [OPTION]... TARGET (2nd form)
or: ln [OPTION]... TARGET... DIRECTORY (3rd form)
or: ln [OPTION]... -t DIRECTORY TARGET... (4th form)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
When creating hard links, each TARGET must exist. Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.
ln -s Desktop D 这里面Desktop就是TARGET LINK_NAME就是D