mkdirは、Unix系やMS-DOS(互換OSや、OS/2・Microsoft Windows等を含む)でディレクトリを作成するコマンドである。"make directory"の略。MS-DOS系では md という略称がエイリアスとなっているため、短いそちらが使われることが多い。POSIXのシステムコールの1つでもある。

使用法

通常の使用法は単に次のように新ディレクトリ名を指定する。

mkdir name_of_directory

ここで name_of_directory は作成したいディレクトリの名前である。このように入力すると、新ディレクトリがカレントディレクトリの下に作成される。UNIXでは複数のディレクトリ名を指定でき、その場合 mkdir コマンドが指定された全てのディレクトリを作成しようとする。

オプション

Unix系OSでは、mkdir にオプションを指定できる。最も一般的なオプションは次の3つである。

-pはmkdirを使って複雑なディレクトリ階層を構成する際によく使われ、必要なディレクトリがあるかないかを気にしなくてもよいため便利である。-mはシェルスクリプト内で使う一時的なディレクトリを他からいじられないようにするときなどによく使う。

例

-p を使った例を示す。

mkdir -p /tmp/a/b/c

/tmp/a が既存のディレクトリで /tmp/a/b が存在しない場合、mkdir はまず /tmp/a/b を作成してから /tmp/a/b/c を作成する。

シェルの機能を使うと、コマンド1つでさらに複雑なディレクトリ階層を作成できる。

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

このコマンド行で次のようなディレクトリ階層ができる。

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

歴史

初期のUNIX(4.1BSDや System V の初期のバージョン)ではカーネルに mkdir システムコールがなかったため、rootのsetuid属性がこのコマンドに付与されていた。代わりにmknodシステムコールでディレクトリを生成し、コマンド内で . や .. といったディレクトリと一つ一つリンクしていた。

システムコール

POSIXにおける関数プロトタイプ宣言は以下のような形式である[1]。

#include <sys/stat.h>

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

Microsoft Visual C++のCランタイムライブラリには、Windows APIを利用して実装された、類似のインターフェイスを持つ関数_mkdir()が定義されている(OSの機能的な差異から、modeに相当する引数は持たない)[2]。グローバルスコープを持ち、アンダースコアで始まる命名規則が使われており、これは処理系のために予約された名前を使用していることを示している。POSIXと同名のシンボルとしてmkdirマクロも定義されているが、ISO標準ではないため、非推奨となっている[3]。

脚注

  1. ↑ mkdir, mkdirat — make a directory | The Open Group Base Specifications Issue 8 / IEEE Std 1003.1-2024 | Copyright © 2001-2024 The IEEE and The Open Group
  2. ↑ _mkdir, _wmkdir | Microsoft Learn
  3. ↑ mkdir | Microsoft Learn

関連項目

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS D34