$> 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
はい、シェルはインテリジェントにシンボリックリンクディレクトリに変更しようとします。
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ pwd -P
/home/michas/a
シンボリックリンクに変更した後、b
シェルはユーザーが実際に「directory」にあるかのように偽装しますが、b
シンボリックリンクはユーザーをディレクトリに送信しますa
。
バラよりhelp pwd
:
-P print the physical directory, without any symbolic links
外部コマンド(例ls
:)は常に物理パスを使用しますが、シェル組み込み機能はデフォルトで仮想シンボリックリンクパスを使用します。
このcd
コマンドはシェル組み込みコマンドであり、デフォルトでは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