ls는 cd + ls와 동일한 폴더를 제공하지 않습니다.

ls는 cd + ls와 동일한 폴더를 제공하지 않습니다.
$> 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

관련 정보