首先要知道inode。它就像一个指向档案的指针,档案的内容由inode的记录来指向。所以读取一个档案内容可以有多个文件名对应一个文件的inode号码,这就是hard link。
举个例子来说,假如我系统有个 /root/crontab 他是 /etc/crontab 的实体链接,也就是说这两个文件名连结到同一个 inode , 自然这两个文件名的所有相关信息都会一模一样(除了文件名之外)。实际的情况可以如下所示:
[root@localhost fsy]# ll -i /etc/crontab /root/crontab
45949 -rw-r--r--. 2 root root 451 2月 8 2011 /etc/crontab
45949 -rw-r--r--. 2 root root 451 2月 8 2011 /root/crontab
可以发现两个文件名都连结到 45949 这个 inode 号码。 因为这两个文件名其实指向的是同一个地址。第二个字段由1变为2了。这个字段称为“连结”,即有多少个文件名连接到这个inode上,有多少个文件指针指向这个存储地址。所以将任何文件名删除,inode与block都还是存在的。一般说来,使用hard link设定链接文件时,磁盘的空间与inode的数目都不会改变。hard link 不能跨Filesystem,也不能link目录。
Symbolic Link (符号链接,亦即是快捷方式)
相对于 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在建立一个独立的文件,而这个文件会让数据的读取指向它link的文件名。由于只是用来作指向,所以当来源文件被删除后,symbolic link 的文件就会打不开了。可以理解为它是一个指向文件地址指针的指针。当它指向的指针没有了,自然也就不能用了。
范例一:将 /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 的容量
[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。另外,那个第二个的连结数也会增加
[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 使用数都改变了
[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
# 符号链接无法开启。另外,如果符号链接的目标档案不存在,是会有特殊颜色的