Mkdir

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

mkdir은 디렉토리를 생성하는 데 사용되는 명령어이다. 초기 유닉스 시스템에서는 커널에 mkdir 시스템 호출이 없어 mknod 명령어를 통해 디렉토리를 생성했으며, MS-DOS 버전 2 이상에서도 사용할 수 있게 되었다. GNU coreutils에 포함된 버전은 데이비드 매켄지가 작성했으며, DOSBox 및 KolibriOS에서도 사용 가능하다. mkdir 명령어는 디렉토리 이름을 인자로 받아 현재 디렉토리에 새로운 디렉토리를 생성하며, --parents (-p), --mode (-m), -v (--verbose) 등의 옵션을 지원한다. POSIX 표준에 따라 시스템 호출로 구현되어 있으며, MSVC++에서는 _mkdir() 함수로 유사하게 제공된다.

Mkdir - [IT 관련 정보]에 관한 문서
일반 정보
명령어 종류명령어
설명디렉터리 생성 명령어
개발자
개발자 목록다양한 오픈 소스 개발자
상업 개발자
출시 정보
운영 체제유닉스
유닉스 계열
플랜 9
인페르노
도스
MSX-DOS
FlexOS
OS/2
마이크로소프트 윈도우
ReactOS
KolibriOS
플랫폼크로스 플랫폼
라이선스
라이선스 정보GNU coreutils: GPLv3+
MS-DOS, Plan 9: MIT
FreeDOS: GPLv2+
ReactOS: GPLv2
📚 더 읽어볼만한 페이지
  • 내부 도스 명령어 - TYPE (도스 명령어)
    TYPE은 텍스트 파일의 내용을 화면에 표시하는 기능을 수행하는 명령어이며, MS-DOS, 윈도우 등 다양한 운영 체제에서 지원된다.
  • 내부 도스 명령어 - Echo (명령어)
    echo 명령어는 다양한 운영체제 및 셸 환경에서 입력받은 문자열을 그대로 출력하는 명령어로, POSIX 표준의 부재로 시스템에 따라 동작 방식에 차이가 있어 이식성이 떨어진다는 평가를 받는다.
  • 윈도우 관리 - 블루스크린
    블루스크린은 윈도우 운영체제에서 발생하는 치명적인 오류로, 컴퓨터 작동을 멈추고 파란색 화면에 오류 메시지를 표시하며, 하드웨어 또는 소프트웨어 문제로 인해 발생하고, 시스템 복원, 안전 모드 부팅 등의 방법으로 대처한다.
  • 윈도우 관리 - 파워셸
    파워셸은 마이크로소프트에서 개발한 작업 자동화 솔루션으로, 명령줄 셸과 스크립트 언어의 기능을 결합하여 윈도우 시스템 관리를 위해 설계되었으며, .NET 프레임워크 기반의 객체 지향적 특징을 갖고 다양한 플랫폼에서 자동화 스크립트 작성 및 실행, 시스템 구성 관리 등에 활용된다.
  • 유닉스 SUS2008 유틸리티 - AWK
    AWK는 1977년에 개발된 텍스트 처리 및 프로그래밍 언어로, 유닉스 환경에서 텍스트 처리를 위해 설계되었으며 정규 표현식 처리 기능을 통해 텍스트 분석, 데이터 추출, 보고서 생성 등 다양한 작업을 수행한다.
  • 유닉스 SUS2008 유틸리티 - 로케일
    로케일은 소프트웨어 국제화 및 지역화에서 사용자 문화적 배경에 맞춰 사용 환경을 조정하는 설정으로, 표시 언어, 숫자/날짜 형식, 문자 분류, 통화 형식 등을 포함한다.

2. 역사

초기 유닉스(4.1BSD, 초기 시스템 V)에서는 커널mkdir() 시스템 호출이 없었기 때문에, 이 명령어는 setuid 루트 권한이 필요했다. 대신 mknod 시스템 호출을 사용하여 디렉터리를 생성하고, '.'와 '..' 디렉터리 항목을 수동으로 연결해야 했다.

이 명령어는 MS-DOS 버전 2 이상에서 사용할 수 있게 되었다. 디지털 리서치의 DR DOS 6.0데이터라이트의 ROM-DOS 역시 mdmkdir 명령어 구현을 포함한다.

GNU coreutils에 포함된 mkdir 버전은 데이비드 매켄지(David MacKenzie)가 작성했다. 또한 오픈 소스 MS-DOS 에뮬레이터인 DOSBox와 KolibriOS에서도 이 명령어를 사용할 수 있다.

3. 사용법

ReactOS의 mkdir 명령어
ReactOSmkdir 명령어


mkdir 명령어의 가장 기본적인 사용법은 다음과 같다.


mkdir 디렉터리_이름


위 명령어에서 `디렉터리_이름`은 새로 만들고자 하는 디렉터리의 이름을 의미한다. 이렇게 명령어를 입력하면, 현재 작업 중인 디렉터리 안에 지정한 이름의 새 디렉터리가 생성된다.

유닉스 계열 운영체제나 윈도우(명령 확장 기능이 활성화된 경우 기본값)에서는 한 번에 여러 개의 디렉터리 이름을 지정하여 동시에 생성할 수도 있다. 예를 들어 `mkdir 디렉터리1 디렉터리2`와 같이 입력하면 현재 위치에 '디렉터리1'과 '디렉터리2'가 모두 만들어진다.

3.1. 옵션

