3.9 查找符号链接及其指向目标
在类UNIX系统中,符号链接很常见,我们会碰到各种与符号链接相关的处理工作。这则攻略可能没有什么实用性,不过它给出了处理符号链接的实践方法,这些方法没准能在编写其他shell脚本时派上用场。
3.9.1 预备知识
符号链接只不过是指向其他文件的指针。它在功能上类似于Mac OS中的别名或Windows中的快捷方式。删除符号链接不会影响到原始文件。
3.9.2 实战演练
我们可以按照下面的方法创建符号链接:
- $ ln -s target symbolic_link_name
例如:
- $ ln -s /var/www/ ~/web
这个命令在已登录用户的home目录中创建了一个名为web的符号链接。这个链接指向/var/www。这些信息可以从下面的命令输出中看到:
- $ ls web
- lrwxrwxrwx 1 slynux slynux 8 2010-06-25 21:34 web -> /var/www
web -> /var/www
表明web指向 /var/www。
对于每一个符号链接而言,权限标记部分以字母“l
”作为起始,表示这是一个符号链接。
因此,为了打印出当前目录下的符号链接,可以使用下面的命令:
- $ ls -l | grep "^l" | awk '{ print $8 }'
grep
对ls -l
的输出进行过滤,只显示以l
起始的那些行。^
是字符串起始标记。awk
用来打印出第8列,也就是文件名部分。
另一种方法是用find
打印符号链接,如下所示:
- $ find . -type l -print
在上面的命令中,我们将find
命令的type
参数指定为"l"
,告诉find
只搜索符号链接文件。-print
选项将符号链接列表打印到标准输出(stdout
)。而"."
表示从当前目录开始搜索。
用下列命令可以打印出符号链接的指向目标:
- $ ls -l web | awk '{ print $10 }'
- /var/www
ls -l
命令输出的每一行都对应一个文件的详细信息。ls -l web
会将符号链接文件web的详细信息全部列出。输出的第10列包含文件指向的目标(如果这是一个符号链接的话)。因此,为了找出与符号链接相关联的目标,我们可以用awk
打印出文件详细列表(ls -l
的输出)的第10列。
另外,我们也可以用readlink
命令来完成同样的任务。这是你最应该优先考虑的方法,其使用方式如下:
- $ readlink web
- /var/www