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


两者区别


results matching ""

    No results matching ""