Linux mkdir 명령어: 디렉토리 생성하기

LinuxBeginner
지금 연습하기

소개

이 실습에서는 디렉토리를 생성하고 정리하는 데 필수적인 도구인 Linux 의 mkdir 명령어를 살펴봅니다. 개인 지식 관리 시스템인 '디지털 가든 (Digital Garden)'을 구축하는 과정을 시뮬레이션하며 다양한 상황에서 mkdir을 효과적으로 사용하는 방법을 익힐 것입니다. 이 실습을 통해 명령줄 인터페이스가 처음인 사용자라도 Linux 에서의 디렉토리 생성, 중첩 구조 설계, 권한 설정 등을 충분히 이해할 수 있습니다.

디지털 가든 루트 디렉토리 생성하기

먼저 디지털 가든의 뿌리가 될 루트 디렉토리를 만드는 것부터 시작해 보겠습니다.

터미널을 열면 다음과 같은 프롬프트가 나타납니다.

labex:project/$

이는 현재 위치가 /home/labex/project 디렉토리임을 의미하며, 이번 실습을 진행하기에 적절한 장소입니다.

이제 digital_garden이라는 이름의 디렉토리를 생성해 봅시다.

mkdir digital_garden

여기서 mkdir은 "make directory"의 약자입니다. 이 명령어는 현재 위치에 digital_garden이라는 새 폴더를 만듭니다.

디렉토리가 제대로 생성되었는지 확인하기 위해 디렉토리의 내용을 나열하는 ls 명령어를 사용합니다.

ls

출력 결과에 digital_garden이 보인다면 성공입니다. 만약 보이지 않는다면 당황하지 말고 mkdir 명령어를 다시 한 번 실행해 보세요.

주요 섹션 추가하기

디지털 가든에서는 생각을 주요 카테고리별로 정리하는 것이 좋습니다. 콘텐츠 유형에 따라 서로 다른 디렉토리를 만들어 보겠습니다.

digital_garden 내부에 'notes', 'projects', 'resources'라는 세 개의 디렉토리를 만들 것입니다. 다음과 같이 세 개의 명령어를 각각 실행하여 만들 수 있습니다.

mkdir ~/project/digital_garden/notes
mkdir ~/project/digital_garden/projects
mkdir ~/project/digital_garden/resources

여기서 ~/project/digital_garden/는 디지털 가든의 전체 경로를 의미합니다. ~ 기호는 사용자의 "홈 디렉토리"를 가리키는 약어입니다.

새로운 구조를 확인하려면 디지털 가든 경로와 함께 ls 명령어를 사용하세요.

ls ~/project/digital_garden

notes, projects, resources라는 세 개의 새 디렉토리가 목록에 나타나야 합니다.

각 디렉토리의 용도는 다음과 같이 활용할 수 있습니다.

  • notes: 짧은 생각이나 일상적인 회고 기록
  • projects: 장기적인 작업이나 학습 내용 관리
  • resources: 참고 자료 및 데이터 보관

중첩 디렉토리 생성하기

작업을 하다 보면 디렉토리 안에 또 다른 디렉토리를 만들어 계층 구조를 설계해야 할 때가 많습니다. -p 옵션을 사용하면 필요한 상위 디렉토리를 자동으로 생성해 주므로 깊은 구조를 만들 때 매우 유용합니다.

가상의 웹 앱 프로젝트를 위한 중첩 구조를 만들어 보겠습니다.

mkdir -p ~/project/digital_garden/projects/web_app/src/components

이 명령어는 한 번에 여러 작업을 수행합니다.

  • projects 내부에 web_app 폴더를 생성합니다.
  • web_app 내부에 src 폴더를 생성합니다.
  • 마지막으로 src 내부에 components 폴더를 생성합니다.

-p 옵션 ("parents"의 약자) 은 경로상에 존재하지 않는 상위 디렉토리가 있다면 이를 모두 함께 생성하라고 mkdir에 지시합니다. 이 옵션이 없다면 경로의 중간 단계가 존재하지 않을 경우 오류가 발생합니다.

새로운 구조를 확인하려면 재귀적으로 내용을 보여주는 -R 옵션과 함께 ls 명령어를 사용하세요.

