改变linux中的符号链接

时间:2016-04-01 09:48:29

标签: linux bash shell unix command-line

让我通过屏幕截图显示我的问题。 This is my first terminal。我改变了另一个终端的链接说terminal2。我的问题在this屏幕截图中突出显示。在我将链接更改为test2之后,ls返回test1文件夹的内容。

4 个答案:

答案 0 :(得分:2)

令你感到困惑的是,pwd builtin实际上并没有告诉你当前的工作目录 - 它告诉你用来到当前工作目录的路径。

如果您想要实际的当前工作目录,则需要-P标志:

$ pwd -P

会为您提供类似/home/darkknight/test1

的内容

答案 1 :(得分:1)

第二次拨打readlink并没有按照您的想法进行操作

darkknight@localhost:~/test$ readlink \`pwd`/home/darkknight/test2`

手册页中readlink的说明是

  

在标准输出上显示符号链接的值

readlink是一个只读操作。在此之后,您还会发现$?的值为非零,这意味着这已失败,因为test2不是符号链接。

将其替换为对ln -s -f的另一次调用(其中-f代表强制)......

darkknight@localhost:~$ ln -s -f test2 test

并非所有发行版都尊重-f,因此您可能必须首先删除符号链接:

darkknight@localhost:~$ rm test; ln -s test1 test

答案 2 :(得分:1)

现在我从另一个终端更改到test2的链接:命令应该是

rm -fr test;ln -s test2 test; cd test

答案 3 :(得分:1)

您描述的是预期的行为。

$ mkdir test1
$ mkdir test2
$ touch test1/t1
$ touch test2/t2
$ ln -s test1 test
$ cd test
$ ls
t1
$ rm ../test
$ ln -s test2 ../test
$ readlink ../test
test2
$ ls
t1
$

简单地想象一下,当你cd test实际进入test1时。然后,您可以将符号链接test更改为您想要的任何内容 - 甚至删除它! - 您仍然在test1

$ pwd
test
$ readlink `pwd`
test2
$

当然,readlink会返回test2,然后阅读已更改为test当前 test2链接。但是,当时cd进入test,链接 test1。而你仍然在test1目录。

当然,如果现在您更改为测试目录,您将进入test2

$ cd ../test
$ ls
t2
$

最后一件事,澄清一下。目录test 不存在。您无法输入也不能进入此目录。只要您cd test,就可以输入test符号链接当前指向的目录(此处为test1)。

在您进入test1目录后,您可以将test符号链接更改为您想要的任何内容,您仍然会在test1