pwd는 지금 서 있는 디렉터리를 출력한다. cd는 그 위치를 옮긴다. 경로를 다루는 basename, dirname, realpath도 여기에 둔다.
pwd
pwd
pwd -L
pwd -P`-L`은 논리 경로다. 심볼릭 링크로 들어왔으면 그 링크 경로를 보여 준다. 기본값이 이쪽이다. `-P`는 링크를 풀어서 실제 디렉터리를 보여 준다.
pwd가 가리키는 곳은 이 셸의 작업 디렉터리다. 스크립트 안에서 cd한 결과는 그 스크립트가 끝나면 부모 셸에 남지 않는다. 셸이 자식 프로세스에게 위치를 물려줄 수는 있지만, 자식이 바꾼 위치를 부모가 돌려받지는 못한다.
cd
cd /var/log
cd ..
cd -
cd
cd ~
cd ~/src`/var/log`처럼 `/`로 시작하면 절대 경로다. `../logs`처럼 시작하면 현재 디렉터리 기준의 상대 경로다.
`..`는 부모 디렉터리, `.`는 현재 디렉터리다. 인자 없는 `cd`와 `cd ~`는 홈 디렉터리(`HOME`)로 간다. `cd ~사용자`는 그 사용자의 홈으로 간다. `cd -`는 바로 이전에 있던 디렉터리로 돌아간다. 이 값은 `OLDPWD`에 들어 있다.
디렉터리에 실행 권한이 없으면 cd는 실패한다. 읽기 권한은 목록을 보는 권한이고, 들어가는 권한은 실행 권한이다. chmod 글에서 다시 다룬다.
`CDPATH`가 설정되어 있으면 상대 경로 cd가 현재 디렉터리 말고 그 목록도 뒤진다. 예상과 다른 곳으로 이동하면 `echo "$CDPATH"`로 확인한다. 비어 있는 것이 일상적인 상태다.
디렉터리 스택
pushd는 가기 전에 현재 위치를 스택에 쌓고 이동한다. popd는 스택에서 꺼내 그곳으로 돌아온다. dirs는 스택을 보여 준다.
pushd /tmp
popd
dirs -v짧은 왕복에는 `cd -`로 충분하다. 세 곳 이상을 오가면 스택이 편하다.
경로에서 이름만 자르기
basename /var/log/syslog
dirname /var/log/syslog
realpath ./notes.txtbasename은 마지막 조각 `syslog`만, dirname은 그 앞의 `/var/log`를 출력한다. 둘 다 파일이 실제로 있는지 확인하지 않고 문자열만 자른다.
realpath는 상대 경로와 `.`, `..`, 심볼릭 링크를 풀어 절대 경로로 보여 준다. 대상이 있어야 한다. 아직 없는 경로의 문자열만 정리하려면 `realpath -m`을 쓴다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.