2010. 11. 10. 08:52

File system traverse(횡단)하기 (cd, pwd, dirs, pushd, popd)

shell 사용자들이 대부분 사용하는 기초적인 명령중 changing directory(cd), 현재 디렉토리 구하기(pwd), 그리고 directory의 내용 나열하기(ls)등이 있습니다. 이제부터 덜알려진 명령을 확인해 보도록 합니다. 아래는 cd를 이용하여 변경하는 것을 보여줍니다.

$ cd
$ cd $HOME
$ cd ~
$ cd ~greenfish
$ cd -
$ cd $OLDPWD
$ cd ~/public_html
$ cd ..
$ cd /usr/bin
$ cd usr/bin
cd -와 cd $OLDPWD는 이전의 작업 directory로 변경시켜 줍니다. cd user/bin은 현재 directory 하부의 user/bin으로 이동시켜 줍니다.

만약, 현재의 directory를 알고 싶다면, pwd(print working directory)를 사용합니다.

$ pwd
/home/greenfish

symbolic link를 생성하는 것은 file system의 다른 부분으로 부터 접근 하는 방법을 제공합니다(2010/11/03 - [Research/Ubuntu] - Ubuntu File Type 이해하기 참고). 그러나 symbollic link는 parent directory를 어떻게 볼 수 있는지를 확인하는데 어려움이 따를때가 있습니다. 다음과 같은 symbolic link 생성 명령을 확인해 보시기 바랍니다.
$ cd $HOME
~$ ln -s /tmp tmp-link
~$ ls -l tmp-link
lrwxrwxrwx 1 greenfish greenfish 4 2010-10-19 02:48 tmp-link -> /tmp
~$ cd tmp-link/
~/tmp-link$ pwd
/home/greenfish/tmp-link
~/tmp-link$ pwd -P
/tmp
~/tmp-linkpwd -L
/home/greenfish/tmp-link
~/tmp-link$ cd -L ..
~$ pwd
/home/greenfish
~$ cd tmp-link
~/tmp-link$ cd -P ..
/$ pwd
/

이와 같이 pwd와 cd의 -P, -L 옵션은 symbolic link가 가리키는 directory 혹은 link 위치로 작업할 수 있도록 합니다. cd -L .. 은 HOME directory로 이동시켜주며, cd -P .. 는 고정 directory (/)로 이동시켜 줍니다. 이와 유사하게 pwd의 -P 와 -L은 고정 directory 혹은 link 위치를 보여주도록 합니다.

bash는 작업 directory의 list를 기억하고 있습니다. 이것은 이전에 방문한 directory로 돌아가는데 유용하게 사용됩니다. 그 list는 stack으로 기록되는데, pushd와 popd로 추가/삭제 할 수 있습니다.

~$ pwd
/home/greenfish
~$ pushd /usr/share/man/
/usr/share/man ~
/usr/share/man/$ pushd /var/log/
/var/log /usr/share/man ~
/var/log$ dirs
/var/log /usr/share/man ~
/var/log$ dirs -v
 0  /var/log
 1  /usr/share/man
 2  ~
/var/log$ popd
/usr/share/man ~
/usr/share/man$ pwd
/usr/share/man
/usr/share/man$ popd
~
~$ pwd
/home/greenfish

dirs, pushd, 그리고 popd 명령은 stack에 있는 directory의 순서를 관리하는데 사용합니다. pushd -0은 현재의 directory를 stack의 최 상단에 push합니다. pushd -2 명령은 stack의 밑에서 부터 위로 3번째 directory에 push합니다.