LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 03-08-28, 20:23 第 1 帖
seazon
 
seazon 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: 上海
  帖子: 78
  精华: 1
 

标题: 硬连接和软连接的区别


硬连接和软连接的区别

如题!有谁能解释一下,我总觉得硬连接和复制没什么区别,是这样码?







__________________
努力的小鸟一定能翱翔在浩瀚的天空。

相信自己,努力奋斗,一定能到达成功的颠峰!
  seazon 当前离线   回复时引用此帖
旧 03-08-28, 22:50 第 2 帖
seablue
 
seablue 的头像
 
 
注册会员  
  注册日期: Apr 2003
  我的住址: 银河系
  帖子: 999
  精华: 3
 

简单地说吧。

几个硬连接=几个拷贝, 所以源文件被删除后,还有几个备份。
几个软连接=几个指向源文件的路标, 所以源文件被删除后,虽然有路标但房子已经不在了,你再也拿不到东西了。

因此,
硬连接不能跨不同的文件系统。
软连接能跨不同的文件系统。

此帖于 03-08-28 22:54 被 seablue 编辑.
  seablue 当前离线   回复时引用此帖
旧 03-08-28, 23:29 第 3 帖
idkey
 
idkey 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 366
  精华: 1
 

硬连接记录的是目标的 inode;
软连接记录的是目标的 path。







__________________
我是 xyb 的马甲,呵呵

...."Have you mooed today?"...
  idkey 当前离线   回复时引用此帖
旧 03-08-29, 12:50 第 4 帖
cx6445
 
 
 
注册会员  
  注册日期: Feb 2003
  帖子: 414
  精华: 0
 

楼上的是正解
  cx6445 当前离线   回复时引用此帖
旧 03-08-29, 14:15 第 5 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

也可以理解吗?
硬连接是物理的连接方式,而软连接则是逻辑的:ask
  KornLee 当前离线   回复时引用此帖
旧 03-08-29, 16:46 第 6 帖
seazon
 
seazon 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: 上海
  帖子: 78
  精华: 1
 

谢谢大家!软连接可以理解。那么硬连接就是文件和文件都拥有一个相同的节点号,如果是复制的话,这两个文件的节点号是不是就不一样拉?
还有,如果是硬连接,两个文件的文件名能不能不同呢?
  seazon 当前离线   回复时引用此帖
旧 03-08-29, 23:10 第 7 帖
seablue
 
seablue 的头像
 
 
注册会员  
  注册日期: Apr 2003
  我的住址: 银河系
  帖子: 999
  精华: 3
 

引用:
最初由 seablue 发表
简单地说吧。

几个硬连接=几个拷贝, 所以源文件被删除后,还有几个备份。
几个软连接=几个指向源文件的路标, 所以源文件被删除后,虽然有路标但房子已经不在了,你再也拿不到东西了。

因此,
硬连接不能跨不同的文件系统。
软连接能跨不同的文件系统。
硬连接的确说得不准确,修改一下:

几个硬连接=几个名字的同一个房子,这些名字可以相同或不同但地址(i-node)是一样的, 所以硬连接被删除只是把相应名字抹去,只有最后一个名字被抹去你才会找不到房子。

而复制是建造一个一模一样的房子,当然地址(i-node)就不同的了。

此帖于 03-08-29 23:13 被 seablue 编辑.
  seablue 当前离线   回复时引用此帖
旧 03-08-29, 23:22 第 8 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

这样的讨论很不错的,欢迎!!!加个精华!--为了以后的兄弟!
  KornLee 当前离线   回复时引用此帖
旧 03-08-30, 16:38 第 9 帖
yangray
 
yangray 的头像
 
 
注册会员  
  注册日期: Aug 2003
  帖子: 64
  精华: 1
 

seablue's word is very vivid and correct!







__________________
Intel(R) Pentium IV 1.8GHz
512MB + 128MB DDR SDRAM
Intel(R) 80845 Chipset
Nvidia TnT2 M64 Video chip
40G Seagate U6 IDE disk & 250G Western Digital UATA disk
  yangray 当前离线   回复时引用此帖
旧 03-08-31, 10:41 第 10 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

关于软硬连接的中文文档

LN
Section: User Commands (1)
Updated: November 1998
Index Return to Main Contents

名字
ln -在文件之间建立连接

总览
ln [options] source [dest]
ln [options] source...directory

POSIX 选项:

[-f]

GNU 选项(缩写):

[-bdfinsvF] [-S backup-suffix] [-V {numbered, existing, simple}] [--help] [--version] [--]

描述

