Linux / 명령어 / mkdir - 디렉터리 생성

mkdir은 새로운 디렉터리를 만드는 명령입니다. -p를 사용하면 존재하지 않는 상위 디렉터리를 함께 만들 수 있어 프로젝트 구조 생성과 배포 스크립트에 특히 유용합니다.

이 글에서는 기본 문법, 여러 디렉터리 생성, 권한 지정, umask와의 관계, 이미 존재하는 경로를 다루는 방법을 GNU Coreutils 기준으로 설명합니다.

mkdir 명령어란?

mkdir은 지정한 이름으로 디렉터리를 생성합니다. 기본적으로 상위 경로가 없거나 같은 이름의 항목이 이미 있으면 실패합니다. -p를 사용하면 필요한 부모 디렉터리를 만들고 이미 존재하는 디렉터리는 오류로 처리하지 않습니다.

기본 문법

mkdir [옵션] 디렉터리 ...

파일명이나 경로에 공백이 있으면 따옴표로 감싸고, 하이픈으로 시작하는 이름은 가능한 경우 -- 뒤에 지정합니다. 지원 옵션은 배포판과 GNU Coreutils 버전에 따라 다를 수 있으므로 mkdir --help와 man mkdir으로 현재 시스템의 설명을 확인하세요.

mkdir 기본 사용법

디렉터리 하나 만들기

현재 위치에 디렉터리를 만들거나 절대·상대 경로를 지정할 수 있습니다.

mkdir logs
mkdir /srv/myapp

여러 디렉터리 한 번에 만들기

각 경로는 독립된 인수입니다. 공백이 있는 이름은 따옴표로 감쌉니다.

mkdir src tests docs
mkdir 'project files'

상위 디렉터리까지 함께 만들기

-p는 중간 경로가 없을 때 함께 생성합니다. 같은 디렉터리가 이미 있어도 계속 진행하므로 반복 실행하는 초기화 스크립트에 적합합니다.

mkdir -p project/src/components
mkdir -p /srv/myapp/{bin,config,logs}

생성된 경로 확인하기

mkdir도 정상 완료 시 대개 출력이 없습니다. -p는 없는 부모 경로를 함께 만듭니다.

mkdir -p demo-dir/logs
find demo-dir -type d

예시 출력:

demo-dir
demo-dir/logs

디렉터리가 생겼더라도 권한이 예상과 같다는 뜻은 아닙니다. stat -c '%a %n' demo-dir demo-dir/logs로 실제 권한을 확인하세요.

주요 옵션

옵션 설명
-p, --parents 누락된 상위 디렉터리를 만들고 기존 디렉터리를 오류로 처리하지 않습니다.
-m MODE 새로 지정한 최종 디렉터리의 권한 모드를 설정합니다.
-v, --verbose 생성한 각 디렉터리를 출력합니다.
-Z 지원되는 시스템에서 기본 SELinux 보안 컨텍스트를 적용합니다.
--context=CONTEXT 지원되는 환경에서 새 디렉터리에 지정한 보안 컨텍스트를 설정합니다.

긴 옵션은 의미를 파악하기 쉽고 스크립트 검토에도 도움이 됩니다. 다만 이식성이 중요한 스크립트에서는 대상 시스템이 해당 GNU 확장 옵션을 지원하는지 먼저 확인하세요.

실전 활용 예제

권한을 지정해 디렉터리 만들기

-m에는 chmod와 같은 숫자 또는 기호 모드를 사용할 수 있습니다. 실제 정책과 상위 디렉터리 권한도 함께 확인하세요.

mkdir -m 750 private-data
mkdir -m u=rwx,go= project-secret

부모 디렉터리 권한 제어하기

mkdir -p -m 750 a/b/c의 -m은 명령줄의 최종 디렉터리에 적용되며 새로 만들어진 부모 모두에 같은 모드를 보장하지 않습니다. 부모까지 통제하려면 제한적인 umask로 생성한 뒤 필요한 권한을 명시적으로 점검합니다.

( umask 027; mkdir -p app/cache/data )
find app -type d -exec chmod 750 {} +

생성 결과 확인하기

