Linux系统中,有软连接和硬连接两种不同的文件链接方式。
硬连接是对文件的另一个目录项,所有硬连接都指向相同的inode,就好比一块存储数据的内存有着多个名字,每增加一个硬连接,连接数就会加一。当连接数为0时,相对应的内存就会被彻底删除。
软连接就好比Windows系统中的快捷方式,最终指向的是源文件,一旦源文件删除,则软连接失效,而且软连接和源文件有这个不同的inode号。
下面介绍ln命令基本用法,方便后面做演示。
硬连接: ln 源文件 连接文件
软连接: ln -s 源文件 连接文件
大家自行找位置创建测试文件,我这里使用的是/home/elf/work/test,分别创建hard.txt、soft.txt、source.txt文件,最后使用stat命令查看最终结果。
$ stat ./*
  File: ./hard.txt
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d Inode: 5279891     Links: 2
Access: (0644/-rw-r--r--)  Uid: ( 1000/     elf)   Gid: ( 1000/ forlinx)
Access: 2024-11-06 21:31:37.948957601 +0800
Modify: 2024-11-06 21:31:37.948957601 +0800
Change: 2024-11-06 21:34:43.967331843 +0800
Birth: 2024-11-06 21:31:37.948957601 +0800
  File: ./soft.txt -> source.txt
  Size: 10         Blocks: 0          IO Block: 4096   symbolic link
Device: 803h/2051d Inode: 5279903     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/     elf)   Gid: ( 1000/ forlinx)
Access: 2024-11-06 21:34:45.739296928 +0800
Modify: 2024-11-06 21:32:30.477947367 +0800
Change: 2024-11-06 21:32:30.477947367 +0800
Birth: 2024-11-06 21:32:30.477947367 +0800
  File: ./source.txt
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d Inode: 5279891     Links: 2
Access: (0644/-rw-r--r--)  Uid: ( 1000/     elf)   Gid: ( 1000/ forlinx)
Access: 2024-11-06 21:31:37.948957601 +0800
Modify: 2024-11-06 21:31:37.948957601 +0800
Change: 2024-11-06 21:34:43.967331843 +0800
Birth: 2024-11-06 21:31:37.948957601 +0800
上图中source.txt是源文件,hard.txt是硬连接文件,soft.txt是软连接文件。其中硬连接和源文件的inode号和连接数(Links)是一样的,这里因存在源文件和硬连接文件所以links数为2。软连接的inode数和link数与源文件都不一致,正好验证了前面的理论。
下面来说说硬连接和软连接的特点:
软连接:可以跨文件系统创建,并可以链接到目录。但删除源文件会导致符号链接失效(变成悬链接)。
硬连接:不能跨越文件系统创建,也不能链接到目录。但删除一个硬连接不影响其他硬连接或者源文件数据,直到最后一个硬连接被删除时,文件数据才会被清除。
创建软连接可以使用symlink()函数,创建硬连接文件可以使用link() 函数,下面就来介绍一下这两个函数。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.5  © 2001-2013 Comsenz Inc.