welcome to 's blog...


公告

我的分类(专题)

日志更新

最新评论

留言板

链接

搜索


Blog信息




: 设备、Linux 文件系统与文件系统层次标准(FHS)
aku1 发表于 2009-1-4 11:41:46

在本节中,学习以下内容:

硬链接
符号链接

硬链接

在主题 103 的教程 “LPI 101 考试准备(主题 103):GNU 和 UNIX 命令” 中学过,文件或目录包含在块 的集合中,关于文件或目录的信息包含在 inode 中。

硬链接 是指向 inode 的指针。所以,文件名实际上是指向包含文件信息的 inode 的链接。可以使用 ls 命令的 -i 选项显示文件和目录项的 inode 号。

可以使用 ln 命令为现有文件创建其他硬链接(但是对于目录不能这么做,尽管系统会将 . 和 .. 设置为硬链接)。如果一个 inode 有多个硬链接,那么只有当链接计数减少到零时 inode 才会被删除。

清单 58 显示如何创建文件,然后创建它的硬链接。它还说明即使删除了原来的文件名,第二个硬链接会使 inode 不被清除。


清单 58. 硬链接

     
ian@pinguino:~$ echo testing > file1
ian@pinguino:~$ ls -l file*
-rw-r--r--  1 ian ian 8 2005-12-26 15:35 file1
ian@pinguino:~$ ln file1 file2
ian@pinguino:~$ ls -l file*
-rw-r--r--  2 ian ian 8 2005-12-26 15:35 file1
-rw-r--r--  2 ian ian 8 2005-12-26 15:35 file2
ian@pinguino:~$ rm file1
ian@pinguino:~$ ls -l file*
-rw-r--r--  1 ian ian 8 2005-12-26 15:35 file2
ian@pinguino:~$ cat file2
testing
 


硬链接只能在一个特定的文件系统中存在。硬链接不能跨越文件系统,因为它们要引用 inode 号,而 inode 号只在一个文件系统中是惟一的。

查找硬链接

如果需要查明哪些文件链接到某个 inode,那么可以使用 find 命令和 -samefile 选项加一个文件名,或者 -inum 选项加一个 inode 号,如清单 59 所示。


清单 59. 查找硬链接

     
ian@pinguino:~$ ln file2 file3
ian@pinguino:~$ ls -il file2
172 -rw-r--r--  2 ian ian 8 2005-12-26 15:35 file2
ian@pinguino:~$ find . -samefile file2
./file2
./file3
ian@pinguino:~$ find . -inum 172
./file2
./file3
 


 

 回页首
 

 

符号链接

Linux 系统中使用的文件系统链接的另一种形式是符号链接(常常简称为 symlink)。在这种形式中,链接引用另一个文件系统对象的名称,而不是它的 inode。符号链接可以引用目录,也可以引用另一个文件系统上的文件。它们常常用于为系统命令提供别名。在长目录清单中,如果一个对象的第一个字符是小写的 l,那么它就是符号链接。如清单 60 所示。


清单 60. 符号链接示例

     
ian@pinguino:~$ ls -l /sbin/mkfs.*
-rwxr-xr-x  1 root root  14160 2005-09-20 12:43 /sbin/mkfs.cramfs
-rwxr-xr-x  3 root root  31224 2005-08-23 09:25 /sbin/mkfs.ext2
-rwxr-xr-x  3 root root  31224 2005-08-23 09:25 /sbin/mkfs.ext3
-rwxr-xr-x  2 root root  55264 2005-06-24 07:48 /sbin/mkfs.jfs
-rwxr-xr-x  1 root root  13864 2005-09-20 12:43 /sbin/mkfs.minix
lrwxrwxrwx  1 root root      7 2005-12-14 07:40 /sbin/mkfs.msdos -> mkdosfs
-rwxr-xr-x  2 root root 241804 2005-05-11 09:40 /sbin/mkfs.reiser4
-rwxr-xr-x  2 root root 151020 2004-11-25 21:09 /sbin/mkfs.reiserfs
lrwxrwxrwx  1 root root      7 2005-12-14 07:40 /sbin/mkfs.vfat -> mkdosfs
-rwxr-xr-x  1 root root 303788 2005-04-14 01:27 /sbin/mkfs.xfs
 


