查看: 539|回复: 4

从零开始:Linux基础教程之命令的使用  5

 关闭 [复制链接]

签到天数: 372 天

连续签到: 1 天

[LV.9]以坛为家II

发表于 2009-1-16 09:45 | 显示全部楼层 |阅读模式
  符号链接

  实际上,符号链接(symbolic link,或“symlinks”)比硬链接更常用到。符号链接是一种专门的文件类型,在这种文件类型中,链接通过名称引用另一个文件,而不是直接引用索引节点。符号链接不阻止文件被删除;如果目标文件消失,那么符号链接仅仅是不可用,或“被破坏”。

  通过将 -s 选项传给 ln,可以创建符号链接。

[pre]$ ln -s secondlink thirdlink$ ls -l firstlink secondlink thirdlink-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 firstlink-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 secondlinklrwxrwxrwx 1 agriffis agriffis 10 Dec 31 19:39 thirdlink -> secondlink[/pre]

  在 ls -l 输出中,可以用三种方式区分符号链接和一般文件。第一,请注意第一栏包含一个 l 字符的输出表明是符号链接。第二,符号链接的大小是目标文件(本例是 secondlink)的字符数。第三,输出的最后一栏显示目标文件名。

  符号链接通常比硬链接更灵活。您可以给任何类型的文件系统对象(包括目录)创建符号链接。又因为符号链接的实现是基于路径的(而不是索引节点),所以创建指向另一个文件系统上的对象的符号链接是完全可行的。但是,这一事实也使符号链接理解起来很复杂。请考虑我们想要在/tmp中创建一个指向/usr/local/bin的链接的情况。我们应该输入:

[pre]$ ln -s /usr/local/bin bin1$ ls -l bin1lrwxrwxrwx 1 root root 14 Jan 1 15:42 bin1 -> /usr/local/bin[/pre]

  或者还可以输入:

[pre]$ ln -s ../usr/local/bin bin2$ ls -l bin2lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> ../usr/local/bin[/pre]

  您可以看到,两个符号链接都指向同一目录。但是,如果我们的第二个符号链接在任何时刻被移动到另一个目录,由于相对路径的缘故,它将遭到“破坏”。

[pre]$ ls -l bin2lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> ../usr/local/bin$ mkdir mynewdir$ mv bin2 mynewdir$ cd mynewdir$ cd bin2bash: cd: bin2: No such file or directory[/pre]

  因为/tmp/usr/local/bin这个目录不存在,我们不能再把目录转到bin2;换句话说,bin2 现在被破坏了。

  由于这个原因,有时避免用相对路径信息来创建符号链接是个好主意。但是,在许多情况下,相对的符号链接很管用。请考虑一个示例,在这个示例中您想要给 /usr/bin 中的一个程序创建一个别名:

[pre]# ls -l /usr/bin/keychain -rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/bin/keychain[/pre]

  作为 root 用户,您可能想要给“keychain”创建一个别名,比如“kc”。在这个示例中,我们有 root 访问权,由 bash 提示符改变为“#”可以证明。我们之所以需要 root 访问权是因为一般用户不能在 /usr/bin 中创建文件。作为 root 用户,我们可以像下面这样给 keychain 创建一个别名:

[pre]# cd /usr/bin# ln -s /usr/bin/keychain kc[/pre]

  当这个解决方法起作用时,如果我们想要把两个文件都移到 /usr/local/bin 时,它将会出现问题。

[pre]# mv /usr/bin/keychain /usr/bin/kc /usr/local/bin[/pre]

  因为在符号链接中,我们使用了绝对路径,而我们的kc符号链接仍然指向/usr/bin/keychain,它已不存在了——另一个被破坏的符号链接。符号链接中的相对路径和绝对路径都各具优点,您应该使用适合于您的特殊应用的路径类型。一般情况下,相对路径或绝对路径都能工作得很好。在这种情况下,下面的示例将起作用:

[pre]# cd /usr/bin# ln -s keychain kc# ls -l kclrwxrwxrwx 1 root root 8 Jan 5 12:40 kc -> keychain[/pre]
PCOS系统下载站:http://zhuangji.wang

签到天数: 372 天

连续签到: 1 天

[LV.9]以坛为家II

 楼主| 发表于 2009-1-16 09:45 | 显示全部楼层

