메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

디렉토리 트리의 상하 이동

적은 키 입력 횟수로 cd 명령의 효과 증폭

Anthony English, Senior AIX specialist, Levitar Pty Ltd
Anthony English
Anthony English is an independent contractor from Sydney, Australia. He has worked on AIX systems since 1991 and writes the IBM developerWorks blog, AIX Down Under. You can reach Anthony at anthonyenglish@levitar.com.au.

요약:  디렉토리 변경을 위해 사용하는 cd 명령은 UNIX® 쉘 명령을 학습할 때 처음으로 접하게 되는 명령 중 하나인데, 매우 다양한 용도로 사용됩니다. 여러 디렉토리 사이에서 훨씬 쉽게 압축 작업을 할 수 있게 해주는 몇 가지 손쉬운 방법을 배워 보십시오. 또한, cd 작업에 도움이 되는 몇 가지 공통 변수를 잘 사용할 수 있는 방법도 찾아봅시다.

원문 게재일:  2010 년 11 월 18 일 번역 게재일:   2011 년 3 월 15 일
난이도:  중급 원문:  보기 PDF:  A4 and Letter (46KB | 11 pages)Get Adobe® Reader®
페이지뷰:  2281 회
의견:  


수년간 cd 명령을 사용한 경험이 있더라도, cd 명령의 몇 가지 기능에는 아마 놀랄지도 모르겠다. 아무튼, 언제 man cd를 마지막으로 실행해보았는가? (cd 명령에 대한 문서로 연결되는 링크는 참고자료를 참조한다.) cd 명령에는 불필요한 입력을 상당히 많이 줄여줄 수 있는 몇 가지 트릭이 있다. 디렉토리를 얼마나 자주 변경해야 하는지 생각해보면 좋은 소식임에 틀림없을 것이다.

본 기사에서는 UNIX® 디렉토리 구조를 살펴보고 현재 디렉토리 경로를 보고 쉘 프롬프트에 디렉토리를 추가할 수 있는 방법을 설명한다. 몇 가지 간단한 cd 예제를 살펴본 후, 절대 경로상대 경로의 의미와 각각의 경로를 사용하는 시기를 설명하겠다. 그런 다음, 홈 디렉토리로 이동하는 방법, 다른 사용자의 홈 디렉토리를 식별하는 방법 등과 같이, 시간 절약 효과가 뛰어나 필자가 자주 사용하는 cd 단축키 몇 가지를 알려주도록 하겠다. 두 디렉토리 사이에서 앞뒤로 전환하는 방법을 설명하고 필자가 곧잘 cd 셔플이라고 부르는, cd에 대해 잘 알려져 있지 않은 주옥과도 같은 기능도 알려주겠다. 그것은 유사한 두 디렉토리 경로 간을 이동하는 간단한 방법이다.

하지만, 디렉토리 변경을 살펴보기 전에 UNIX 디렉토리 구조에 대한 개요를 이해하는 것이 중요하다.

디렉토리 트리의 이해

Windows® 운영 체제에서 폴더라고 알고 있는 것을 UNIX에서는 디렉토리라고 부른다. 디렉토리는 파일과 다른 디렉토리의 그룹을 보유한 컨테이너이다.

슬래시(/)로 표시되는 루트 디렉토리에서 아래쪽으로 UNIX 분기에 있는 모든 디렉토리. 예:

  • /usr 디렉토리는 루트 디렉토리(/)의 서브디렉토리이다.
  • /usr/spool 디렉토리는 /usr의 서브디렉토리이다.
  • /usr/spool/mail 디렉토리는 /usr/spool의 서브디렉토리이다.

. . . 기타 등등.

내가 있는 디렉토리는?

목록 1에 나타낸 것처럼, 쉘 프롬프트에서 pwd 명령을 실행하면 자신이 있는 디렉토리의 경로 이름을 표시할 수 있다. 이 명령은 현재 작업 디렉토리(present working directory)를 의미한다.


목록 1. 현재 작업 디렉토리(pwd) 표시
	
