디렉토리를 symbolic 링크 시켰을 때 이상한 점..
글쓴이: kldphjeon / 작성시간: 금, 2008/01/04 - 3:14오후
예를 들어, /usr 이라는 디렉토리를 홈디렉토리에 symbolic 링크로 연결시킴니다.
그럼 $HOME/usr 이라는 심볼릭 링크가 생기고,
cd $HOME/usr 같이 들어같을 때, /usr 에 있는 것과 같이 작동하게 되죠.
여기에서 이상한 현상이 발생하는 데,
pwd 의 결과는 $HOME/usr 로 나옴니다.
cd .. ; pwd 의 결과는 $HOME 이구요. 당연한 결과이겠죠.
근데 문제는 $HOME/usr 에서
"ls .." 명령을 치면 $HOME 의 내용이 나와야 하는 데, / 에 있는 내용이 나옵니다.
또 "cp something ../something" 이라고 하면, $HOME/something 이 생겨야하는데, /something 이 생기고요.
mv 명령어도 cp 와 같이 작동을 하고요.
parent 폴더를 나타내는 ".."이 이상하게 작동하는 것이 버그일까요?
아니면 어딘가에서 이를 컨트롤하는 설정이 있는 것인가요?
현재 페도라8을 쓰고 있습니다.
Forums:
pwd, cd만 특별히 이상하게(?) 동작하는 것입니다.
(아마도 bash를 쓰실 것이라고 생각하고 이를 기준으로 얘기하겠습니다.)
symbolic link는 그냥 "여기로 들어오려고 하면 저기로 보내"라고 가리키기만 하는 것이기 때문에, 일단 symbolic link를 통해 cd $HOME/usr 했으면 원래 정상적(?)으로는 cd /usr라고 친 것과 동일한 결과를 가져옵니다. 만약 C 프로그램에서 chdir system call을 불렀다면 당연히 이런 식으로 동작할 것이구요, 그렇게 생각하면 ls나 cp가 지금처럼 동작하는 게 설명이 되죠.
단지 cd와 pwd는 bash internal command이기 때문에, bash가 사용자의 편의를 위해서 "symbolic link를 통해 cd를 했을 경우"를 따로 기억하고 있다가 pwd 명령을 내리면 "진짜 현재 디렉토리 경로" 대신 아까 쳤던 symbolic link 경로를 보여주고, cd .. 했을 경우에도 마찬가지로 아까의 symbolic link가 마치 진짜 디렉토리 경로명인 것처럼 동작을 하는 것입니다.
pwd -P 해보시면 symbolic link가 아닌 물리적 경로를 보실 수 있습니다. 마찬가지로 cd -P .. 하시면 물리적인 상위 디렉토리로 갑니다. 현재 bash가 기억하는 경로 자체를 물리적 경로로 만들고 싶으시면 cd `pwd -P` 해보세요.
예전부터 그랬던 것인가요?
예전에는 cp 나 mv 명령어도 cd 와 같이 ".."를 해석했던 걸로 기억하는데,
예로, $HOME/usr 폴더로 들어가서 (물리적으로 /usr 폴더인거죠)
mv something ../Download
라고 명령을 하면, something 이라는 파일이 $HOME/Download 라는 폴더에 옮겨졌었는데, 지금은 그런 장소가 파일이나 디렉토리가 없다고 합니다.
제가 잘 못 기억하고 있는 것인지요.
혹시 cp 나 mv 등의 명령어도 cd 와 같은 방식으로 ".."를 해석하게 할 수 있는 방법이 없나요?
흠
와우 그렇군요 전. chdir 에 현재 디렉토리가 symbolic 링크를 통해 들어온 경우 다른 방식으로 처리해 줄줄 알았는데 ^^
좋은거 배워갑니다.
Dig it.
댓글 달기