当前位置: 首页 > Linux

Linux中的硬链接和软链接

时间:2023-04-06 21:22:43 Linux

inode在Unix系统中,文件的存储分为两部分,一是数据块(datablock),用于保存文件中存储的数据。另一部分称为索引节点(inode),用于存储文件的大小、创建日期、读写权限等信息,这部分信息称为文件的“元数据”.inode包含文件的以下信息:文件数据块的位置,文件的字节数,文件所有者的用户ID,文件的GroupID,读、写的时间戳,以及执行权限文件,共有三种:ctime指的是inode发生变化的时间,mtime指的是文件内容最后一次改变的时间,atime指的是文件最后一次打开的时间。链接数,即有多少个文件名指向这个inode在Linux系统中,每个inode都有自己唯一的inode号,通过ls-i命令可以显示文件的inode号操作系统使用inode编号来标识唯一的文件而不是文件名,文件名只是inode编号的'昵称',便于用户记忆。一个文件可以有多个文件名,但一个文件的inode号是唯一的。inode号和block数据是分开存放的,所以有时候一个分区还有空间,但是操作系统提示分区已满,无法写入。这种情况可能是当前分区的inode号已经用完了,造成这种情况的原因可能是当前分区有大量占用空间小的文件。硬链接和软链接硬链接(hardlink)上面说了,文件名只是inode号的昵称,一个inode号可以有多个昵称或别名。每个别名都是一个指向该inode号对应文件的硬链接,也就是说一个硬链接相当于一个文件的别名。可以使用link或ln命令创建硬链接。lnFileAFileB上面的命令会创建一个文件A的硬链接文件B,文件B相当于文件A的一个别名,指向同一个文件。硬链接具有以下特点:文件具有相同的inode和datablock;不能创建目录,只能创建文件;不能跨文件系统创建硬链接;删除硬链接文件不会影响其他具有相同inode编号的文件。为什么我不能创建指向目录的硬链接?我们知道目录在linux中也是一种文件,里面包含了一个关联列表。其实在创建目录的时候,会自动创建多个硬链接,其中“.”是它自己的硬链接,“..”是它的父目录的硬链接。所以一个目录至少有2个硬链接(一个指向它自己,一个从父目录指向它)。也就是说,子目录到其父目录的每个硬链接都会+1(子目录的“..”)。所以如果你创建了一个目录的硬链接,操作系统会认为已经创建了一个子目录,所以硬链接指向的目标目录的“..”就会指向这个目录。这样会导致遍历时逻辑混乱,甚至死循环。软链接(softlink)软链接也叫符号链接(symboliclink),软链接不同于硬链接,软链接是一个普通的文件,有自己独立的inode号和数据块,但是在软的数据块中link存储的是源文件的路径。使用以下命令创建软链接:ln-sFileAFileB上面的命令将创建FileA的软链接FileB。创建软链接不会增加FileA的inode号的连接数,因为软链接指向的是源文件的文件名,而不是源文件的inode号,软链接的存在形式类似于快捷方式在窗户里。软链接有以下特点:软链接有自己的文件属性和权限等;可以为不存在的文件或目录创建软链接;软链接可以跨文件系统;可以为文件或目录创建软链接;创建软链接,链接数不会增加;删除软链接不影响指向的文件,但是如果删除指向的原文件,则相关的软链接称为死链接,如果重新创建指向的路径文件,死链接可以恢复为正常的软链接。最后,硬链接和软链接的区别可以总结如下:linux中硬链接和软链接的区别在于,硬链接只是一个指向inode号的别名,没有inode号和数据块它们自己,而软链接有自己的inode号和数据块硬链接只能为现有文件创建,软链接可以为不存在的文件创建,源文件可以稍后创建。硬链接不能跨系统创建,而软链接可以。不能在目录上创建硬链接,但可以创建软链接。创建硬链接会增加文件的连接数,而软链接则不会。删除软链接不会删除文件。删除硬链接时,如果剩余硬链接数大于0,文件不会被删除。如果一个文件的所有硬链接都被删除,则该文件将被删除。参考文献王华东,理解Linux硬链接和软链接[EB\OL].https://www.ibm.com/developer...阮一峰,理解inodes[EB\OL].http://www.ruanyifeng.com/blo…