ls -R ~/project/digital_garden/projects/web_app

중첩된 디렉토리 구조가 화면에 표시되는 것을 확인할 수 있습니다.

디렉토리 권한 설정하기

디렉토리를 생성할 때 특정 권한을 부여할 수 있습니다. 이는 디렉토리 내의 파일을 누가 접근하고, 수정하고, 실행할 수 있는지 제어하는 데 유용합니다.

접근이 제한된 'private'이라는 이름의 디렉토리를 만들어 보겠습니다.

mkdir -m 700 ~/project/digital_garden/private

이 명령어의 의미는 다음과 같습니다.

  • mkdir: 디렉토리를 생성합니다.
  • -m 700: 권한 (mode) 을 설정합니다.
    • 7: 소유자에게 읽기, 쓰기, 실행 권한 부여
    • 0: 그룹에게 아무런 권한도 주지 않음
    • 0: 기타 사용자에게 아무런 권한도 주지 않음

즉, 소유자인 본인만 이 디렉토리에 접근할 수 있습니다.

권한 설정을 확인하려면 다음 명령어를 사용하세요.

ls -ld ~/project/digital_garden/private

출력 결과는 다음과 비슷해야 합니다.

drwx------ 2 labex labex 6 Aug  7 18:40 /home/labex/project/digital_garden/private

여기서 drwx------의 의미는 다음과 같습니다.

  • d: 디렉토리임을 나타냅니다.
  • rwx: 소유자에게 읽기 (read), 쓰기 (write), 실행 (execute) 권한이 있습니다.
  • ------: 그룹이나 다른 사용자에게는 아무런 권한이 없습니다.

상세 모드 (Verbose Mode) 사용하기

상세 모드는 여러 디렉토리를 생성할 때 각 생성 과정을 피드백으로 제공하므로 유용합니다. 특히 많은 디렉토리를 한꺼번에 만들면서 모두 올바르게 생성되었는지 확인하고 싶을 때 도움이 됩니다.

상세 모드로 여러 디렉토리를 생성해 봅시다.

mkdir -v ~/project/digital_garden/resources/books ~/project/digital_garden/resources/articles ~/project/digital_garden/resources/videos

-v 옵션은 "verbose"의 약자입니다. 이 옵션은 mkdir이 디렉토리를 생성할 때마다 메시지를 출력하도록 합니다.

다음과 같은 출력 결과가 나타날 것입니다.

mkdir: created directory '/home/labex/project/digital_garden/resources/books'
mkdir: created directory '/home/labex/project/digital_garden/resources/articles'
mkdir: created directory '/home/labex/project/digital_garden/resources/videos'

이러한 피드백은 복잡한 스크립트를 작성하거나 문제를 해결할 때 매우 유용합니다.

옵션 조합하기

mkdir의 여러 옵션을 조합해서 사용할 수도 있습니다. 이를 통해 단 한 줄의 명령어로 특정 권한을 가진 복잡한 구조를 만들고 생성 과정까지 확인할 수 있습니다.

제한된 권한을 가진 가상의 연구 논문 프로젝트 구조를 만들어 보겠습니다.

mkdir -pvm 750 ~/project/digital_garden/projects/research_paper/drafts ~/project/digital_garden/projects/research_paper/references

명령어를 분석해 보겠습니다.

  • -p: 필요한 상위 디렉토리를 자동으로 생성합니다.
  • -v: 상세 모드로, 생성된 각 디렉토리에 대한 메시지를 출력합니다.
  • -m 750: 권한을 설정합니다 (소유자: 모든 권한, 그룹: 읽기 및 실행, 기타: 권한 없음).

이 명령어는 research_paper 내부에 draftsreferences 두 개의 디렉토리를 생성하며, 만약 research_paperprojects 내부에 없다면 이 또한 함께 생성합니다.

구조와 권한을 확인해 봅시다.

ls -lR ~/project/digital_garden/projects/research_paper

지정된 권한 (drwxr-x---) 을 가진 중첩 디렉토리들을 확인할 수 있습니다.

tree 명령어로 디지털 가든 시각화하기

