우리는 너무나 익숙하게 리눅스 명령어를 사용해서, 때로는 그 존재조차 인지하지 못할 때가 있습니다. 그 중 하나가 바로 디렉토리 변경에 사용되는 cd 명령어입니다. 이번 글에서는 cd 명령어를 더 효과적으로 사용하는 방법과 몇 가지 유용한 팁을 알아보겠습니다. 어쩌면 여러분은 더 이상 cd 명령어를 사용할 필요가 없을지도 모릅니다!
무심코 지나치는 명령어
우리가 매일 눈을 깜박이지만, 그 움직임을 의식하지 못하는 것처럼, 리눅스 명령어 중 일부는 우리의 무의식 속에서 작동합니다. 이러한 명령어들은 너무 작고 단순해서, 우리가 매일 사용함에도 불구하고 그 존재를 뚜렷하게 인지하기 어렵습니다.
리눅스 컴퓨터를 처음 사용하기 시작한 후 얼마 지나지 않아, 우리는 bash와 같은 쉘에서 cd 명령어를 사용하는 방법을 배우게 됩니다. 아마도 다른 운영체제에서 이전에 사용해 본 경험이 있어서 별도의 설명이 필요 없을 수도 있습니다. cd 명령어는 현재 작업 디렉토리를 변경하는 데 사용됩니다. 하지만 이것이 cd 명령어에 대해 우리가 알아야 할 전부일까요?
사실, cd 명령어는 우리가 생각하는 것보다 훨씬 더 많은 기능을 제공합니다. 지금부터 cd 명령어 사용의 효율성을 높일 수 있는 몇 가지 힌트와 팁을 살펴보겠습니다.
기본적인 cd 명령어 활용
먼저, cd 명령어의 기본적인 사용법을 간략히 짚고 넘어가겠습니다.
만약 여러분이 홈 디렉토리에 있고, /usr/lib/firefox/browser 디렉토리로 이동한 후 다시 홈 디렉토리로 돌아가고 싶다면, 다음과 같은 명령어를 사용할 수 있습니다.
cd /usr/lib/firefox/browser/
cd /home/dave

전체 디렉토리 경로를 일일이 입력할 필요는 없습니다. 자동 완성 기능을 활용하면 됩니다. 경로의 각 부분에 대해 디렉토리 이름을 다른 것과 구별할 수 있을 만큼의 문자만 입력한 후 Tab 키를 누르면 쉘이 나머지 디렉토리 이름을 자동으로 완성해 줍니다.
예를 들어, 명령줄에 다음과 같이 입력한 후
cd /usr/lib/fire
Tab 키를 누르면, 쉘은 자동으로 나머지 “firefox” 부분을 완성할 것입니다. 그 다음 “/b”를 추가하고 다시 Tab 키를 누르면 “browser” 디렉토리가 명령어에 추가됩니다.
쉘은 탭 자동 완성 과정을 반복할 수 있도록 뒤에 슬래시를 추가합니다. 이것이 첫 번째 명령어에 슬래시가 뒤따라 오는 이유이며, 두 번째 명령어에는 슬래시가 없는 이유이기도 합니다.
물결표(~)를 사용하면 파일 시스템 내 어디에서든 홈 디렉토리로 빠르게 돌아갈 수 있습니다. 다음과 같이 입력해 보세요.
cd ~

다음은 파일 시스템의 루트에서부터 대상 디렉토리까지 전체 경로를 나타내는 절대 경로의 예시입니다.
상대 경로는 현재 작업 디렉토리를 기준으로 참조됩니다. 만약 홈 디렉토리에 “work”라는 디렉토리가 있다면, tree 명령어를 사용하여 디렉토리 구조를 확인할 수 있습니다. 디렉토리 트리 참조 작업 디렉토리 내에서 다음을 입력해 보세요.
tree

