다른 경로로 이동하기
cd 또는 chdir 명령어는 현재 사용자가 위치한 경로를 다른 경로로 변경하는 기능을 합니다. 즉, 다른 경로로 이동하는 것이지요.
참고로 "현재 사용자가 위치한 경로"를 지칭하는 정식 명칭이 있습니다. 바로 Working Directory지요. 현재 사용자가 작업하고 있는 디렉터리를 뜻합니다.
사용 방법은 매우 간단합니다.
cd 명령어는 매우 많이 사용하며 간단하기 때문에 cd 명령어 자체를 학습할 건 사실상 없습니다. cd 명령어보다 중요한 건 경로(Path) 개념이죠. 그래서 cd 명령어는 이해했다고 생각하면 정작 경로 개념이 헷갈려서 버벅거리는 경우가 많아요. Shell을 거의 사용해본 적이 없다면 이해했다고 넘어가지 마시고, 반드시 실습을 하여 경로 개념을 확실히 체화하시길 강력히 권해드려요. 실습은 이번 편 후반에 있어요.
현재 경로 확인하기
현재 사용자가 작업 중인, 더 정확히는 작업을 하려고 위치한 경로를 출력하는 명령어는 pwd입니다. Print Working Directory를 줄인 이름이죠. 실습해볼까요?
실습해보세요
실습 1
-
cd / 명령어를 실행하세요.
-
pwd 명령어를 실행하세요.
-
화면이 경로가 어떻게 표시하나요?
실습 2
-
cd 명령어를 실행하세요.
-
pwd 명령어를 실행하세요.
-
어떤 경로가 표시될지 예상해보세요.
-
화면이 경로가 어떻게 표시하나요? 예상한 것과 같나요?
실습 3
-
cd ~ 명령어를 실행하세요.
-
pwd 명령어를 실행하세요.
-
어떤 경로가 표시될지 예상해보세요.
-
화면이 경로가 어떻게 표시하나요? 예상한 것과 같나요?
실습 4
-
cd ~/.. 명령어를 실행하세요.
-
pwd 명령어를 실행하세요.
-
어떤 경로가 표시될지 예상해보세요.
-
화면이 경로가 어떻게 표시하나요? 예상한 것과 같나요?
디렉터리 내용물 나열하기
현 경로에서 어떤 작업을 하려면 무엇이 있는지 알아야 해요. ls 명령어는 List를 줄여쓴 명령어로, 사용자가 현재 위치한 경로나 지정한 경로에 있는 내용물, 즉 파일이나 디렉터리를 나열하지요. 경로가 파일이면 Z Shell(zsh)에서는 해당 파일의 경로가 출력되고, 디렉터리이면 지정한 디렉터리 안에 있는 내용물을 나열해 출력해요. 이름만큼이나 사용법도 간결합니다.
실습해보세요
실습
-
ls 명령어를 실행하세요.
실습 2
-
ls . 명령어를 실행하세요.
실습 3
-
ls ~ 또는 ls ~/ 명령어를 실행하세요.
실습 4
-
ls / 명령어를 실행하세요.
실습 5
-
ls .. 명령어를 실행하세요.
"ls ..니까 상위 경로에 있는 게 나오겠네"
Shell에 익숙하지 않으시다면 이렇게 생각만 하지 마시고, 뻔히 결과가 예상되어도 꼭 실습하세요. 답이나 답을 유추할 수 있는 상황을 보며 머리로 이해하는 것과 손에 익혀서 생각할 필요도 없이 몸에 배는 건 전혀 달라요. 체화되어야 다른 학습 주제를 접할 때 의지력이 덜 들어요. 간단히 말해서 덜 어렵고 덜 힘들죠.
자주 사용하는 옵션
mkdir 명령어를 실행할 때 -p 옵션을 사용한 것, 기억하시죠? ls 명령어에도 자주 사용하는 옵션이 있어요.
-l 옵션, -o 옵션
-l- 옵션은 ls 명령어로 나열되는 항목을 긴 형식(format)으로 출력하는데, 간단히 말해서 파일이나 디렉터리 별로 속성을 함께 표시해요. 각 개체 별 정보도 함께 출력하니 화면에 표시할 정보가 많겠죠? 그래서 한 줄에 한 개체씩 나열해 보여줘요.
-o 옵션은 -l옵션과 비슷한데, 출력하는 속성 중 개체의 그룹 정보를 생략해요. 파일과 디렉터리의 그룹 정보는 권한 설명하는 편에서 다루니, 현 단계에서는 정보 하나를 빼고 출력한다고 생각하셔도 돼요.
출력된 정보를 잘 보면 -l 옵션으로 출력할 때 나오는 staff 텍스트가 있던 열(column)이 없습니다.
-a 옵션
-a 옵션은 이름이 마침표(.)로 시작하는 파일과 디렉터리도 포함해서 나열해요.
유닉스와 리눅스에서 파일명이나 디렉터리명이 마침표(.)로 시작하면 숨겨진 상태가 돼요. ls 명령어를 -a로 실행하지 않으면 나열 목록에 표시되지 않지요. 단지 Shell에서 안 보이게 해서 실수를 예방하는 정도 역할이라서, 파일과 디렉터리를 찾지 못하게 하거나 접근하지 못하게 하는 권한과 보안 역할은 하는 건 아니에요.
옵션 조합
명령어 옵션은 한 번에 여러 개를 사용하는 경우가 많습니다. 방법은 옵션을 나열하는 거죠. 예를 들어, ls 명령어의 -a와 -l 옵션을 함께 사용하려면 ls -a -l이라고 명령어를 실행하면 돼요.
몇 몇 명령어는 짧게 줄여쓴 옵션을 합쳐 명기하는 편의를 제공해요. ls 명령어의 -a -l 옵션 조합은 -al이라고 간결히 합쳐 쓸 수 있어요. ls -a -l보다 ls -al이 훨씬 편하죠.
인자와 옵션의 값
옵션은 이름을 반드시 갖지만, 이 이름에 대한 값이 필요한 경우도 있고 필요없는 경우도 있어요. 옵션 이름 바로 뒤에 값을 명기하며, 공백으로 이름과 값을 구분해요.
이 명령 줄에서 -f 옵션은 ./docker-compose.yaml이라는 값을 사용하지요.
인자는 값이 없는데, 인자 자체가 값이기 때문이에요.
이 명령 줄은 인자로 realworldpudding과 puddingcamp가 제공되는데, 이를 옵션처럼 이름과 값으로 표현하면 다음과 비슷합니다.
realworldpudding과 puddingcamp가 인자라는 요소의 값이라는 의미이며, 옵션처럼 -나 -- 문자를 사용하지 않고 값으로써 공백으로 구분하여 나열하는 것이예요. 아참, --argument라는 옵션은 실제로 존재하지 않아요. 예를 든 거예요.
인자와 옵션 순서
보통은 옵션을 사용하는 순서는 없어요. ls -a -l이나 ls -al로 실행하든 ls -l -a나 ls -la로 실행하든 동일하게 동작하지요. 왜냐하면 옵션 중에 -a가 있으면 숨겨진 개체도, -l이 있으면 긴 형식으로 출력하는 기능이 독립적으로 작용하기 때문에 그래요.
하지만, 인자가 여러 개인 경우엔 순서를 지켜야 하는 경우가 있으며, 인자와 옵션의 순서는 대개 지켜야 해요. 주로 옵션을 인자보다 먼저 배치하죠.
이런 명령 줄 형식은 해당 명령어의 도움말(--help)이나 설명서(man)에서 확인할 수 있어요.
다음은 ls 명령어의 설명 중 일부분이예요.
- 나 -- 표식이 붙은 옵션이 아무런 표식이 없는 인자([file ...])보다 앞서 배치되어 있지요?
다음은 Docker Compose라는 프로그램의 명령 줄 도움말이예요.
마찬가지로 옵션이 앞서 배치되어 있습니다. 그래서 다음 두 명령 줄 중에서 두 번째 줄은 동작하지 않아요.
인자와 옵션은 여러 개 사용하기도 하는데, 어느 옵션이 어느 인자에 대한 것인지 구분하기 위해 옵션을 인자 앞에 배치하는 관행이 형성된 것으로 보여요.