天天看点

[linux文件系统]软链接和硬链接前言总结

前言

插播一下文件的软硬链接,其实也与文件系统相关。理解了硬链接和软链接也能够更好的理解文件系统

硬链接,符号链接

  • 硬链接:不同的目录条目中指向相同的数据块内容
  • 符号链接:其目录条目中,存放的是另一个路径的文件名,文件大小为存放路径字符个数,权限都为777

硬链接

ln src dest

  • 只能对文件创建,不能应用与目录 避免循环引用
  • 目录硬链接的数是2
  • 不能跨文件系统,因为inode不同
  • 创建硬链接会增加文件被链接的次数
[ubpara link]$ls -il
总用量 8
660108 -rw-rw-r-- 1 ubpara ubpara    9 5月  14 19:41 a
660109 drwxrwxr-x 2 ubpara ubpara 4096 5月  14 19:42 test
[ubpara link]$ln a test/a
[ubpara link]$ls -il test/
总用量 4
660108 -rw-rw-r-- 2 ubpara ubpara 9 5月  14 19:41 a
[ubpara link]$ls -il
总用量 8
660108 -rw-rw-r-- 2 ubpara ubpara    9 5月  14 19:41 a
660109 drwxrwxr-x 2 ubpara ubpara 4096 5月  14 19:42 test
[ubpara link]$
           

在test中创建a的一个硬链接 其inode号不变,表示当前目录的文件a和test目录下的文件a都指向相同的数据块。

660108 -rw-rw-r-- 2 ubpara ubpara    9 5月  14 19:41 a
2 代表硬链接数,从1变为2,若删除其中一个,硬链接数减1
           

软链接,符号链接

ln -s -v src dest

  • 可应用与目录
  • 可以跨文件系统
  • 不会增加被链接文件的链接次数
  • 其大小为其执行的路径所包含的字符个数
[ubpara link]$pwd
/home/ubpara/link
[ubpara link]$ln -sv /home/ubpara/link/a test/a
'test/a' -> '/home/ubpara/link/a'
[ubpara link]$ls -il test/
总用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月  14 19:50 a -> /home/ubpara/link/a
[ubpara link]$ls -il .
总用量 8
660108 -rw-rw-r-- 1 ubpara ubpara    9 5月  14 19:41 a
660109 drwxrwxr-x 2 ubpara ubpara 4096 5月  14 19:50 test
[ubpara link]$
           

在test目录下创建a的软链接,其inode号不同,是因为其新建的"目录项"中的内容是 “/home/ubpara/link/a”,权限为777

注:创建软链接的时候,源文件需要为绝对路径,不然会以当前路径(目标文件所在的路径)来找其链接的文件,因为其目录项存放相对路径

进阶

[ubpara link]$ls
a  test
[ubpara link]$ls -il test/
总用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月  14 19:50 a -> /home/ubpara/link/a
[ubpara link]$cat test/a
hello
[ubpara link]$rm a
[ubpara link]$ls -il test/
总用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月  14 19:50 a -> /home/ubpara/link/a
[ubpara link]$cat test/a
cat: test/a: 没有那个文件或目录
[ubpara link]$echo goodbye > a
[ubpara link]$ls -il test/
总用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月  14 19:50 a -> /home/ubpara/link/a
[ubpara link]$cat test/a
goodbye
[ubpara link]$
           

若将a的原文件删除,那么a的链接就失效了,没有那个文件或目录。当在原路径中在创建一个新的文件a,因为在test目录下的a的"目录项"保存的路径是"/home/ubpara/link/a" 不变,所以链接又能成功

总结

硬链接文件有两个限制

  1. 只能对文件创建,不能应用与目录 避免循环引用
  2. 目录硬链接的数是2
  3. 不能跨文件系统,因为inode不同
  4. 创建硬链接会增加文件被链接的次数

软链接:

  1. 可应用与目录
  2. 可以跨文件系统
  3. 不会增加被链接文件的链接次数
  4. 其大小为其执行的路径所包含的字符个数