LinuxSir.cn,穿越时空的Linuxsir!

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

硬连接和软连接的区别的讨论[附:ln中文文档]

[复制链接]
发表于 2003-8-28 20:23:48 | 显示全部楼层 |阅读模式
硬连接和软连接的区别

如题!有谁能解释一下,我总觉得硬连接和复制没什么区别,是这样码?
发表于 2003-8-28 22:50:15 | 显示全部楼层
简单地说吧。

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

因此,
硬连接不能跨不同的文件系统。
软连接能跨不同的文件系统。
发表于 2003-8-28 23:29:51 | 显示全部楼层
硬连接记录的是目标的 inode;
软连接记录的是目标的 path。
发表于 2003-8-29 12:50:06 | 显示全部楼层
楼上的是正解
发表于 2003-8-29 14:15:17 | 显示全部楼层
也可以理解吗?
硬连接是物理的连接方式,而软连接则是逻辑的:ask
 楼主| 发表于 2003-8-29 16:46:29 | 显示全部楼层
谢谢大家!软连接可以理解。那么硬连接就是文件和文件都拥有一个相同的节点号,如果是复制的话,这两个文件的节点号是不是就不一样拉?
还有,如果是硬连接,两个文件的文件名能不能不同呢?
发表于 2003-8-29 23:10:16 | 显示全部楼层
最初由 seablue 发表
简单地说吧。

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

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

硬连接的确说得不准确,修改一下:

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

而复制是建造一个一模一样的房子,当然地址(i-node)就不同的了。
发表于 2003-8-29 23:22:53 | 显示全部楼层
这样的讨论很不错的,欢迎!!!加个精华!--为了以后的兄弟!
发表于 2003-8-30 16:38:15 | 显示全部楼层
seablue's word is very vivid and correct!
发表于 2003-8-31 10:41:41 | 显示全部楼层
关于软硬连接的中文文档

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'),
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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