当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 9 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 硬链接和软链接
帖子发表于 : 2007-01-12 15:57 
头像

注册: 2006-11-11 10:23
帖子: 1226
地址: Mars
送出感谢: 0 次
接收感谢: 0 次
在man和下面这篇文章里拼出了点东东
http://www.linuxsir.org/main/?q=node/196

在Unix世界里有两个’link’(链接)概念,一般称之为硬链接和软链接。
在学习link之前,先了解一下inode和block的概念。inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件的类型和权限属性,属主,属组,文件大小,修改日期等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据inode值能最快的找到相对应的文件。
用ls可以查看文件的inode值
代码:
$ touch goodluck
$ ls -li
32908 -rw-r--r-- 1 ubuntu ubuntu    0 2007-01-12 00:20 goodluck

32908 就是文件goodluck的inode值。

硬链接
一个硬链接仅仅是一个文件名。(一个文件可以有好几个文件名,只有将 最后一个文件名从磁盘上删除,才能把这个文件删掉。文件名的个数是由 ls(1)来确定的。所有的文件名都处于同一个状态,也就没有什么源名字 之说。通常文件系统里的一个文件的所有名字包含着一样的数据信息,不 过这样也不是必需的。)
在Linux 文件系统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。
代码:
$ ls -li
32908 -rw-r--r-- 1 ubuntu ubuntu    0 2007-01-12 00:20 goodluck
$ ln goodluck goodluck1
$ ls -li
32908 -rw-r--r-- 2 ubuntu ubuntu    0 2007-01-12 00:20 goodluck
32908 -rw-r--r-- 2 ubuntu ubuntu    0 2007-01-12 00:20 goodluck1

由上面的代码可以看到,为文件goodluck创建一个硬链接goodluck1,两个文件的inode值都是32908,即两个文件用同一个inode值,而文件链接的个数由1变成了2。硬链接的文件是互为链接的,并没有所谓谁是源文件的说法。删除任何一个硬链接文件,并不会对跟它互为链接的文件产生任何影响。但是如果对文件进行修改,互为链接的文件也会跟着修改。在上面代码的基础上:
代码:
$ echo 'hello world!'>goodluck
$ cat goodluck1
hello world!
$ ls -li
35159 -rw-r--r-- 2 ubuntu ubuntu   13 2007-01-12 14:06 goodluck
35159 -rw-r--r-- 2 ubuntu ubuntu   13 2007-01-12 14:06 goodluck1

修改goodluck,在里面写入"hello world!",可以看到goodluck1里也写入了"hello world!",再用ls -li查看,可以看到两个文件的大小和修改日期一样的都改变了。
代码:
$ rm goodluck1
$ ls -li
35159 -rw-r--r-- 1 ubuntu ubuntu   13 2007-01-12 14:06 goodluck

删除了goodluck1之后,goodluck完全没有变化,不过链接的个数变成了1.

另外注意:硬链接不可以跨文件系统,而且只可以对文件做链接,不可以对目录做链接。

软链接
软链接(也叫符号链接)是 一个包含了路径信息的小小的指定文件。因此,软链接可以指向不同文件系统里的文件(比如由NFS装载的不同机器文件系统上的文件),甚至可以 指向一个不一定确实存在的文件。在软链接文件被访问(系统调用open(2) 或stat(2))的时 候, 操 作 系 统 用 该 文件所包含的路径替换该文件的访问介 入点,从而实现对所指文件的访问。(用命令rm(1)和unlink(2)可以删除 链接,但不是删除该文件所指向的文件。系统指定调用lstat(2)和readlink(2) 来读取链接文件与其所指文件的状态。到底是对软链接文件操作,还是对被 指向文件操作,由于不同操作系统件存在不同的系统调用,而存在着差异。)
代码:
$ touch goodluck
$ ln -s goodluck goodluck2
$ ls -li
36277 -rw-r--r-- 1 ubuntu ubuntu    0 2007-01-12 14:06 goodluck
36279 lrwxrwxrwx 1 ubuntu ubuntu    8 2007-01-12 14:26 goodluck2 -> goodluck

