mkdir

mkdir – “make directory”의 약어로, UNIX·Linux·POSIX 계열 운영체제에서 새로운 디렉터리(폴더)를 생성하는 명령어이다.

개념 및 목적

  • 파일 시스템 상에 아직 존재하지 않는 디렉터리를 만들고, 그 디렉터리의 메타데이터(소유자, 권한, 생성 시각 등)를 초기화한다.
  • 쉘 스크립트·시스템 관리·소프트웨어 설치 과정 등에서 디렉터리 구조를 자동으로 구성할 때 필수적으로 사용된다.

기본 문법

mkdir [옵션] 디렉터리명...
  • 하나 이상의 디렉터리명을 지정할 수 있으며, 공백으로 구분한다.
  • 상대 경로나 절대 경로 모두 허용한다.

주요 옵션

옵션 의미
-p 상위 디렉터리가 존재하지 않을 경우, 필요한 모든 상위 디렉터리를 재귀적으로 생성한다. (예: mkdir -p /a/b/c)
-m 모드 새 디렉터리의 접근 권한을 8진수 혹은 심볼릭 모드(rwxr-xr-x 등)로 지정한다. 기본값은 현재 umask이 적용된 값이다.
-v 생성되는 각 디렉터리 이름을 표준 출력에 표시한다(“verbose” 모드).
-Z SELinux 보안 컨텍스트를 지정한다(SELinux 활성화 시스템 전용).
--help 사용법 요약을 보여준다.
--version 프로그램 버전을 출력한다.

동작 원리

  1. 경로 파싱: 인자로 받은 경로 문자열을 파일 시스템 트리 구조로 분해한다.
  2. 권한 검사: 대상 경로의 상위 디렉터리에 대한 쓰기·실행 권한이 있는지 검사한다.
  3. inode 할당: 파일 시스템이 새 디렉터리용 inode(파일 메타데이터 블록)을 할당한다.
  4. 디렉터리 엔트리 초기화: .(자기 자신)과 ..(부모 디렉터리) 엔트리를 만든 뒤, 디렉터리 블록에 기록한다.
  5. 메타데이터 설정: 소유자 UID/GID, 모드 비트(권한), 타임스탬프 등을 초기화한다.

역사

  • 1971년: 최초의 UNIX 버전(1st Edition)에서 mkdir 명령이 도입되었다. 당시 파일 시스템은 단일 계층 구조였으나, 디렉터리 개념을 지원하기 위해 필요했다.
  • BSDSystem V 계열에서 각각 구현이 확장되었으며, POSIX 표준(1995년)에서 mkdir와 그 옵션(-p, -m 등)이 공식 정의되었다.
  • 현재 대부분의 GNU Coreutils, BusyBox, macOS, Windows Subsystem for Linux(WSL) 등에서 동일한 인터페이스를 제공한다.

사용 예시

# 현재 디렉터리에 test 라는 새 폴더 생성
mkdir test

# 여러 개의 디렉터리를 한 번에 생성
mkdir dir1 dir2 dir3

# 중간 디렉터리까지 자동으로 생성
mkdir -p projects/2024/report

# 권한을 750으로 지정하면서 생성
mkdir -m 750 secret_folder

# 생성 과정을 화면에 출력
mkdir -v logs

관련 명령어

  • rmdir – 비어 있는 디렉터리를 삭제한다.
  • rm -r – 디렉터리와 그 안의 파일·서브디렉터리를 재귀적으로 삭제한다.
  • cp -r – 디렉터리를 복사한다.
  • mv – 디렉터리(및 파일)를 이동하거나 이름을 바꾼다.
  • chmod, chown, chgrp – 디렉터리 권한·소유자를 변경한다.

주의 사항

  • 권한 오류: 상위 디렉터리에 쓰기·실행 권한이 없으면 mkdir: Permission denied 오류가 발생한다.
  • 이미 존재: 동일한 경로의 디렉터리가 이미 존재하면 mkdir: cannot create directory ‘name’: File exists가 출력된다. -p 옵션을 사용하면 이런 경우에도 오류가 발생하지 않는다.
  • 파일 시스템 제한: 일부 파일 시스템(예: FAT, exFAT)에서는 디렉터리 이름 길이, 문자 집합, 최대 디렉터리 수 등에 제한이 있다.

구현 예시 (POSIX C)

#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>

int make_dir(const char *path, mode_t mode) {
    if (mkdir(path, mode) == -1) {
        return errno;  // 실패 원인 반환
    }
    return 0;          // 성공
}

위 코드는 POSIX mkdir() 시스템 콜을 직접 호출하여 새 디렉터리를 만든다.


mkdir는 파일 시스템 관리와 자동화 스크립트에서 가장 기본적이면서도 필수적인 명령어 중 하나이며, 그 단순한 인터페이스 뒤에 복잡한 파일 시스템 메커니즘이 작동한다.

둘러보기

더 찾아볼 만한 주제