1.2.7. 链接
有两种方法把一个文件 “foo
” 链接到一个不同的文件名 “bar
”。
-
对现有文件重复名称
“
ln foo bar
”
-
通过名字指向另一个文件的特殊文件
“
ln -s foo bar
”
请参阅下面的示例,rm
命令结果中链接数的变化和细微的差别。
$ umask 002
$ echo "Original Content" > 1 foo
$ ls -li foo
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
$ ln foo bar # 硬链接
$ ln -s foo baz # 符号链接
$ ls -li foo bar baz
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> 2 foo
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
$ rm foo
$ echo "New Content" > 3 foo
$ ls -li foo bar baz
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> 4 foo
1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
$ cat bar
Original Content
$ cat baz
New Content
硬链接可以在同一个文件系统内创建,并共用同一个inode号,由ls(1)带 “-i
”选项显示的。
符号链接总是名义上具有“rwxrwxrwx
”的文件访问权限,如上面例子所示,实际的有效访问权限由它所指向的文件确定。
小心 | |
---|---|
除非你有非常好的理由,否则不要创建一个复杂的符号链接或硬链接通常是个好主意。符号链接的逻辑组合可能导致文件系统噩梦般的无限循环。 |
注意 | |
---|---|
通常使用符号链接比使用硬链接更合适,除非你有一个好理由使用硬链接。 |
“.
”目录链接到它所在的目录,因此任何新建目录的链接数从2开始。“..
”目录链接到父目录,因此目录的链接数随着新的子目录的创建而增加。
如果你刚从Windows迁移到Linux,你很快将清楚 Unix 的文件名链接相较于Windows最相近的“快捷方式”是多么精心设计的。由于它是在文件系统中实现的,应用无法看到链接文件跟原始文件之间的区别。在硬链接这种情况,这真的是毫无差别。