UNIX:创建目录时的目录中的符号链接,何时不存在

时间:2012-02-14 12:56:27

标签: unix symlink

请参阅:

mkdir sym
cd sym
mkdir one

//Create the symlink
ln -s one two

ls -l
drwxr-xr-x  2 lola lola 4096 2012-02-14 07:58 one
lrwxrwxrwx  1 lola lola    3 2012-02-14 07:58 two -> one

现在,如果我在一个中放了一些东西,我会在两个中找到它。根据我的理解两个符号链接的名称,并为其创建一个目录(即两个)[是这个正确?]。

问题两个目录?指向一个

但如果我这样做:

(assuming a clean configuration)
mkdir sym
cd sym
mkdir one
mkdir two  <--- notice the creation of two!!

//Create the symlink
ln -s one two

drwxr-xr-x  2 lola lola 4096 2012-02-14 07:59 one
lrwxrwxrwx  1 lola lola    3 2012-02-14 07:59 two
but in two/
lrwxrwxrwx 1 lola lola 3 2012-02-14 07:59 one -> one

如果我在一个中添加了某些内容,

但是来自man ln

SYNOPSIS
   ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
   ln [OPTION]... TARGET                  (2nd form)
   ln [OPTION]... TARGET... DIRECTORY     (3rd form)
   ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

我尝试执行第三种形式,这是:从一个目录到另一个目录创建一个符号链接

你可以给我一个关于我错误的提示吗?我认为是概念(和技术)

2 个答案:

答案 0 :(得分:2)

在您的第一个示例中,“two”不是目录。这是一个simlink(基本上是一个小标签,上面写着“如果有人问我,请改为”一个“。

在第二种情况下,您确实使用第三种形式。但是这个表单的作用是“在目录DIRECTORY中创建一个指向TARGET的simlink。因为”two“是一个目录,所以ln命令将第二个例子识别为第三个表单。

答案 1 :(得分:0)

符号链接是一种文件。它不是目录。 readlink()系统调用读取符号链接文件中的字符。这就是ls显示中“ - &gt; one”的来源。

为了让你的例子工作ls -l两个应该显示“../one”,因为两个符号链接在一个目录中,所以为了正确引用目录,必须“向上”找到一个