2017-02-09 81 views
2

如果我创建通过古怪的行为与符号连接的端片

ln -s /path/to/linked/dir current/path/link_name 

一个符号链接,并通过

cd link_name 

目录更改为current/path/link_name然后我可以检查我在哪里使用PWD命令。输出将是

current/path/link_name 

但是,如果使用某种终端模拟器,如终止,或的konsole别人,我可以分割选项卡或创建在同一目录中的新选项卡。在新创建的选项卡中,pwd命令的输出将为

/path/to/linked/dir 

在许多情况下,这样做并不方便。有人知道如何在一些终端仿真器中改变这种行为吗?

P.S.我也注意到从/current/path/link_name输入的ls的输出与从/path/to/linked/dir输入的ls的输出相同。

回答

0

终结者1.90做你想做的。在一个示例会话:

$ cd -- "$(mktemp --directory)" 
$ mkdir a 
$ ln -s a b 
$ cd b 

Ctrl键 - - ë(或Ò,或)。在这一点上,我仍然在b

+0

正如l0b0所提到的那样,垂直和水平分割保留了工作目录,但新标签取到了终止符中的原始目录 –

+0

新标签与此处分割完全相同。这就是为什么我提到“Ctrl-Shift-t”。 – l0b0

+0

根本不适合我。你在使用什么操作系统? –

1

你不能。原因是你失去了系统调用执行后你是如何到达那里的信息。一些终端仿真器和主要是bash(1)外壳试图记住这一点,并实施pwd作为内部命令,以应对这种情况。但总的来说,如果你尝试

/bin/pwd 

你会发现,所有关于你是怎么到最终的目录中的信息在时间过程中丢失了。

问问自己,如何能在/bin/pwd工作,怎么能确定你的目录,你会回答自己的问题:

系统维护一个当前目录(该pwd命令从继承此它的父外壳)存储在每个进程的系统数据中,但为了节省资源,它只存储实际上是你当前目录的目录的inode号(实际上并不是它维护着对in-core inode结构的引用)。它不存储您用于查找它的路径,并且它仅存储该信息以便在打开文件时要求相对路径时获得起点。问题与确定多个链接文件属于哪个目录相同...没有父目录存储为一个文件,因为它可以在多个目录链接到它所有在同一时间 ...这对于目录也是如此,但是他们自己内部有一个链接到其父母的..条目(他们的真父母,因为一个目录现在可以通过正常链接被允许属于不同的目录,这是系统禁止的,并通过mkdir(2)系统调用来保证)pwd(1)命令精确地使用这些链接来查找父目录(然后通过搜索当前目录的inode号找到父目录中的当前目录,直到该算法导致到同一个inode(根目录有这个特殊的特征,其..条目再次指向自己),所以它停止上升。 pwd只能工作,因为它跟在目录下,并且从来没有文件。