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 |
프로그램 버전을 출력한다. |
동작 원리
- 경로 파싱: 인자로 받은 경로 문자열을 파일 시스템 트리 구조로 분해한다.
- 권한 검사: 대상 경로의 상위 디렉터리에 대한 쓰기·실행 권한이 있는지 검사한다.
- inode 할당: 파일 시스템이 새 디렉터리용 inode(파일 메타데이터 블록)을 할당한다.
- 디렉터리 엔트리 초기화:
.(자기 자신)과..(부모 디렉터리) 엔트리를 만든 뒤, 디렉터리 블록에 기록한다. - 메타데이터 설정: 소유자 UID/GID, 모드 비트(권한), 타임스탬프 등을 초기화한다.
역사
- 1971년: 최초의 UNIX 버전(1st Edition)에서
mkdir명령이 도입되었다. 당시 파일 시스템은 단일 계층 구조였으나, 디렉터리 개념을 지원하기 위해 필요했다. - BSD와 System 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는 파일 시스템 관리와 자동화 스크립트에서 가장 기본적이면서도 필수적인 명령어 중 하나이며, 그 단순한 인터페이스 뒤에 복잡한 파일 시스템 메커니즘이 작동한다.