创建一个文件goodluck,并做一个符号链接goodluck2。可以看到,goodluck和goodluck2两个文件的inode是不相同的,由goodluck2的文件类型和权限lrwxrwxrwx可以看到,goodluck2不是文件,它只是个链接,相当于一个路径。goodluck2 -> goodluck就是说goodluck2的源文件是goodluck。
当符号链接文件发生改变时,源文件也会跟着改变,但是如果源文件被删除了,符号链接也就不存在意义了,也就是所谓的断链。
代码:
$ echo 'hello world!'>goodluck2
$ cat goodluck
hello world!
$ ls -l
-rw-r--r-- 1 ubuntu ubuntu   13 2007-01-12 14:39 goodluck
lrwxrwxrwx 1 ubuntu ubuntu    8 2007-01-12 14:38 goodluck2 -> goodluck
$ rm goodluck
$ cat goodluck2
cat: goodluck2: No such file or directory
lrwxrwxrwx 1 ubuntu ubuntu    8 2007-01-12 14:38 goodluck2 -> goodluck

当删除了goodluck后,goodluck2就成了断链。

注意:符号链接不仅可以对文件做链接,同样也适用于目录。要特别注意,对目录做符号链接跟对文件做符号链接有一点不同,当把符号链接目录中的文件删除了,也就是把源文件给删除了。而对于文件做的符号链接,删除符号链接文件并不会对源文件有任何影响。
代码:
$ mkdir goodluck
$ cd ./goodluck
$ touch goodluck1 goodluck2
$ cd ..
$ln -s ./goodluck/ ./luckgood
$ ls -li
36562 drwxr-xr-x 2 ubuntu ubuntu 4096 2007-01-12 14:52 goodluck
36657 lrwxrwxrwx 1 ubuntu ubuntu   11 2007-01-12 14:54 luckgood -> ./goodluc
$ rm ./luckgood/goodluck1
$cd ./goodluck
$ls -l
goodluck2

创建文件夹goodluck,在goodluck下建立两个文件goodluck1,goodluck2。给文件夹goodluck做符号链接luckgood,把符号链接文件夹里面的goodluck1删除,可以看到源文件./goodluck/goodluck1被删除了。


_________________
抬头望星空一片晴,我独行,夜已渐寒……


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-01-12 16:07 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
鼓励!
Cantonese?


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-01-12 19:02 

注册: 2006-10-05 23:20
帖子: 108
送出感谢: 0 次
接收感谢: 0 次

看了
不错啊


_________________
Windows与Linux双剑合壁


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-01-12 20:15 

注册: 2006-10-19 9:17
帖子: 466
送出感谢: 0 次
接收感谢: 0 次
虽然我看不懂,但还是支持......................................


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-01-13 17:49 
头像

注册: 2006-11-11 10:23
帖子: 1226
地址: Mars
送出感谢: 0 次
接收感谢: 0 次
Cantonese?
是指广东人还是广州人?
我在广州大学城


_________________
抬头望星空一片晴,我独行,夜已渐寒……


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-01-13 17:55 
头像

注册: 2006-11-11 17:14
帖子: 833
地址: 浙江宁波
送出感谢: 0 次
接收感谢: 0 次
看不懂,但是支持!!!


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-01-13 18:14 

注册: 2006-05-30 20:48
帖子: 524
送出感谢: 0 次
接收感谢: 0 次
了解了,谢谢。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 硬链接和软链接
帖子发表于 : 2011-07-27 13:20 

注册: 2011-07-26 19:01
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
:em11 受益。thanks


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 硬链接和软链接
帖子发表于 : 2011-11-18 23:57 

注册: 2011-10-02 23:28
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
恩,写得很详细, 不过有点还没提到,就是建立软连接时,链接的文件名一定要用绝对路径, 软连接建立后,可以用 "file+链接名"检测链接是否建立成功, 如果断链会出现"broken symbolic link to xxxx"的提示


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 9 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 0 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译