유닉스 계열 운영 체제에서 `mkdir` 명령어는 다양한 옵션을 제공하며, 이를 통해 디렉터리 생성 과정을 제어할 수 있다. 주요 옵션은 다음과 같다.

* `-p` (`--parents`): 지정한 디렉터리의 경로에 포함된 상위 디렉터리가 존재하지 않을 경우, 해당 상위 디렉터리까지 자동으로 생성한다. 경로명에 이미 존재하는 디렉터리가 포함되어 있어도 오류가 발생하지 않는다. 복잡한 디렉터리 구조를 만들 때 유용하다.
* `-m` (`--mode`): 새로 생성하는 디렉터리의 파일 권한을 8진수 형식으로 직접 지정한다. 셸 스크립트 등에서 임시 디렉터리의 접근 권한을 설정할 때 주로 사용된다.
* `-v` (`--verbose`): 디렉터리가 성공적으로 생성되었을 경우, 생성된 디렉터리의 이름을 화면에 출력한다. 주로 `-p` 옵션과 함께 사용하여 생성 과정을 확인할 때 사용된다.

3.1.1. -p (--parents)

`-p` 옵션은 `--parents` 옵션과 동일하며, 지정된 디렉터리를 생성할 때 필요한 상위 디렉터리가 존재하지 않으면 자동으로 함께 생성한다. 예를 들어, `mkdir -p a/b` 명령어는 현재 디렉터리에 'a' 디렉터리가 없을 경우 'a'를 먼저 만들고, 그 다음 'a' 디렉터리 내부에 'b' 디렉터리를 생성한다.

이 옵션의 중요한 특징 중 하나는 생성하려는 디렉터리 경로의 일부 또는 전체가 이미 존재하더라도 오류를 발생시키지 않는다는 점이다. 따라서 `-p` 옵션은 여러 단계로 이루어진 복잡한 디렉터리 구조를 한 번에 만들 때 매우 유용하게 사용된다. 각 단계별 디렉터리 존재 여부를 미리 확인할 필요 없이 명령어를 실행할 수 있어 편리하다.

3.1.2. -m (--mode)

'--mode' 또는 '-m' 옵션은 'mkdir' 명령어로 디렉토리를 생성할 때 파일 권한을 8진수 표기법으로 직접 지정하는 데 사용된다. 예를 들어, 특정 사용자만 접근 가능한 디렉토리를 만들 때 유용하다.

이 옵션은 주로 셸 스크립트 내에서 임시 디렉토리를 생성할 때 활용된다. 스크립트 실행 중 생성된 임시 파일이나 데이터가 다른 사용자에게 노출되거나 수정되는 것을 방지하기 위해, '-m' 옵션으로 권한을 제한하여 보안을 강화할 수 있다.

3.1.3. -v (--verbose)

`-v` 또는 `--verbose` 옵션은 `mkdir` 명령어가 실제로 어떤 디렉터리를 생성했는지 그 이름을 화면에 보여준다. 이 옵션은 종종 -p 옵션과 함께 사용된다.

3.2. 예시

`-p` 옵션의 동작 예시는 다음과 같다.

mkdir -p /tmp/a/b/c

만약 `/tmp/a`는 존재하지만 `/tmp/a/b`가 존재하지 않는다면, `mkdir`은 `/tmp/a/b/c`를 생성하기 전에 `/tmp/a/b`를 생성한다.

셸 확장 기능을 사용하면 한 번의 명령으로 더 복잡한 디렉터리 트리 구조를 생성할 수 있다. (이것은 `mkdir` 자체의 기능이 아닌 셸의 기능이다.)

mkdir -p tmpdir/{trunk/sources/{includes,docs},branches,tags}

위 명령은 다음과 같은 디렉터리 구조를 생성한다.

tmpdir
________|______
| | |
branches tags trunk
|
sources
____|_____
| |
includes docs

bash 스크립트에서 `mkdir`과 함께 변수를 사용하는 경우, POSIX `special` 내장 명령어인 'eval'이 유용할 수 있다.

DOMAIN_NAME=includes,docs
eval "mkdir -p tmpdir/{trunk/sources/{${DOMAIN_NAME}},branches,tags}"

4. 시스템 호출

초기 버전의 유닉스(4.1BSD, 초기 버전의 시스템 V)에서는 커널에 `mkdir()` 시스템 호출이 없었다. 이 때문에 `mkdir` 명령어는 setuid 루트 권한으로 실행되어야 했다. 대신 mknod() 시스템 호출을 사용하여 디렉터리를 생성하고, 명령어 내부에서 `.`과 `..` 같은 디렉터리 항목을 수동으로 연결했다.

POSIX 표준에서는 `mkdir` 함수의 함수 프로토타입을 다음과 같이 정의하고 있다.

#include

int mkdir(const char *path, mode_t mode);

여기서 `path`는 생성할 디렉터리의 경로를 나타내는 문자열이고, `mode`는 생성될 디렉터리의 접근 권한을 지정한다.

마이크로소프트 비주얼 C++의 C 런타임 라이브러리에는 윈도우 API를 사용하여 구현된 유사한 함수 `_mkdir()`가 정의되어 있다. 이 함수는 POSIX의 `mkdir` 함수와 유사하지만, 운영체제의 기능적 차이로 인해 접근 권한을 설정하는 `mode` 인수가 없다. 함수 이름이 밑줄(_)로 시작하는 것은 컴파일러 등 처리계를 위해 예약된 이름임을 나타낸다. POSIX와 동일한 이름의 `mkdir` 매크로도 정의되어 있지만, ISO 표준이 아니므로 사용이 권장되지 않는다.