# pwd
# /home/anthony


cd의 기초

다른 디렉토리로 변경하려면 cd 뒤에 공백을 하나 넣은 다음 이동할 디렉토리를 입력한다. UNIX 명령은 대소문자를 구분하므로, 디렉토리 이름에 실제로 대문자가 있지 않은 경우에는 모두 소문자로 사용한다. 목록 2의 예제에서, 필자는 루트 디렉토리에서 끝까지 디렉토리들의 흔적을 추적하는 절대 경로를 사용하고 있으므로 필자가 변경하는 각 디렉토리는 슬래시(/)로 시작한다.


목록 2. 절대 경로를 사용하는 cd 명령
	
# cd /var
# cd /usr/spool/mail
# cd /home/anthony

권한이 있는 경우(실행 권한이 필요함) 절대 경로 이름을 사용하여 어떤 디렉토리에든 이를 수 있다. 목록 2의 명령은 예제로 제공되는 것이다. 작업 디렉토리 변경 지점은 즉시 다른 곳으로 이동하지 않고 그 안에서 어떤 작업을 수행하기 때문에, 보통 cd 명령 두 개를 연속으로 실행하지는 않는다.

입력한 디렉토리가 유효한 디렉토리가 아니거나 그 디렉토리로 이동할 권한이 없는 경우, cd 명령을 실행하면 오류가 표시된다. cd 명령에 실패하는 경우에는 시작한 디렉토리에 그대로 머문다.


내가 있는 곳은?

cd 명령을 실행했는데 아무런 오류도 표시되지 않았으므로, 명령이 올바로 작동한 것으로 가정한다. 그러나 현재 어떤 디렉토리에 있는지 확실히 아는 것이 좋을 것이다.

물론, 현재 작업 디렉토리를 확인할 필요가 있을 때마다 pwd 명령을 실행할 수 있지만, 더 나은 방법이 있다. cd 명령 실행에 성공할 때마다, 새 작업 디렉토리는 환경 변수 $PWD(Present Working Directory)에 저장된다. 이 변수는 pwd 명령과 달리 대문자로 되어 있다. 그래서 목록 3에서 볼 수 있듯이, echo를 사용하여 $PWD의 값을 표시할 수 있다.


목록 3. $PWD 표시
	
# echo $PWD
# /home/anthony

앞서 본 pwd 명령을 실행하는 것보다 훨씬 더 쉽게 보이지는 않는다. 그렇지 않은가? 아직도 자신의 디렉토리가 어떤 변수에 저장된다는 사실을 아는 것이 도움이 된다. 그 이유는 쉘 프롬프트의 일부로 $PWD의 값을 표시할 수 있기 때문이다.

내 작업 디렉토리 표시