만약 작업 디렉토리 내에 “dev”라는 디렉토리가 있고, 파일 시스템의 루트 디렉토리에도 “dev”라는 디렉토리가 있다면, ls 명령어를 -d (디렉토리) 옵션과 함께 사용하여 이 두 디렉토리를 각각 볼 수 있습니다. -hl(사람이 읽기 쉬운 긴 목록) 옵션은 ls 명령어에게 디렉토리 크기를 읽기 쉬운 단위로 표시하도록 지시합니다.
dev라고 입력하면, 쉘은 현재 디렉토리의 “dev”를 의미한다고 가정합니다. 루트 디렉토리의 “dev”를 강제로 참조하려면, 아래와 같이 파일 시스템 루트를 나타내는 슬래시를 앞에 추가하기만 하면 됩니다.
ls -d dev -hl
ls -d /dev -hl

cd 명령어는 ls 명령어와 유사하게 동작합니다. 아래와 같이 디렉토리를 “dev”로 참조하면, 쉘은 현재 작업 디렉토리의 “dev”를 의미한다고 가정합니다.
cd dev

선행 슬래시가 없는 더 긴 경로 역시 현재 작업 디렉토리에서 시작하는 것으로 간주됩니다.
cd dev/mobile/android

상위 디렉토리로 이동하기
이중 점(..) 식별자는 현재 작업 디렉토리의 상위 디렉토리를 나타냅니다. 만약 여러분이 깊이 중첩된 하위 디렉토리 내부에 있다면, cd 명령어와 함께 ..를 사용하여 현재 디렉토리의 상위 디렉토리로 이동할 수 있습니다.
이를 통해 디렉토리 트리에서 두 단계 위로 이동할 수 있습니다. 명령어에 ..을 더 추가하면, 디렉토리 트리에서 원하는 만큼 상위 레벨로 이동할 수 있습니다.
다음과 같이 입력해 보세요.
cd ..
cd ../..

이러한 작업을 수행하는 별칭 세트를 만들 수도 있습니다. 다음과 같이 입력해 보세요.
alias .2="cd ../.."
alias .3="cd ../../.."

이 별칭은 명령어와 동일한 방식으로 사용할 수 있습니다.

컴퓨터를 재부팅할 때마다 별칭을 지속적으로 사용하려면, .bashrc 또는 .bash_aliases 파일에 해당 별칭을 추가해야 합니다.
두 디렉토리 사이를 빠르게 이동하기
하이픈(-)은 특수한 기능을 가진 또 다른 기호입니다. 하이픈을 사용하면 바로 이전에 방문했던 디렉토리로 다시 이동할 수 있습니다.
만약 여러분이 “c” 디렉토리에 있다고 가정해 봅시다. cd 명령어를 사용하여 “forth” 디렉토리로 이동할 수 있습니다. 그 후, cd -를 사용하여 두 디렉토리 사이를 앞뒤로 이동할 수 있습니다.
다음과 같이 입력해 보세요.
cd ../forth
cd -
cd -
이동하려는 디렉토리의 이름이 이동하기 전에 표시됩니다.
상대 경로의 기준 변경하기
쉘은 현재 작업 디렉토리를 상대 경로의 “루트” 또는 기준 디렉토리로 사용합니다. CDPATH 환경 변수를 사용하여 상대 경로의 기준 디렉토리로 다른 위치를 설정할 수 있습니다. 만약 여러분이 파일 시스템 트리의 특정 섹션에서 대부분의 시간을 보낸다면, 이 방법을 통해 매일 많은 키 입력 횟수(그리고 시간)를 절약할 수 있습니다.
만약 work/dev/projects를 상대 경로의 기준 디렉토리로 설정하고 싶다면, 다음과 같이 입력해 보세요.
export CDPATH=/home/dave/work/dev/projects

이제 cd 명령어를 사용할 때마다, 쉘은 CDPATH 환경 변수에 지정된 위치를 먼저 확인합니다. 만약 cd 명령어에 제공된 대상 디렉토리 이름과 일치하는 디렉토리가 있다면, 해당 디렉토리로 이동합니다.
이제 파일 시스템 내 어디에 있든지, cd 명령어를 사용할 때 쉘은 대상 디렉토리가 기준 디렉토리 내에 있는지 여부를 확인합니다. 만약 그렇다면, 해당 대상 디렉토리로 이동합니다.
대상 디렉토리가 선행 슬래시(/)로 시작하는 절대 경로인 경우에는, CDPATH 환경 변수의 영향을 받지 않습니다.
다음 예시를 통해 이를 확인해 봅시다.
cd c
cd prolog
cd /usr
cd forth

