LINUX学习笔记1 硬链接和软连接

文章转自http://wenku.baidu.com/view/698c70fbfab069dc502201e6.html

软链接文件 
  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题,链接文件甚至可以循环链接自己。类似于编程语言中的递归。 
命令格式: 
ln [-s] source_path target_path 
硬链接文件 
ln 命令告诉您,硬链接是已存在文件的另一个名字,硬连接的命令是 
ln -d existfile newfile 
引用: 
硬链接文件有两个限制 
  1、不允许给目录创建硬链接; 
  2、只有在同一文件系统中的文件之间才能创建链接。 
  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改 
$umask 022 
$ cp /etc/httpd/conf/httpd.conf /usr/sam 
原来前面做的试验,改变了系统默认的umask值,现在改回来为022, 
举个httpd.conf文件做例 子 
$ ln httpd.conf httpd1.conf 
$ ln -s httpd.conf httpd2.conf 
第一条为硬链接,第二条为软链接 
$ ls –l

1077669   -rw-r--r--    2 sam      adm         34890 10月 31 00:57 httpd1.conf 
1077668  lrwxrwxrwx    1 sam      adm            10 10月 31 00:58 httpd2.conf ->; httpd.conf 
1077669  -rw-r--r--    2 sam      adm         34890 10月 31 00:57 httpd.conf 
可以看到,使用ls -l,软连接只产生了10字节的快捷而已,硬连接却实实在在的的拷贝。最前面的inode硬链接和源文件是一样的,而软链接不一样,具体看一下回复 
对http1.conf进行编辑,可以发现httpd.conf也发生了一样的变化 
$ rm httpd.conf 
现在删除链接的源文件,来比较不同之处 
$ ls -l 
总用量 44 
drw-r--r--    2 sam      adm          4096 10月 30 20:14 file6 
-rw-r--r--    1 sam      adm         34890 10月 31 00:57 httpd1.conf 
lrwxrwxrwx    1 sam      adm            10 10月 31 00:58 httpd2.conf ->; httpd.conf 
发现,httpd2.conf实际已经不存在了,是断链,而httpd1.conf变也了普通文件,其实只有软连接才算是真正的连接文件(可以从文件的类型中看出)

索引节点、硬连接和连接计数 
索引节点inode:
 
引用:Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。
例如: 
假设我们在硬盘当前目录下建立了一个名为mytext文本文件,其内容只有一行: 

This is my file. 

1、当然这行文字一定是存储在磁盘数据区某个具体位置里(物理上要通过磁头号、柱面号和扇区号来描述,在本例中假设分别是1、20、30)。 

2、假设其inode是262457,那么系统通过一段标准程序,就能将这个inode转换成存放此文件的具体物理地址(1磁头、20柱面、30扇区),最终读出文件的内容:“This is my file.” 

3、所以inode是指向一个文件数据区的指针号码,一个inode对应着系统中唯一的一片物理数据区,而位于两个不同物理数据区的文件必定分别对应着两个不同的inode号码。 

文件拷贝命令与硬链接的区别: 

# cp /home/zyd/mytext newfile 

在当前工作目录建立了一个新文件newfile,其实际操作主要包括如下三步:
引用:1、在当前目录中增加一个目录项,其文件名域填入newfile,并分配了一个新的inode,假设是262456。 
2、将原文件(在1磁头、20柱面、30扇区)的内容复制了一份到新的空闲物理块(假设是1磁头、20柱面、31扇区)。 
3、填写一些其他关键信息,使系统通过这些信息及inode号码可以完成物理地址的转换。 

所以文件复制要分配新的inode和新的数据区,虽然两个文件的内容是一样的。 
硬连接hardlink: 
引用:我们实际使用文件时一般是通过文件名来引用的。通过上面的讨论,我们知道:
1个inode号码肯定和一片完全属于一个文件的数据区一一对应。那么一个文件系统中两个或更多个不同的文件名能否对应同一个文件呢?答案是肯定的。
我们知道inode号码是记录在文件名对应的目录项中的,我们可以使两个或多个文件的目录项具有相同的inode值,实际上就使它们对应着同一个文件。
有几个目录项具有相同的inode号,我们就说这个文件有几个硬连接(hardlink),
对于普通文件,ls -l命令的连接计数count域的数值就是本文件拥有的硬连接数。硬连接可以通过ln命令建立,

例如: 

# ln /home/zyd/mytext hardlink_mytext 

就建立了一个新的文件hardlink_mytext,这个文件的inode同样是262457。建立硬连接实际上只是增加了一个目录项,但并复制文件数据区,原文件的数据区由两个文件共享。这一方面能够节约大量磁盘空间,同时可以保证两个文件能同步更新。 

'ls -il'可以显示文件的inode(在下面最左边): 

262456 -rw-rw-r-- 1 zyd zyd 17 Nov 3 14:52 newfile 

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext 

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 mytext 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值