지금까지 사용된 예제에서, 쉘 프롬프트는 해시 또는 파운드 기호(#)로 설정된다. 그러나 쉘 프롬프트에 $PWD를 포함하면, 현재 어떤 디렉토리에 있는지 알 수 있다. 그러면 cd를 실행할 때 PWD 변수가 업데이트되고 쉘 프롬프트의 일부로 표시된다.

목록 4에 표시된 행을 추가하여 홈 디렉토리의 .profile에서 쉘 프롬프트 변수 PS1을 설정할 수 있다.


목록 4. 쉘 프롬프트에 $PWD 포함
	
PS1='${PWD} > '
export PS1

다음에 로그인할 때, .profile은 로그인 프로세스의 일부로 실행해야 하고 이를 실행하면 쉘 프롬프트의 일부로 작업 디렉토리가 표시된다. 홈 디렉토리에 이르는 방법을 알고 있다면 .profile을 바로 실행할 수 있다(목록 5 참조).


목록 5. 새 쉘 프롬프트로 새 .profile 실행
	
# . ./.profile
/home/anthony >

호스트 이름, 로그인 이름 또는 몇몇 다른 표시 문자를 포함하도록 프롬프트를 사용자 정의할 수 있다. 쉘 프롬프트의 기능 향상에 대한 자세한 내용은 참고자료의 "팁: 프롬프트 매직" 기사를 참조한다.


상대적으로 더 나은 방법

트리의 한 분기에서 근처의 다른 분기로 점프만 하려고 할 때는 절대 경로를 사용하는 것이 좀 귀찮은 일이다. 그것이 바로 cd 명령에서 상대 경로의 사용을 허용하는 이유이다. 기본적으로, 상대 경로는 사용자가 현재 있는 디렉토리에 대한 상대적인 디렉토리를 가리킨다. 상대 경로를 사용한다는 것은 비록 시작 디렉토리와 대상 디렉토리에 달린 것이겠지만, 종종 키 입력 횟수가 줄어든다는 뜻이다.

예를 들어, /home/anthony에서 /home/anthony/bin으로 이동하려면 대상 디렉토리(/home/anthony/bin)의 절대 경로를 입력할 필요가 없고, 목록 6에서 보듯이 현재 자신이 위치한 디렉토리에 상대적인 새 경로를 입력하는 것으로 충분하다.


목록 6. 상대 경로를 이용한 cd 명령
	
/home/anthony > cd bin
/home/anthony/bin >

쉘 프롬프트에서 $PWD의 새 값을 어떻게 표시하는지 잘 살펴보자.

상위 디렉토리로 이동

-a 플래그를 사용하여 ls 명령을 실행하면 .(점)에 대한 항목과 ..(점-점)에 대한 다른 항목을 볼 수 있다. 한 개의 점은 현재 디렉토리를 나타낸다. 두 개의 점은 상위 디렉토리, 즉 현재 있는 디렉토리 바로 위의 디렉토리를 나타낸다.

cd를 통해 한 레벨 위로 이동할 때 상위 디렉토리를 사용하면 편리하다. 목록 7에서 그 방법을 보여준다.


목록 7. cd 명령을 사용하여 상위 디렉토리(..)로 이동
	
/var/spool/mqueue > cd ..
/var/spool > 

그러면 새 서브디렉토리로 이동할 수 있다(목록 8 참조).


목록 8. cd를 사용하여 서브디렉토리로 이동
	
/var/spool > cd mail
/var/spool/mail >

또는 목록 9에서 보듯이 단 하나의 명령으로 그 모든 작업을 수행할 수도 있다.


목록 9. 하나의 명령으로 한 분기에서 다른 분기로 이동
	
/var/spool/mqueue > cd ../mail
/var/spool/mail >

목록 10에 표시된 것처럼, 상위 레벨로 두 단계 점프한 다음 하위 레벨로 두 단계 점프할 수도 있다.


목록 10. 분기를 관통하여 점프
	
/usr/IBM/WebSphere/AppServer/profiles > cd ../../PortalServer/log
/usr/IBM/WebSphere/PortalServer/log > 

상대 경로를 사용하는 데 익숙해지면 매우 자연스럽게 사용할 수 있을 것이다.


홈 바로 가기

UNIX 사용자를 생성할 때 어떤 사용자에게든 홈 디렉토리가 정의된다. /etc/passwd에서 홈 디렉토리를 찾거나 smit를 사용할 수도 있겠지만, 홈으로 이동하는 더 좋은 방법이 있다.

cd를 사용하여 바로 홈으로 이동

홈 디렉토리로 이동하려면 목록 11에 표시된 것처럼 매개변수 없이 cd 명령을 사용한다.


목록 11. cd로 빠르게 홈 추적
	
/usr/IBM/WebSphere/PortalServer/log > cd
/home/anthony >

홈 디렉토리는 $HOME 변수에 저장된다. 이는 매개변수가 없는 cd 명령은 cd $HOME을 입력하는 것과 동일하다는 뜻이다(목록 12 참조).


목록 12. cd $HOME
	
/var/spool/mail > cd $HOME
/home/anthony >

지금 당장은 홈 디렉토리로 이동하지 않더라도 그 $HOME 변수는 자신의 홈 디렉토리를 아는 데 유용하다. 사실, $HOME 변수는 별명(물결표(~)로 표시)을 가지므로 매우 유용할 수 있다.

물결표로 간단히 홈 호출

홈 디렉토리에 있는 파일을 보거나 그 파일에 대한 작업을 하고 싶을 수도 있다. 다른 디렉토리에 있는 경우, 우선 홈으로 이동하거나 전체 디렉토리 경로를 입력할 필요가 없다. 그냥 물결표 문자만 사용하면 된다. 목록 13은 필자의 홈 디렉토리에 있는 .profile의 사본을 만드는 것을 나타낸 것이며, 이는 모두 편의상 그렇게 한 것이다.


목록 13. $HOME에 대한 물결표 단축키
	
/usr/IBM/WebSphere > cp ~/.profile ~/.profile.save

다른 사용자의 홈에 대한 원격 액세스

(사용 권한에 따라 허용되는 경우) 물결표를 사용하여 다른 사용자의 홈 디렉토리에 있는 파일을 사용하거나 나열할 수도 있다. 이렇게 하려면 목록 14에 나타낸 것처럼 그냥 물결표 다음에 사용자의 로그인 이름을 입력하면 된다.


목록 14. 물결표는 모든 사용자의 HOME
	
/home/anthony > cp ~john/.profile ~john/.profile.save

이것이 사용자의 홈 디렉토리를 추측하기보다 더 안전하고 /etc/passwd에서 이를 찾기보다 더 쉽다.


대시백

하나 또는 두 개의 명령만 실행한 다음 이전에 있었던 디렉토리($OLDPWD)로 돌아올 필요가 있을 때가 종종 발생한다. 그렇게 하려면 cd 대시백을 사용한다. cd 대시백은 cd 뒤에 대시를 입력하는 것이다(cd -). 목록 15에서 cd를 실행할 때마다 $PS1 쉘 프롬프트에서 새 디렉토리를 어떻게 표시하는지 눈여겨보자.


목록 15. 이전 디렉토리로 리턴
	
/home/anthony > cd /usr/sys/inst.images
/usr/sys/inst.images > cd -
/home/anthony >

토글 스위치

이 cd 대시백의 실행 결과, 이것을 두 번 입력하면 두 디렉토리 사이에서 앞뒤로 전환할 수 있다. 한 디렉토리에서 프로그램이나 구성 파일을 변경하고 다른 디렉토리의 로그 파일에서 변경 결과를 보려고 할 때 이 기능이 유용할 수 있다. 목록 16은 두 디렉토리 사이의 전환을 나타낸 것이다. 다른 예제와 마찬가지로, 디렉토리를 실제로 변경한 직후 실행할 수 있는 명령은 건너뛰겠다.


목록 16. $PWD와 $OLDPWD 사이의 전환
	
/data/log > cd /apps/config
/apps/config > cd -
/data/log > cd -
/apps/config >


cd 셔플

필자가 특히 큰 도움이 된다고 생각하는 기능이 바로 cd 셔플이다. cd 셔플은 두 디렉토리 경로의 차이점이 하나뿐일 때(예: 단 한 단어 차이) 이전 디렉토리에서 새 디렉토리로 간단하게 전환할 수 있는 방법이다.

UNIX를 능숙하게 다룰 줄 아는 사용자라도 이 기능을 한 번도 사용해본 적이 없다면 구문이 좀 이상하게 보일 수도 있겠지만, 어쨌든 효과 만점이다. 목록 17을 살펴보자.


목록 17. cd 셔플 구문
	
cd directorya directoryb

첫 번째 매개변수는 현재 디렉토리 경로에서 바꾸고 싶은 문자열이다. 두 번째 매개변수는 대체 문자열이다. 예를 들어, v7에서 v8로 이동하려면 목록 18에 표시된 것처럼 cd v7 v8이라고만 입력하면 된다.


목록 18. cd 셔플 사용
	
/programs/v7/reports/monthly > cd v7 v8
/programs/v8/reports/monthly >

이 단 하나의 명령으로 19번의 키 입력이 줄어들었다! 이 명령을 사용하는 것이 세 개의 상위 디렉토리를 거슬러 올라간 다음 다시 해당 디렉토리 트리로 이동하거나 절대 경로를 사용하는 것보다 훨씬 간단하다.

두 개의 매개변수를 사용하는 이 cd 명령의 용도는 무척 다양하다. 예컨대, 데이터베이스 인스턴스 이름, 분기 이름 또는 날짜만 다른 비슷한 디렉토리 경로 간을 전환할 때 이 명령을 사용하면 편리하다. cd 셔플을 사용하면 매우 짧은 시간 내에 수천 번의 키 입력을 줄일 수 있다.

히스토리를 통해 점프

히스토리의 각 연도와 월에 대한 디렉토리가 있는 경우, cd 셔플을 사용하면 한 연도에서 다른 연도로 점프할 수 있다. 목록 19에서 그 방법을 확인할 수 있다.


목록 19. 새 연도
	
/hist/2010/april/reports > cd 2010 2011
/hist/2011/april/reports >

같은 연도 내에서 다른 달로 변경하려면 목록 20에 나타낸 것처럼 from 월과 to 월을 매개변수로 하는 cd 셔플을 사용하면 된다.


목록 20. 월 디렉토리 스왑
	
/hist/2011/april/reports > cd april may
/hist/2011/may/reports > 

두 디렉토리 경로에서 문자열 하나만 다른 경우에 cd 셔플이 이상적이다.


cd가 정상인가?

필자는 스크립트에서 cd를 사용할 때 다음 명령으로 계속 진행하기 전에 항상 변경 디렉토리가 올바로 작동했는지 확인한다. 필자는 2년 동안 매일 잘 작동했던 두 행으로 구성된 정리 스크립트로 인해 운영 체제가 다운되는 문제를 한 차례 겪은 적이 있다. 원격 호스트가 꺼졌을 때 NFS가 마운트된 디렉토리가 사용 불가능해졌다. cd 명령에 실패했지만, 시스템에 정리할 것이 아무 것도 남아 있지 않을 때까지는 어쨌든 정리 스크립트가 계속 실행되었다.

다른 작업을 진행하기 전에 cd가 올바로 작동했는지 간단히 확인하는 한 가지 방법은 cd 명령 바로 뒤에 쉘 단락(shell short-circuit) &&를 사용하는 것이다. cd 명령이 실패하면 다음 명령이 계속 실행되지 않는다. 목록 21을 보자.


목록 21. cd 및 단락
	
cd /some/dir && rm *.log


결론

이 기사에서는 cd 명령에 대해 배워보았다. 절대 경로와 상대 경로를 사용하여 디렉토리를 변경하는 방법을 살펴보았고, 현재 자신이 위치한 작업 디렉토리를 표시하고 두 디렉토리 사이에서 앞뒤로 전환하는 방법을 학습했다. 홈 디렉토리를 참조하는 몇 가지 다른 방법을 살펴보았고, 현재 경로의 문자열을 대체하고 새 경로로 전환할 수 있게 해주는 cd 셔플이라는 잘 알려져 있지 않은 기능에 대해서도 배웠다.

cd 명령은 명령행에서 매우 중요하고 자주 사용되므로, 수많은 단축 기능 중 유용한 몇 가지는 꼭 알아두면 좋다.


참고자료

교육

토론

필자소개

Anthony English

Anthony English is an independent contractor from Sydney, Australia. He has worked on AIX systems since 1991 and writes the IBM developerWorks blog, AIX Down Under. You can reach Anthony at anthonyenglish@levitar.com.au.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=AIX와 UNIX
ArticleID=632099
ArticleTitle=디렉토리 트리의 상하 이동
publish-date=11182010
author1-email=anthonyenglish@levitar.com.au
author1-email-cc=mmccrary@us.ibm.com

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.