$> ls ../../../../..
没有给我相同的结果
$> cd ../../../../..
$> ls
为什么?有链接的东西吗?这是怎么回事?
[ johanrj@jamin ] ~/XXX/broadcom/asuswrt/release/src-rt-6.x/linux/linux-2.6/drivers/net/phy/WRT/openwrt-git-8.09.2/package/swconfig/src
$> ls ../../../../..
9145-D5B0 asuswrt BCM53125 bcm_switch jrj Packages workspace
[ johanrj@jamin ] ~/XXX/broadcom/asuswrt/release/src-rt-6.x/linux/linux-2.6/drivers/net/phy/WRT/openwrt-git-8.09.2/package/swconfig/src
$> cd ../../../../..
[ johanrj@jamin ] ~/XXX/broadcom/asuswrt/release/src-rt-6.x/linux/linux-2.6/drivers/net/phy
$> ls
adm6996.c cicada.c libphy.ko lxt.c mdio-boardinfo.h mdio_bus.o phy_device.c smsc.c swconfig.mod.c WRT
adm6996.h davicom.c libphy.mod.c Makefile mdio_bus.c Module.symvers phy_device.o swconfig.c swconfig.mod.o
b53 fixed.c libphy.mod.o marvell.c mdio_bus.c.orig phy.c phy.o swconfig.ko swconfig.o
broadcom.c Kconfig libphy.o mdio-boardinfo.c mdio_bus.c.rej phy.c.orig qsemi.c swconfig_leds.c vitesse.c
答案1
是的,您的 shell 会尝试智能地更改为符号链接目录:
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ pwd -P
/home/michas/a
更改为符号链接后,b
您的 shell 假装您确实位于“目录”中b
,但符号链接将您发送到了目录a
。
看help pwd
:
-P print the physical directory, without any symbolic links
外部命令(如ls
)将始终使用物理路径,但 shell 内置命令默认使用虚拟符号链接路径。
该cd
命令是 shell 内置命令,默认解释cd ..
为“保留当前符号链接”,而不是“使用物理父级”。但你可以改变这种行为。help cd
说:
-P use the physical directory structure without following symbolic
links: resolve symbolic links in DIR before processing instances
答案2
您可以获得真实路径,并使用解析链接realpath
并比较输出
realpath ../../../../..
cd ../../../../..
realpath .
在我的系统上:
~/shared $ realpath ..
/home/avdndata/lnk
~/shared $ cd ..
~ $ realpath .
/home/anthon