除了 l 类型之外,可以在右边看到 ->,后面是这个链接引用的名称。例如,mkfs.vfat 命令是 mkdosfs 命令的符号链接。在 /sbin 和其他系统目录中会看到许多这样的链接。符号链接的另一个迹象是,它的大小等于链接目标名的字符数。

可以使用 ln 命令加 -s 选项创建符号链接,如清单 61 所示。


清单 61. 创建符号链接

     
ian@pinguino:~$ touch file5
ian@pinguino:~$ ln -s file5 file6
ian@pinguino:~$ ln -s file5 file7
ian@pinguino:~$ ls -l file*
-rw-r--r--  2 ian ian 8 2005-12-26 15:35 file2
-rw-r--r--  2 ian ian 8 2005-12-26 15:35 file3
-rw-r--r--  1 ian ian 0 2005-12-26 17:40 file5
lrwxrwxrwx  1 ian ian 5 2005-12-26 17:40 file6 -> file5
lrwxrwxrwx  1 ian ian 5 2005-12-26 17:40 file7 -> file5
 


注意,目录清单中的链接计数没有更新。删除链接并不影响目标文件。符号链接并不阻止文件被删除;如果目标文件被转移或删除了,那么符号链接就断了。因此,许多系统在目录清单中使用颜色,常常用淡蓝色表示好链接,用红色表示断裂的链接。

查找符号链接

如果需要查明哪些文件符号链接到某个文件,那么可以使用 find 命令和 -lname 选项加一个文件名,如清单 62 所示。链接可以使用相对路径或绝对路径,所以可能需要在要匹配的文件名前面加一个星号。


清单 62. 查找符号链接

     
ian@pinguino:~$ mkdir linktest1
ian@pinguino:~$ ln -s ~/file3 linktest1/file8
.ian@pinguino:~$ find . -lname "*file3"
./linktest1/file8
ian@pinguino:~$ find . -lname "*file5"
./file7
./file6
 


路径和符号链接

在前面看到的大多数例子中,符号链接与目标在同一个目录中,链接中的路径是相对路径。在清单 62 中,我们在 linktest1 子目录中创建了一个链接,这个链接使用了绝对目标(~/file3)。在创建符号链接时,需要考虑使用相对路径还是绝对路径,因为这两者都是允许的。图 3 说明了将一组文件和符号链接转移到子目录中的效果。


图 3. 符号链接和路径
 

红色表示 linktest1/file8 链接现在断裂了。这很正常,因为现在没有 ~/file3 了。但是 file5 的两个符号链接仍然是好的,因为文件仍然在同样的相对位置,尽管它和它的两个链接已经被移动了。关于在符号链接中是使用相对路径还是绝对路径,并没有硬性规定和通用的规则;这个问题在一定程度上取决于链接或目标是否有可能被转移。在建立符号链接时要考虑这个问题。

断裂的符号链接

最后一点与断裂的符号链接有关。读这个文件的尝试会失败,因为文件不存在。但是,如果对目标文件有适当的权限,那么写文件的尝试会成功完成,如清单 63 所示。


清单 63. 读和写断裂的符号链接

     
ian@pinguino:~$ cat linktest1/file8
cat: linktest1/file8: No such file or directory
ian@pinguino:~$ echo "test file 8" >> linktest1/file8
ian@pinguino:~$ cat linktest1/file8
test file 8
ian@pinguino:~$ find . -name file3
./linktest2/file3
./file3
 


阅读全文 | 回复(0) | 引用通告 | 编辑


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:



Powered by Oblog.