Shell 查找符号链接及其指向目标,符号链接在类Unix系统中很常见。使用它的理由有很多,要么是为了便于访问,要么是为了维护同一代码库或程序的多个版本。本章中我们讨论了处理符号链接的一些基本方法。
符号链接是指向其他文件或目录的指针。它在功能上类似于Mac OS中的别名或Windows中的快捷方式。删除符号链接不会影响到原始文件。
实战演练
我们可以按照下面的步骤来处理符号链接。
(1) 创建符号链接:
$ ln -s target symbolic_link_name
例如:
$ ln -l -s /var/www/ ~/web
这个命令在当前用户的主目录中创建了一个名为Web的符号链接。该链接指向/var/www。
(2) 使用下面的命令来验证链接是否已建立:
$ ls -l web
lrwxrwxrwx 1 slynux slynux 8 2010-06-25 21:34 web -> /var/www
web -> /var/www
表明web指向 /var/www。
(3) 打印出当前目录下的符号链接:
$ ls -l | grep "^l"
(4) 打印出当前目录及其子目录下的符号链接:
$ find . -type l -print
(5) 使用readlink
打印出符号链接所指向的目标路径:
$ readlink web
/var/www
工作原理
在使用grep
和ls
显示当前目录下的符号链接时,grep ^l
命令用于对ls -l
的输出进行过滤,只显示那些以l
起始的行。^
表示字符串的起始位置。其后的l
指定了字符串必须以l
开头,这标识了一个符号链接2。
2该方法利用了这样一个事实:每个符号链接的权限标记块(
lrwxrwxrwx
)均以字母l起始。
在使用find
时,选项-type l
告诉find
命令只搜索符号链接文件。-print
选项将符号链接列表打印到标准输出(stdout
)。使用当前目录作为搜索起始路径。