【linux学习笔记】硬链接和符号链接以及复制的区别

先说明结论:

硬链接和符号链接的区别:

硬连接记录的是目标的 inode;符号链接相当于windows下的快捷方式

hard link 由于 inode 的缘故,只能在本分区中做 link;符号链接可以做跨分区的 link。
 
硬连接和复制的区别:
几个硬连接=几个名字的同一个房子,这些名字可以相同或不同但地址(inode)是一样的, 所以硬连接被删除只是把相应名字抹去,只有最后一个名字被抹去你才会找不到房

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


背景知识:

1.每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向

2.想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取


从鸟哥的私房菜拿一张图来说明问题:

1.hard link:(可以想象成2个指向同一个文件地址的指针)


上图的意思是,你可以透过 1 或 2 的目录之 inode 指定的 block 找到两个不同的文件名,而不管使用哪个文件名均可以指到 real 那个 inode 去读取到最终数据!那这样有什么好处呢?最大的好处就是“安全”!如同上图中, 如果你将任何一个文件删除,其实 inode 与 block 都还是存在的!


2.symbol link:(指向文件地址的指针的指针)

【linux学习笔记】硬链接和符号链接以及复制的区别_第1张图片

由 1 号 inode 读取到连结文件的内容仅有文件名,根据文件名链接到正确的目录去取得目标文件的 inode , 最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法透过连结文件读取的问题了!


最后,总结下ln命令:

[root@www ~]# ln [-sf] 来源文件 目标文件
选项与参数:
-s  :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link
-f  :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!

范例一:将 /etc/passwd 复制到 /tmp 底下,并且观察 inode 与 block
[root@www ~]# cd /tmp
[root@www tmp]# cp -a /etc/passwd .
[root@www tmp]# du -sb ; df -i .
18340   .  <==先注意一下这里的容量是多少!
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/hdc2            2560864  149738 2411126    6% /
# 利用 du 与 df 来检查一下目前的参数~那个 du -sb 
# 是计算整个 /tmp 底下有多少 bytes 的容量啦!

范例二:将 /tmp/passwd 制作 hard link 成为 passwd-hd 文件,并观察文件与容量
[root@www tmp]# ln passwd passwd-hd
[root@www tmp]# du -sb ; df -i .
18340   .
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/hdc2            2560864  149738 2411126    6% /
# 仔细看,即使多了一个文件在 /tmp 底下,整个 inode 与 block 的容量并没有改变!

[root@www tmp]# ls -il passwd*
586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd
586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd
# 原来是指向同一个 inode 啊!这是个重点啊!另外,那个第二栏的连结数也会添加!

范例三:将 /tmp/passwd 创建一个符号链接
[root@www tmp]# ln -s passwd passwd-so
[root@www tmp]# ls -li passwd*
586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd
586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd
586401 lrwxrwxrwx 1 root root    6 Oct 22 14:18 passwd-so -> passwd
# passwd-so 指向的 inode number 不同了!这是一个新的文件~这个文件的内容是指向 
# passwd 的。passwd-so 的大小是 6bytes ,因为 passwd 共有六个字符之故

[root@www tmp]# du -sb ; df -i .
18346   .
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/hdc2            2560864  149739 2411125    6% /
# 呼呼!整个容量与 inode 使用数都改变啰~确实如此啊!

范例四:删除源文件 passwd ,其他两个文件是否能够开启?
[root@www tmp]# rm passwd
[root@www tmp]# cat passwd-hd
......正常显示完毕!
[root@www tmp]# cat passwd-so
cat: passwd-so: No such file or directory
[root@www tmp]# ll passwd*
-rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd-hd
lrwxrwxrwx 1 root root    6 Oct 22 14:18 passwd-so -> passwd
# 怕了吧!符号链接果然无法开启!另外,如果符号链接的目标文件不存在,
# 其实档名的部分就会有特殊的颜色显示喔!


参考:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#harddisk

参考:http://blog.csdn.net/winniepu/article/details/3887121

你可能感兴趣的:(【linux学习笔记】硬链接和符号链接以及复制的区别)