Academy I/Tech Academy

[Linux]File system traverse (cd, pwd, dirs, pushd, popd)

openeidos 2015. 1. 2. 12:19

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합니다.


[출처 : http://greenfishblog.tistory.com/50]