LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1468|回复: 4

请教硬链接和软链接的区别

[复制链接]
发表于 2007-10-2 15:32:32 | 显示全部楼层 |阅读模式
一直不明白硬链接和软链接之间的区别,是不是硬链接指向的是数据块,软链接指向的是文件?请高手指教,谢谢!
发表于 2007-10-2 17:33:28 | 显示全部楼层
硬连接相当于一个文件的Copy,你可以这样理解。删除任何一个文件都不会影响到另外一个文件。但硬连接不能连接目录,只能链接文件。
软连接可以理解为Windows操作系统里的快捷方式,起指向作用。但请注意,更改软连接的同时也会更改原文件的内容,这两者是同步的。
回复 支持 反对

使用道具 举报

发表于 2007-10-2 18:00:19 | 显示全部楼层

原理是这样的!

文件系统维护着一个分区的索引节点表索引节点也就是所谓的inode, 它其实就是代表这一个文件真实的数据块同样也记录着文件的其他属性如修改时间文件类型等

同样每个文件一般表示就是使用目录项(dirent), 每个目录项包含着该文件的名字,该文件指向的inode节点标号等,记住linux把目录和文件都用目录项来表示,真实的文件类型是在inode节点里面

新建一个硬连接其实也就是新建一个目录项指向目标目录项指向的inode节点,一个inode节点可以指向多个目录项, 如果一个inode节点所引用的目录项计数不为0,该文件的真实数据是不会被
释放的,当计数为零且没有进程使用时内核自动释放该文件的数据,所以如果删除了一个硬连接,
也只是删除了一个目录项,如果那个inode节点还执行其他的目录项,该文件的真实数据是不会被删除的,其实我们平时删除一个文件实际上调用的操作也就是unlink

新建一个符号连接其实也新建了一个目录项,所以一个符号连接的名字可以和源目标不同,但这个符号连接的目录项里指向的inode节点里面的文件数据指针其实是指向该符号连接所引用的文件的真实地址, 如:
     ln -s /etc/profile ./ss
这里ss只是该符号连接文件在目录项里面的名字,而该目录项里面inode节点里面的文件数据指针指向的数据就是"/etc/profile"这个路径值, 且inode节点里面的文件类型是符号连接,
所以系统在使用这类文件时就知道读取符号连接文件的真实数据也就是源地址。

系统是不允许普通用户创建目录的硬连接,因为硬连接可能造成循环,这样的硬连接很难删除很容易造成文件系统的混乱,如下面的错误操作:
mkdir test
ln test test/test
只有root用户才能创建目录的硬连接


这样讲明白了吧!!
回复 支持 反对

使用道具 举报

发表于 2007-10-3 22:30:59 | 显示全部楼层
楼上两位说的很清楚了,咱就没什么好说的了
回复 支持 反对

使用道具 举报

发表于 2007-10-30 22:25:34 | 显示全部楼层
硬连接在复制的时整个文件会被复制,符号连接复制节本上失效了!
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表