자동화에서는 종료 상태를 확인하고, 권한과 소유권이 중요한 경로는 stat 또는 namei로 검증합니다.

mkdir -pv deploy/releases/current
stat -c '%A %U:%G %n' deploy deploy/releases deploy/releases/current

mkdir와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
mkdir 일반 디렉터리 생성 작업 공간과 디렉터리 트리를 만들 때
install -d 디렉터리 생성과 권한·소유자 설정 설치·배포 과정에서 속성까지 지정할 때
rmdir 빈 디렉터리 제거 내용이 없는 디렉터리만 안전하게 지울 때
mktemp -d 예측하기 어려운 임시 디렉터리 생성 스크립트용 임시 작업 공간이 필요할 때

사용할 때 주의할 점

-p는 오타도 디렉터리로 만든다

긴 경로에서 철자를 잘못 입력해도 필요한 부모로 간주해 그대로 만들 수 있습니다. 중요한 시스템 경로는 변수 값과 최종 경로를 확인한 뒤 생성하세요.

권한은 umask의 영향을 받는다

-m을 사용하지 않은 기본 권한은 현재 umask에 따라 제한됩니다. 협업 서버에서는 예상 권한을 숫자로 단정하지 말고 실제 값을 확인하세요.

생성 권한과 접근 권한은 다르다

상위 디렉터리에 쓰기·실행 권한이 없으면 하위 디렉터리를 만들 수 없습니다. 단순히 대상 경로의 권한만 보지 말고 전체 경로를 확인해야 합니다.

FAQ

상위 디렉터리가 없어도 한 번에 만들 수 있나요?

mkdir -p 상위/하위/대상을 사용하면 누락된 중간 디렉터리가 함께 생성됩니다.

이미 존재하는 디렉터리에서 오류가 나지 않게 하려면 어떻게 하나요?

-p를 사용합니다. 단, 같은 경로에 일반 파일이 있으면 실패합니다.

mkdir -m의 권한이 부모 디렉터리에도 적용되나요?

일반적으로 -p가 새로 만든 부모 디렉터리 모두에 동일하게 적용되는 것은 아닙니다. 부모 권한은 umask 또는 별도의 chmod로 관리하세요.

임시 디렉터리도 mkdir로 만들면 되나요?

고정된 이름이 필요한 일반 디렉터리는 괜찮지만, 공유 임시 영역에서 안전한 고유 이름이 필요하면 mktemp -d가 적합합니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

리눅스의 /etc, /var, /usr, /home, /proc, /dev 등 주요 디렉토리별 용도와 이름의 의미를 정리합니다. 리눅스 파일시스템 구조를 처음 배우거나 서버 관리에 필요한 디렉토리를 확인할 때 참고할 수 있습니다.

Linux / 명령어 / gunzip - gzip 압축 파일 풀기

Linux / 명령어 / gunzip - gzip 압축 파일 풀기

Linux gunzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / nc - TCP·UDP 연결과 포트 점검

Linux / 명령어 / nc - TCP·UDP 연결과 포트 점검

Linux nc 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / nice - 새 명령의 CPU 우선순위 조정

Linux / 명령어 / nice - 새 명령의 CPU 우선순위 조정

Linux nice 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / timedatectl - 시간대와 시간 동기화 상태 관리

Linux / 명령어 / timedatectl - 시간대와 시간 동기화 상태 관리

Linux timedatectl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux passwd 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ip - 인터페이스·주소·라우팅 상태와 설정

Linux / 명령어 / ip - 인터페이스·주소·라우팅 상태와 설정

Linux ip 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

리눅스 Bash의 ;, &&, ||, &, |, |&, ! 차이를 종료 상태와 실제 예제로 설명합니다. 조건부 실행, 백그라운드 작업, 파이프라인과 pipefail 사용법까지 정리합니다.

Linux / 명령어 / curl - URL 요청과 HTTP 응답 확인

Linux / 명령어 / curl - URL 요청과 HTTP 응답 확인

Linux curl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / tracepath - 네트워크 경로와 경로 MTU 확인

Linux / 명령어 / tracepath - 네트워크 경로와 경로 MTU 확인

Linux tracepath 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.