在unix系统中,文件的储存分为两个部分,一个是数据块(datablock),用来保存文件中储存的数据。另外一部分称为索引节点(inode),用来储存文件的大小、建立日期、读写权限等信息,这一部分信息被称为文件的“元数据”(metadata)。html
inode中包含了文件的以下信息:
文件数据block的位置node
文件的字节数linux
文件拥有者的User IDwindows
文件的Group ID操作系统
文件的读、写、执行权限unix
文件的时间戳,共有三个:ctime指inode上一次变更的时间,mtime指文件内容上一次变更的时间,atime指文件上一次打开的时间。code
连接数,即有多少文件名指向这个inodehtm
在linux系统中,每一个inode有本身的惟一inode号,能够经过ls -i命令显示文件的inode号blog
操做系统经过inode号码来标识惟一文件而不是文件名,文件名只是便于用户记忆的inode号的‘绰号’,一个文件能够有多个文件名,可是一个文件的inode号码是惟一的。
inode号和块数据是分开储存的,因此有的时候一个分区还有空间,可是操做系统却提示分区已满没法写入,这种状况下多是当前分区的inode号已经用完了,形成这种状况发生的缘由多是当前分区有大量的占空间较小的文件。索引
如上所述,文件名对inode号来讲只是一个绰号,一个inode号能够有多个绰号或者说是别名。每个别名就是该inode号对应的文件的一个硬连接,也就是说硬连接至关于一个文件的别名。
可使用link或者ln命令来建立硬连接。
ln FileA FileB
以上命令会建立一个文件A的硬连接文件B,文件B至关因而文件A的别名,指向同一个文件。
硬连接有以下特色:
文件有相同的 inode 及 data block;
不能对目录进行建立,只可对文件建立;
不能交叉文件系统进行硬连接的建立;
删除一个硬连接文件并不影响其余有相同 inode 号的文件。
为何不能对目录建立硬连接?咱们知道在linux中目录也是一种文件,其中包含关联列表。实际在建立目录时会自动建立多个硬连接其中"."是自身的硬连接,".."是其父目录的硬连接。因此一个目录的硬连接最少为2(指向自身的一个和父目录指向它的一个)。也就是说每有一个子目录其父目录的硬连接就会+1(子目录的”..")。因此若对目录建立一个硬连接操做系统会认为建立了一个子目录,因此该硬连接指向的目标目录的".."会指向该目录。这样会致使遍历的时候逻辑混乱,甚至会出现死循环。
软连接又称符号连接(symbolic link),软连接和硬连接不一样,软连接是一个普通的文件,拥有本身独立的inode号以及数据块,只不过软连接的数据块中存储的是源文件的路径。使用以下命令建立软连接:
ln -s FileA FileB
上面的命令会建立FileA的一个软连接FileB,建立软连接不会致使FileA的inode号的链接数增长,由于软连接指向源文件的文件名而不是源文件的inode号,软连接的存在形式相似于windows中的快捷方式。
软连接有以下几点特性:
软连接有本身的文件属性及权限等;
可对不存在的文件或目录建立软连接;
软连接可交叉文件系统;
软连接可对文件或目录建立;
建立软连接时,连接计数不会增长;
删除软连接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死连接,若被指向路径文件被从新建立,死连接可恢复为正常的软连接。
最后硬连接和软连接的区别可总结为:
linux的硬连接与软连接的区别为硬连接只是指向inode号的一个别称,自身不具备inode号和数据块,而软连接有自身的inode号和数据块
硬连接只能对存在的文件建立,软连接能够对不存在的文件建立,能够以后再建立源文件。
硬连接不能交叉系统建立,而软连接能够。
硬连接不可对目录建立,软连接能够。
建立硬连接会增长文件的链接数,软连接不会。
删除软连接不会删除文件,删除硬连接时若剩余硬连接数大于0不会删除文件,若某文件的全部硬连接都被删除,该文件会被删除。
王华东,理解 Linux 的硬连接与软连接[EB\OL].
https://www.ibm.com/developer...
阮一峰,理解inode[EB\OL].
http://www.ruanyifeng.com/blo...