从零开始:Linux基础教程之命令的使用  5

  符号链接

  实际上,符号链接(symbolic link,或“symlinks”)比硬链接更常用到。符号链接是一种专门的文件类型,在这种文件类型中,链接通过名称引用另一个文件,而不是直接引用索引节点。符号链接不阻止文件被删除;如果目标文件消失,那么符号链接仅仅是不可用,或“被破坏”。

  通过将 -s 选项传给 ln,可以创建符号链接。

[pre]$ ln -s secondlink thirdlink$ ls -l firstlink secondlink thirdlink-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 firstlink-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 secondlinklrwxrwxrwx 1 agriffis agriffis 10 Dec 31 19:39 thirdlink -> secondlink[/pre]

  在 ls -l 输出中,可以用三种方式区分符号链接和一般文件。第一,请注意第一栏包含一个 l 字符的输出表明是符号链接。第二,符号链接的大小是目标文件(本例是 secondlink)的字符数。第三,输出的最后一栏显示目标文件名。

  符号链接通常比硬链接更灵活。您可以给任何类型的文件系统对象(包括目录)创建符号链接。又因为符号链接的实现是基于路径的(而不是索引节点),所以创建指向另一个文件系统上的对象的符号链接是完全可行的。但是,这一事实也使符号链接理解起来很复杂。请考虑我们想要在/tmp中创建一个指向/usr/local/bin的链接的情况。我们应该输入:

[pre]$ ln -s /usr/local/bin bin1$ ls -l bin1lrwxrwxrwx 1 root root 14 Jan 1 15:42 bin1 -> /usr/local/bin[/pre]

  或者还可以输入:

[pre]$ ln -s ../usr/local/bin bin2$ ls -l bin2lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> ../usr/local/bin[/pre]

  您可以看到,两个符号链接都指向同一目录。但是,如果我们的第二个符号链接在任何时刻被移动到另一个目录,由于相对路径的缘故,它将遭到“破坏”。

[pre]$ ls -l bin2lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> ../usr/local/bin$ mkdir mynewdir$ mv bin2 mynewdir$ cd mynewdir$ cd bin2bash: cd: bin2: No such file or directory[/pre]

  因为/tmp/usr/local/bin这个目录不存在,我们不能再把目录转到bin2;换句话说,bin2 现在被破坏了。

  由于这个原因,有时避免用相对路径信息来创建符号链接是个好主意。但是,在许多情况下,相对的符号链接很管用。请考虑一个示例,在这个示例中您想要给 /usr/bin 中的一个程序创建一个别名:

[pre]# ls -l /usr/bin/keychain -rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/bin/keychain[/pre]

  作为 root 用户,您可能想要给“keychain”创建一个别名,比如“kc”。在这个示例中,我们有 root 访问权,由 bash 提示符改变为“#”可以证明。我们之所以需要 root 访问权是因为一般用户不能在 /usr/bin 中创建文件。作为 root 用户,我们可以像下面这样给 keychain 创建一个别名:

[pre]# cd /usr/bin# ln -s /usr/bin/keychain kc[/pre]

  当这个解决方法起作用时,如果我们想要把两个文件都移到 /usr/local/bin 时,它将会出现问题。

[pre]# mv /usr/bin/keychain /usr/bin/kc /usr/local/bin[/pre]

  因为在符号链接中,我们使用了绝对路径,而我们的kc符号链接仍然指向/usr/bin/keychain,它已不存在了——另一个被破坏的符号链接。符号链接中的相对路径和绝对路径都各具优点,您应该使用适合于您的特殊应用的路径类型。一般情况下,相对路径或绝对路径都能工作得很好。在这种情况下,下面的示例将起作用:

[pre]# cd /usr/bin# ln -s keychain kc# ls -l kclrwxrwxrwx 1 root root 8 Jan 5 12:40 kc -> keychain[/pre]
PCOS系统下载站:http://zhuangji.wang

签到天数: 372 天

连续签到: 1 天

[LV.9]以坛为家II

 楼主| 发表于 2009-1-16 09:45 | 显示全部楼层

