Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44584
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 14
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 08:58
文章分类
文章存档

2014年(31)

我的朋友

分类: C/C++

2014-05-06 17:02:37

原文地址:硬链接和软链接的区别 作者:BenRuan

硬链接和软连接的区别:

要说明这个问题,先说明下 liunx 下文件和目录的本质。
事实上,在 liunx 上,目录也是文件的一种,它是储存了一张表的文件。例如有一个叫程序的文件夹,里面有两个文件 1 2. 在那张目录表内。它的内容是这样的
名称 节点
1 338
2 228
那么什么是节点呢? c 语言我们都学过,我们简单地把节点号理解成一个数组的下标,把内存看成一个大数组,每个文件都可以看成一个数组中的一个元素,而知道了节点号,就可以找到了实质的文件内容。

有了以上的认识,就可以进一步地解释硬链接:
硬链接的书写格式是: ln 目标文件名 链接名
那么它的过程是怎么样的呢?
例如我们输入: ln 3 2
那么,在同个目录表下增加一项
名称 节点
1 338
2 228
3 228
这时候,文件 3 也指向了跟 2 一样的内存块,也就是说跟 2 的内容是完全一样的。
而软连接又是怎么回事呢?
这里得说明,软连接和硬链接也是特殊的文件,在 liunx 中的所有都是以文件表示的,软连接可以看成一个文本文件,它的内容是保存目标文件名的路径地址。
软连接的格式是 ln -s 目标文件名 链接名
例如输入 ln -s 4 2
它的执行过程是这样的,先把 2 文件的路径名复制到 4 ,执行 4 时,先从中读到 2 的路径名,找到 2 这个文件,然后执行 2. 所以对 4 文件的操作都是对 2 文件的操作。

上面说明了具体的原理。如果要通俗点理解。可以把硬链接当成源文件的副本,它显示跟源文件一样的大小但事实上却不占任何空间。 (够神奇吧)而软连接大可以理解出 windows 的快捷方式。 
 

硬链接和软链接的区别

链接文件
   
链接有两种方式,软链接和硬链接。

   1 软链接文件

  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
   
链接文件甚至可以链接不存在的文件,这就产生一般称之为 " 断链 " 的问题 ( 或曰 现象 ") ,链接文件甚至可以循环链接自己。类似于编程语言中的递归。
  用 ln -s 命令可以生成一个软连接,如下 :
   [root@linux236 test]# ln -s  source_file softlink_file
  在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
   2 硬链接文件
   info ln 命令告诉您,硬链接是已存在文件的另一个名字 (A "hard link" is another name for an existing file) ,这多少有些令人困惑。硬连接的命令是
   ln -d existfile newfile
  硬链接文件有两个限制
   1) 不允许给目录创建硬链接
   2) 只有在同一文件系统中的文件之间才能创建链接
  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。
   
这时,系统就 忘记 了它曾经是硬链接文件。而把他当成一个普通文件。
  两者之间的区别

    硬连接指通过索引节点来进行的连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号 (Inode Index)
   
Linux 中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件 , 以防止 误删 的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个 连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。

    软链接文件有点类似于 Windows 的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

  个人体会
   
软链接是另一个文件,作用可以理解为一个指针,作用在这个文件上的操作除了删除都直接转向实际指向文件,由于是一个真实的文件所以占用磁盘空间
   
硬链接可以认为不是一个文件,它只是实际文件的一个别名,它的作用是防止真实文件被误操作,给一个文件建立硬链接后,他们互为别名,删除其中任意一个,
   
只会删除该别名,实际文件并不会被删除。由于只是别名没有任何其他信息,所以并不占用原始文件大小的磁盘空间。

    octapult 寫到
   
這邊有關 inode 的部份似乎講反了。  
    hard link
並沒有另外建立一個 inode ,而是增加一個 directory entry ,內容為原始檔案的 inode number 、這個 hard link 的檔案名稱和其他相關資訊,所以 hard link inode number 跟原始檔案的 inode number 是一樣的。在建立 soft link 的時候才會建立一個新的 inode 指到原始檔案的 inode ,所以 soft link inode number 跟原始檔案的 inode number 不一樣。這也是為甚麼 hard link 只能指向同一個檔案系統裡面的檔案,因為每個檔案系統都有它自己一系列的 inode ,兩個不同的檔案系統可能有相同的 inode number soft link 具有完整的 pathname ,所以他可以跨越不同的檔案系統。

阅读(356) | 评论(0) | 转发(0) |
0

上一篇:ubuntu中显示vi的行数

下一篇:关于VFS

给主人留下些什么吧!~~