CDPATH 환경 변수는 PATH 환경 변수와 마찬가지로 일종의 경로입니다. 명령어를 입력하면 쉘은 PATH 환경 변수에서 일치하는 위치를 검색합니다. CDPATH를 사용할 때 쉘은 CDPATH 환경 변수에서 일치하는 위치를 검색합니다. 또한 PATH와 마찬가지로 CDPATH에도 여러 개의 위치가 포함될 수 있습니다.
만약 쉘이 CDPATH 환경 변수에 지정된 다른 위치보다 현재 디렉토리를 먼저 검색하도록 하려면, 다음과 같이 경로 시작 부분에 마침표(.)를 추가하면 됩니다.
export CDPATH=.:/home/dave/work/dev/projects
이 설정을 영구적으로 만들려면, .bashrc와 같은 설정 파일에 해당 설정을 추가해야 합니다.
한 가지 주의해야 할 점은, 기준 디렉토리를 설정하면 스크립트 내에서 수행되는 디렉토리 변경에도 영향을 미친다는 것입니다. 이를 방지하려면, 스크립트 내에서 절대 경로를 사용하거나 아래와 같이 .bashrc 파일에서 테스트를 수행할 수 있습니다.
if test “${PS1+set}”; then CDPATH=.:/home/dave/work/dev/projects; fi
이 테스트는 명령줄 프롬프트 변수 $PS1이 설정되어 있는지 확인합니다. CDPATH 환경 변수는 테스트가 성공한 경우에만 설정됩니다.
shopt 명령어를 활용한 cd 명령어 확장
shopt 명령어를 사용하면 쉘의 특정 옵션을 설정할 수 있습니다. 이러한 옵션 중 일부는 cd 명령어의 사용을 향상시킬 수 있습니다. 옵션을 활성화하려면 shopt 명령어와 함께 -s (활성화) 옵션을 사용하여 옵션 이름을 전달하면 됩니다.
cdspell 옵션은 디렉토리 이름을 확인하고, 문자 순서가 바뀌거나, 문자가 누락되거나, 불필요한 문자가 포함된 이름을 포함하여, 자주 발생하는 입력 오류를 수정합니다. 만약 수정된 이름과 일치하는 디렉토리를 찾으면, 수정된 경로가 출력되고 cd 작업이 수행됩니다.
예를 들어, 다음과 같이 입력하여 cdspell 옵션을 설정하고 “Desktop”의 철자를 일부러 틀리게 입력했을 때, 쉘이 이를 수정하는지 확인해 봅시다.
shopt -s cdspell
cd Desktpo

쉘은 철자 오류를 감지하여 수정하고 “Desktop” 디렉토리로 이동했습니다.
cd 명령어와 함께 사용할 수 있는 또 다른 shopt 옵션은 autocd입니다. 이 옵션을 활성화하면 cd 명령어를 입력할 필요가 없어집니다. 명령어, 스크립트 또는 실행 파일(예: 별칭)이 아닌 입력은 모두 대상 디렉토리로 사용됩니다. 만약 입력된 경로로 이동할 수 있다면, 해당 경로가 터미널 창에 출력되고 해당 디렉토리로 이동합니다.
예를 들어, 다음과 같이 입력해 봅시다.
shopt -s autocd
/usr/local/games
/etc
~

cd 명령어 없이도 파일 시스템 전체를 이동할 수 있습니다!
shopt를 통해 변경된 설정은 스크립트가 아닌 대화형 쉘에만 영향을 미칩니다.
cd 명령어 활용의 극대화
이 모든 기능을 전부 사용할 필요는 없습니다. 하지만 이 글을 통해 여러분이 흥미롭거나 유용하다고 생각하는 부분을 발견했기를 바랍니다. 결국 명령줄 탐색 속도를 높이거나 간소화하는 모든 것은 긍정적인 변화를 가져올 수 있습니다!