从零开始:Linux基础教程之命令的使用  5

  符号链接

  实际上,符号链接(symbolic link,或“symlinks”)比硬链接更常用到。符号链接是一种专门的文件类型,在这种文件类型中,链接通过名称引用另一个文件,而不是直接引用索引节点。符号链接不阻止文件被删除;如果目标文件消失,那么符号链接仅仅是不可用,或“被破坏”。

  通过将 -s 选项传给 ln,可以创建符号链接。

[pre]$ ln -s secondlink thirdlink$ ls -l firstlink secondlink thirdlink-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 firstlink-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 secondlinklrwxrwxrwx 1 agriffis agriffis 10 Dec 31 19:39 thirdlink -> secondlink[/pre]

  在 ls -l 输出中,可以用三种方式区分符号链接和一般文件。第一,请注意第一栏包含一个 l 字符的输出表明是符号链接。第二,符号链接的大小是目标文件(本例是 secondlink)的字符数。第三,输出的最后一栏显示目标文件名。

  符号链接通常比硬链接更灵活。您可以给任何类型的文件系统对象(包括目录)创建符号链接。又因为符号链接的实现是基于路径的(而不是索引节点),所以创建指向另一个文件系统上的对象的符号链接是完全可行的。但是,这一事实也使符号链接理解起来很复杂。请考虑我们想要在/tmp中创建一个指向/usr/local/bin的链接的情况。我们应该输入:

[pre]$ ln -s /usr/local/bin bin1$ ls -l bin1lrwxrwxrwx 1 root root 14 Jan 1 15:42 bin1 -> /usr/local/bin[/pre]

  或者还可以输入:

[pre]$ ln -s ../usr/local/bin bin2$ ls -l bin2lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> ../usr/local/bin[/pre]

  您可以看到,两个符号链接都指向同一目录。但是,如果我们的第二个符号链接在任何时刻被移动到另一个目录,由于相对路径的缘故,它将遭到“破坏”。

[pre]$ ls -l bin2lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> ../usr/local/bin$ mkdir mynewdir$ mv bin2 mynewdir$ cd mynewdir$ cd bin2bash: cd: bin2: No such file or directory[/pre]

  因为/tmp/usr/local/bin这个目录不存在,我们不能再把目录转到bin2;换句话说,bin2 现在被破坏了。

  由于这个原因,有时避免用相对路径信息来创建符号链接是个好主意。但是,在许多情况下,相对的符号链接很管用。请考虑一个示例,在这个示例中您想要给 /usr/bin 中的一个程序创建一个别名:

[pre]# ls -l /usr/bin/keychain -rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/bin/keychain[/pre]

  作为 root 用户,您可能想要给“keychain”创建一个别名,比如“kc”。在这个示例中,我们有 root 访问权,由 bash 提示符改变为“#”可以证明。我们之所以需要 root 访问权是因为一般用户不能在 /usr/bin 中创建文件。作为 root 用户,我们可以像下面这样给 keychain 创建一个别名:

[pre]# cd /usr/bin# ln -s /usr/bin/keychain kc[/pre]

  当这个解决方法起作用时,如果我们想要把两个文件都移到 /usr/local/bin 时,它将会出现问题。

[pre]# mv /usr/bin/keychain /usr/bin/kc /usr/local/bin[/pre]

  因为在符号链接中,我们使用了绝对路径,而我们的kc符号链接仍然指向/usr/bin/keychain,它已不存在了——另一个被破坏的符号链接。符号链接中的相对路径和绝对路径都各具优点,您应该使用适合于您的特殊应用的路径类型。一般情况下,相对路径或绝对路径都能工作得很好。在这种情况下,下面的示例将起作用:

[pre]# cd /usr/bin# ln -s keychain kc# ls -l kclrwxrwxrwx 1 root root 8 Jan 5 12:40 kc -> keychain[/pre]
PCOS系统下载站:http://zhuangji.wang

签到天数: 1792 天

连续签到: 0 天

[LV.Master]伴坛终老IIII

发表于 2009-1-16 09:47 | 显示全部楼层

Re:从零开始:Linux基础教程之命令的使用 5

不是经常用但是学习下
PCOS系统下载站:http://zhuangji.wang

签到天数: 97 天

连续签到: 1 天

[LV.6]常住居民II

发表于 2009-1-17 16:53 | 显示全部楼层

Re:从零开始:Linux基础教程之命令的使用 5

继续学习章程5
PCOS系统下载站:http://zhuangji.wang

本版积分规则