linux软连接和硬连接
inode
文件还有元数据部分,例如名字、权限等,这就需要一个结构inode来存放。
什么是 inode 呢?inode 的“i”是 index 的意思,其实就是“索引”,类似图书馆的索引区域。既然如此,我们每个文件都会对应一个 inode;一个文件夹就是一个文件,也对应一个 inode。
struct ext4_inode {
__le16 i_mode; /* File mode */
__le16 i_uid; /* Low 16 bits of Owner Uid */
__le32 i_size_lo; /* Size in bytes */
__le32 i_atime; /* Access time */
__le32 i_ctime; /* Inode Change time */
__le32 i_mtime; /* Modification time */
__le32 i_dtime; /* Deletion Time */
__le16 i_gid; /* Low 16 bits of Group Id */
__le16 i_links_count; /* Links count */
__le32 i_blocks_lo; /* Blocks count */
__le32 i_flags; /* File flags */
......
__le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
__le32 i_generation; /* File version (for NFS) */
__le32 i_file_acl_lo; /* File ACL */
__le32 i_size_high;
......
};
从这个数据结构中,我们可以看出,inode 里面有文件的读写权限 i_mode,属于哪个用户 i_uid,哪个组 i_gid,大小是多少 i_size_io,占用多少个块 i_blocks_io。咱们讲 ls 命令行的时候,列出来的权限、用户、大小这些信息,就是从这里面取出来的。
另外,这里面还有几个与文件相关的时间。i_atime 是 access time,是最近一次访问文件的时间;i_ctime 是 change time,是最近一次更改 inode 的时间;i_mtime 是 modify time,是最近一次更改文件的时间。
这里你需要注意区分几个地方。首先,访问了,不代表修改了,也可能只是打开看看,就会改变 access time。其次,修改 inode,有可能修改的是用户和权限,没有修改数据部分,就会改变 change time。只有数据也修改了,才改变 modify time。
我们平时使用的ls -l里面的数据其实就是取自inode。
硬连接和软连接
一种特殊的文件格式,硬链接(Hard Link)和软链接(Symbolic Link)。
ln [参数][源文件或目录][目标文件或目录]
#为a生成一个软连接a1
ln -s a a1
#为a生成一个硬连接a2
ln a a2
硬连接时,a2和a共用一个inode,ls时,a2文件和a信息是一样的。但是 inode 是不跨文件系统的,每个文件系统都有自己的 inode 列表,因而硬链接是没有办法跨文件系统的。
但是软连接就不一样了,a1是单独的inode节点。
-rw-rw-r-- 2 xingliuhua xingliuhua 0 Aug 27 17:21 a
lrwxrwxrwx 1 xingliuhua xingliuhua 1 Aug 27 17:22 a1 -> a
-rw-rw-r-- 2 xingliuhua xingliuhua 0 Aug 27 17:21 a2
还要注意,硬连接的开头并不是l,而软连接开头是l。
硬链接特点 具有相同inode节点号的多个文件互为硬链接文件; 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除; 只有删除了源文件和所有对应的硬链接文件,文件实体才会被删除; 硬链接文件是文件的另一个入口; 可以通过给文件设置硬链接文件来防止重要文件被误删; 创建硬链接命令 ln 源文件 硬链接文件; 硬链接文件是普通文件,可以用rm删除; 对于静态文件(没有进程正在调用),当硬链接数为0时文件就被删除。注意:如果有进程正在调用,则无法删除或者即使文件名被删除但空间不会释放。
软链接特点 软链接类似windows系统的快捷方式; 软链接里面存放的是源文件的路径,指向源文件; 删除源文件,软链接依然存在,但无法访问源文件内容; 软链接失效时一般是白字红底闪烁; 创建软链接命令 ln -s 源文件 软链接文件; 软链接和源文件是不同的文件,文件类型也不同,inode号也不同; 软链接的文件类型是“l”,可以用rm删除。
硬链接和软链接的区别
-
原理上,硬链接和源文件的inode节点号相同,两者互为硬链接。
-
软连接和源文件的inode节点号不同,进而指向的block也不同,软连接block中存放了源文件的路径名。所以才能打开时看到是源文件的内容。
-
使用限制上,不能对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软连接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。