在Unix世界里有两个'link'(连接)概念,一般称之为硬连接和软连接。 一个硬连接仅仅是一个文件名。(一个文件可以有好几个文件名,只有将 最后一个文件名从磁盘上删除,才能把这个文件删掉。文件名的个数是由 ls(1)来确定的。所有的文件名都处于同一个状态,也就没有什么"源名字" 之说。通常文件系统里的一个文件的所有名字包含着一样的数据信息,不 过这样也不是必需的。)一个软连接(或符号连接)是完全不同的:它是 一个包含了路径信息的小小的指定文件。因此,软连接可以指向不同文件 系统里的文件(比如由NFS装载的不同机器文件系统上的文件),甚至可以 指向一个不一定确实存在的文件。在软连接文件被访问(系统调用open(2) 或stat(2))的时候,操作系统用该文件所包含的路径替换该文件的访问介 入点,从而实现对所指文件的访问。(用命令rm(1)和unlink(2)可以删除 连接,但不是删除该文件所指向的文件。系统指定调用lstat(2)和readlink(2) 来读取连接文件与其所指文件的状态。到底是对软连接文件操作,还是对被 指向文件操作,由于不同操作系统件存在不同的系统调用,而存在着差异。) ln 在文件间产生连接。缺省时,产生硬连接,有-s选项,则产生符号(软)连接。 如果仅仅只给出一个文件名,那么ln将在当前目录里产生这个文件的连接, 也就是说,以该文件(的最后一个)名称等同的名字在当前目录里产生一个连接 (GNU范围内); 如果最后一个参数是一个已存在的目录名, ln 将在那个目录里给每一个源文件用以与源文件相同的文件名产生连接, (不同情况见以下--no-dereference的描述); 如果只给出两个文件名,ln将产生源文件的连接; 如果最后一个参数不是一个目录名或多于两个文件名,则报错。 缺省时,ln不删除已存在的文件或符号连接。 (因此,它可以被用来锁定目标文件,即当dest已经不存在时) 但选项-f可以强制执行。 在已存在的实现中,只有超级用户才能建立目录的硬连接。 POSIX 禁止系统调用link(2)和ln建立目录的硬连接 (但是允许在不同的文件系统间建立硬连接)。

POSIX 选项

-f
删除已存在的目的文件。


GNU 选项

-d, -F, --directory
允许超级用户建立目录硬连接。
-f, --force
删除已存在的目的文件。
-i, --interactive
提示是否删除已存在的目的文件。
-n, --no-dereference
当所给出的目的文件名是一个目录的符号连接时,将其视为一般文件处理。 当目的目录名是一个确实存在的目录(不是一个符号连接)时, 不进行模糊处理,而在那个目录里建立连接。 但是当所指定的目的目录名是一个符号连接时, 有两种方式来对待用户的要求。 ln 会视目的为一个普通目录,并且在里面建立连接。 或者如同符号连接本身一样地视其为一个非目录。 这种情况下,ln 将在建立新连接之前删除或备份这个符号连接。 缺省地,把符号连接视为普通目录来对待。
-s, --symbolic
建立符号连接以替代硬连接。 在不支持符号连接的系统上,这个选项仅仅会产生一个错误提示而已。
-v, --verbose
在建立连接前显示所操作的文件名。


GNU 备份选项

对于想备份那些有可能被覆盖、改写或者被破坏的文件, GNU提供了比如:cp, mv, ln, install和patch等命令。 可以使用-b参数生成备份文件。备份文件的名称由-V参数指定。 假如备份文件的名称是通过原文件名加后缀而得到, 那么要用-S参数来指定这个后缀。
-b, --backup
备份文件。
-S SUFFIX,-suffix=SUFFIX
在备份文件后添加"SUFFIX"(你的后缀)。如果不使用该参数,则使用环境变量 SIM_PLE_BACHUP_SUFFIX,如果该环境变量没有设置,则缺省地使用'~'。
-V METHOD,-version-control=METHOD
指定备份文件如何命名。 参数"METHOD"可以是'numbered'(或't'),

此帖于 03-08-31 10:54 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-09-01, 09:42 第 11 帖
idkey
 
idkey 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 366
  精华: 1
 

在应用中的一点重要不同:
soft link 可以做跨分区的 link;而 hard link 由于 inode 的缘故,只能在本分区中做 link。因为这个,soft link 的使用频率要高的多。
  idkey 当前离线   回复时引用此帖
旧 03-09-02, 09:17 第 12 帖
seazon
 
seazon 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: 上海
  帖子: 78
  精华: 1
 

软连接可以跨分区建立。昨天,我突发奇想——从linux上建立一个软连接到windows分区上,于是我先挂栽windows分区,然后用ln -s file1 /mnt/windows/file1.但是系统报错,说不能建立,这是为什么啊?
我用cp命令可以从linux分区中复制1个文件到windows分区中。

谢谢!
seazon
  seazon 当前离线   回复时引用此帖
旧 03-09-02, 15:55 第 13 帖
seazon
 
seazon 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: 上海
  帖子: 78
  精华: 1
 

用ls -l查看了一下连接文件,发现硬连接的文件是一个普通文件,只有软连接才是连接文件。
  seazon 当前离线   回复时引用此帖
旧 03-09-03, 10:22 第 14 帖
seazon
 
seazon 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: 上海
  帖子: 78
  精华: 1
 

那硬连接又有那些好处呢?
  seazon 当前离线   回复时引用此帖
旧 03-09-03, 22:53 第 15 帖
idkey
 
idkey 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 366
  精华: 1
 

硬连接因为记录的是 inode,所以不怕改名,比如
ln /tmp/a /tmp/b
mv /tmp/a /tmp/othername
这时 /tmp/b 仍然可以访问,soft-link 就不行:sourc 的名字改变后,所有链接到这里的 soft-link 全部变为 broken。事实上,即使所有指向该 inode 的 hard-link 的文件名都变了,每一个仍然都可以访问。我想这是它最大的优点吧。
  idkey 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:57


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org