Linux软链接和硬链接

链接文件

在同一分区中,不能使用同一个节点编号。
同一个文件不允许由多个节点编号。

硬链接 ln

一个文件可以起多个文件名 相当于马甲
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
ln link的简写 创建链接的命令
硬链接创建的文件彼此之间没有依赖关系

硬链接特性

  • 创建硬链接会增加额外的记录项以引用文件
  • 对应于同一文件系统上一个物理文件
  • 每个目录引用相同的inode号
  • 创建时链接数递增
  • 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
  • 不支持对目录创建硬链接
[root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln1
[root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln2
[root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln3
[root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln4
[root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln5
[root@C8-1 ~]# ll -ih /boot/
total 131M
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfile
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln1
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln2
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln3
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln4
 309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln5

改一个文件,其余都改

[root@C8-1 ~]# echo {1..5}{a..b} >/boot/bigfileHln3
[root@C8-1 ~]# cat /boot/bigfile
1a 1b 2a 2b 3a 3b 4a 4b 5a 5b
[root@C8-1 ~]# cat /boot/bigfileHln5
1a 1b 2a 2b 3a 3b 4a 4b 5a 5b

删一个,文件不影响,Inodes数减,文件本身不变

符号链接(软链接)ln -s

相当于快捷方式 soft 可以跨分区 可以对文件夹
创建软链接,和原始文件根本不是一个文件,inodes不增加,像一个小名,
把原始文件删除,则软链接失效,依赖于原始文件
创建软链接的相对路径是相对于链接文件所在目录的相对路径

一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和原文件本质上不是同一个文件

软链接特点

  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录创建软链接
  • 可以跨分区的文件实现
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
  • 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
#绝对路径
ln -s /data/dir /data/dirlink
#相对路径
cd /data
ln -s ../data/dir /root/dirlink
rm -rf /data/dirlink #删除软链接本身,不会删除源目录内容
rm -rf /data/dirlink/ #删除源目录的文件,不会删除链接文件
#查看链接文件指向的原文件
readlink /data/dirlink

实际举例
软件的升级和回滚
使用软链接指向不同的文件夹
升级 指向高版本目录
回滚 指向原目录

很要命的小细节 删文件夹
删软链接不会影响到源文件夹
删软链接时 若加/ 则会删掉源文件夹内的文件

[root@C8-1 ~]# ll
total 0
[root@C8-1 ~]# mkdir /data/test/
[root@C8-1 ~]# touch /data/test/{1..10}.test
[root@C8-1 ~]# ln -s /data/test/1.test ./testSln1.test
[root@C8-1 ~]# ln -s /data/test/ ./testSln
[root@C8-1 ~]# ll
total 0
lrwxrwxrwx. 1 root root 11 Jun 20 05:06 testSln -> /data/test/
lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test

删除软链接练习

##在当前工作目录中创建 /data/test/文件夹的软链接
[root@C8-1 ~]# ln -s /data/test/ ./testSln
[root@C8-1 ~]# ll
total 0
lrwxrwxrwx. 1 root root 11 Jun 20 05:06 testSln -> /data/test/
lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
##删除刚创建的软链接
[root@C8-1 ~]# rm testSln
rm: remove symbolic link 'testSln'? y
##查看一下,软链接已删除
[root@C8-1 ~]# ll
total 0
lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
##重新创建软链接
[root@C8-1 ~]# ln -s /data/test/ ./testSln
[root@C8-1 ~]# ll
total 0
lrwxrwxrwx. 1 root root 11 Jun 20 05:08 testSln -> /data/test/
lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
##显示软链接文件夹中的内容
[root@C8-1 ~]# ls testSln
10.test  1.test  2.test  3.test  4.test  5.test  6.test  7.test  8.test  9.test
##直接删除软链接
[root@C8-1 ~]# rm testSln
rm: remove symbolic link 'testSln'? y
##查看一下源文件夹中的内容,并没有变化
[root@C8-1 ~]# ll /data/test/
total 0
-rw-r--r--. 1 root root 0 Jun 20 05:01 10.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 1.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 2.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 3.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 4.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 5.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 6.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 7.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 8.test
-rw-r--r--. 1 root root 0 Jun 20 05:01 9.test
##重新把软链接建立起来
[root@C8-1 ~]# ln -s /data/test/ ./testSln
##删除软链接的时候一不小心多加了一个斜杠 /
[root@C8-1 ~]# rm -rf testSln/
##再查看一下当前工作目录下,软链接并未被删除
[root@C8-1 ~]# ll
total 0
lrwxrwxrwx. 1 root root 11 Jun 20 05:09 testSln -> /data/test/
lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
##查看一下源目录,原目录下的文件已经被删除
[root@C8-1 ~]# ll /data/test/
total 0

软链接和硬链接的区别

  1. 本质:
    硬链接:本质是同一个文件
    软链接:本质不是同一个文件
  2. 跨设备
    硬链接:不支持
    软链接:支持
  3. inode
    硬链接:相同
    软链接:不同
  4. 链接数
    硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
    软链接:创建或删除,链接数不会变化
  5. 文件夹
    硬链接:不支持
    软链接:支持
  6. 相对路径
    硬链接:原始文件相对路径是相对于当前工作目录
    软链接:原始文件相对路径是相对于链接文件的相对路径
  7. 删除源文件
    硬链接:只是链接数减一,但链接文件的访问不受影响
    软链接:链接文件将无法访问
  8. 文件类型
    硬链接:和源文件相同
    软链接:链接文件,和源文件无关
* * * 胖并快乐着的死肥宅 * * *
原文地址:https://www.cnblogs.com/bpzblog/p/13169498.html