이제 디지털 가든 구조를 모두 만들었으니, tree 명령어를 사용하여 시각적으로 확인해 보겠습니다. tree 명령어는 디렉토리 구조를 나무 모양의 형식으로 보여주어 정보를 한눈에 파악하기 쉽게 해줍니다.

tree를 사용하여 디지털 가든의 전체 구조를 확인해 봅시다.

tree ~/project/digital_garden

다음과 같은 출력이 나타나야 합니다.

/home/labex/project/digital_garden
|-- notes
|-- private
|-- projects
|   |-- research_paper
|   |   |-- drafts
|   |   `-- references
|   `-- web_app
|       `-- src
|           `-- components
`-- resources
    |-- articles
    |-- books
    `-- videos

13 directories, 0 files

이 트리 구조를 통해 우리가 만든 디지털 가든의 전체 모습을 명확히 파악할 수 있습니다. 중첩된 구조를 포함하여 생성된 모든 디렉토리가 보입니다.

설정한 권한 정보까지 포함하여 더 자세히 보고 싶다면 tree 명령어에 -p 옵션을 추가하세요.

tree -p ~/project/digital_garden

그러면 다음과 같이 각 디렉토리의 권한이 함께 표시됩니다.

[drwxrwxr-x]  /home/labex/project/digital_garden
|-- [drwxrwxr-x]  notes
|-- [drwx------]  private
|-- [drwxrwxr-x]  projects
|   |-- [drwxrwxr-x]  research_paper
|   |   |-- [drwxr-x---]  drafts
|   |   `-- [drwxr-x---]  references
|   `-- [drwxrwxr-x]  web_app
|       `-- [drwxrwxr-x]  src
|           `-- [drwxrwxr-x]  components
`-- [drwxrwxr-x]  resources
    |-- [drwxrwxr-x]  articles
    |-- [drwxrwxr-x]  books
    `-- [drwxrwxr-x]  videos

13 directories, 0 files

이러한 시각적 표현은 우리가 의도한 대로 올바른 구조와 권한을 가진 디렉토리들이 생성되었는지 검증하는 아주 좋은 방법입니다.

이 단계는 우리가 구축한 전체 구조를 확인하며 실습을 만족스럽게 마무리하는 과정입니다. tree 명령어는 이번 실습뿐만 아니라 향후 Linux 환경에서 디렉토리 구조를 탐색하고 이해하는 데 매우 유용한 도구가 될 것입니다.

요약

이 실습에서는 디지털 가든을 만드는 과정을 통해 Linux mkdir 명령어의 다양한 활용법을 살펴보았습니다. 우리가 배운 내용은 다음과 같습니다.

  1. 단일 디렉토리 생성 방법
  2. 여러 디렉토리를 한 번에 생성하는 방법
  3. -p 옵션을 사용하여 중첩된 디렉토리 구조를 만드는 방법
  4. -m 옵션으로 디렉토리 생성 시 특정 권한을 설정하는 방법
  5. -v 상세 모드 옵션을 통해 작업 피드백을 확인하는 방법

또한 이러한 옵션들을 조합하여 더 복잡한 작업을 수행하는 방법도 확인했습니다.

실습에서 직접 다루지는 않았지만, mkdir에는 특수한 상황에서 유용할 수 있는 몇 가지 추가 매개변수가 더 있습니다.

  • -Z: 생성된 각 디렉토리의 SEL 인 보안 컨텍스트를 기본 유형으로 설정합니다.
  • --context[=CTX]: -Z 와 유사하며, CTX 가 지정된 경우 SELinux 또는 SMACK 보안 컨텍스트를 CTX 로 설정합니다.
  • --help: 도움말 메시지를 표시하고 종료합니다.
  • --version: 버전 정보를 출력하고 종료합니다.

이러한 기술들은 Linux 환경에서 효율적으로 파일 시스템을 정리하는 데 기초가 됩니다. 이번에는 디지털 가든을 예로 들었지만, 이러한 기법들은 Linux 에서 디렉토리 구조를 관리해야 하는 모든 상황에 적용됩니다. Linux 를 계속 학습하면서 mkdir이 파일과 프로젝트를 정리하는 데 없어서는 안 될 필수 도구임을 실감하게 될 것입니다.