"CD"의 목적은 무엇입니까? 주문하다?

"CD"의 목적은 무엇입니까? 주문하다?

우리는 이 cd명령이 디렉토리를 변경하는 데 사용된다는 것을 알고 있습니다. 예를 들어

 cd dirname

유효한 디렉토리 이름에는 및 도 포함 .됩니다 ... 목적 cd ..은 분명합니다. 맨페이지에서:

CDPATH의 빈 디렉터리는 현재 디렉터리와 동일한 이름(".")을 갖습니다.

그러나 이것의 목적은 무엇입니까 cd .?

답변1

그것이 하는 일은 cd .현재 작업 디렉토리에 대한 정보로 쉘을 업데이트하는 것입니다. 현재 디렉터리(경로명)가 cd.

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ cd dir
$ pwd
/tmp/shell-bash.OoVntBAM/dir

따라서 현재 우리는 아래 어딘가에 있는 /tmp디렉토리에 있습니다 dir. 현재 있는 디렉터리의 이름을 바꾸겠습니다.

$ mv ../dir ../new-dir

그럼 우리는 지금 어디에 있나요?

$ pwd
/tmp/shell-bash.OoVntBAM/dir

정말? 왜, 그거 이상해요. 쉘이 우리가 누구인지 확실히 알도록 합시다.

$ cd .
$ pwd
/tmp/shell-bash.OoVntBAM/new-dir

스크립트에서 cd .이는 사용자가 현재 디렉터리에 계속 액세스할 수 있는지 테스트하는 데 사용할 수 있습니다.

if ! cd . 2>/dev/null; then
    echo lost access to cwd >&2
    exit 1
fi

또는 반대로,확인하다현재 사용자의 액세스 권한을 취소하는 일부 작업 후에는 현재 디렉터리에 더 이상 액세스할 수 없습니다.

현재 디렉터리에 대한 액세스 권한이 상실되는 이유에는 디렉터리 삭제 또는 누군가 디렉터리에 대한 실행 권한을 제거하는 것이 포함됩니다.


또 다른 예는 ie 를 사용 cd .하지만 -Pie 옵션을 사용하는 것입니다 cd -P .. 현재 디렉터리가 심볼릭 링크를 통해 액세스되면 "물리적" 디렉터리가 됩니다.

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ ln -s dir link-dir
$ ls -l
total 2
drwxr-xr-x  3 kk  wheel  512 May  8 00:48 dir
lrwxr-xr-x  1 kk  wheel    3 May  8 00:46 link-dir -> dir

이제 디렉토리 dir와 해당 디렉토리에 대한 심볼릭 링크가 생겼습니다. 심볼릭 링크를 통해 디렉토리에 들어갑니다.

$ cd link-dir
$ pwd
/tmp/shell-bash.OoVntBAM/link-dir

그 다음에...

$ cd -P .
$ pwd
/tmp/shell-bash.OoVntBAM/dir

답변2

올바른 견적은 다음 cd ..과 같아야 합니다.

'..'는 이전 경로 이름 구성 요소를 슬래시 또는 DIR의 시작 부분으로 다시 이동하여 처리됩니다.

그리고 그렇습니다. cd .현재 디렉터리는 변경되어서는 안 되며, 변경되지도 않습니다.
그러나 현재 디렉터리의 이름이 변경되었을 수 있습니다.

$ mkdir thisdir
$ cd thisdir
$ cd .
$ pwd
/home/isaac/thisdir
$ mv ../thisdir ../xxxx
$ cd .
$ pwd
/home/isaac/xxxx

현재 디렉토리에 기호 링크가 포함되어 있거나 실제 디렉토리 이름이 변경되었습니다.

$ cd ~/ttt
$ pwd
/home/isaac/ttt
$ cd -P .
$ pwd
/home/isaac/me/init/basicdirs.d/ttt

따라서 cd .다른 것과 마찬가지로 사용하면 으로 변경cd DIR 됩니다 . 동일한 디렉터리인 것처럼 보일 수 있지만 동일한 디렉터리라도 DIR의 이름이나 경로가 다를 수 있습니다.pwdDIR

관련 정보