mkdir
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
: パス名形式でディレクトリ名を指定し、パス名の途中のディレクトリが存在しない場合はそれらも新規作成する。パス名に既存のディレクトリが含まれていてもエラーにはならない。-v
: 実際に作成したディレクトリ名を表示する。-p
と共に使うことが多い。-m
: 作成するディレクトリのファイルパーミッションを八進表記で指定する。
-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]。
脚注
[編集]関連項目
[編集]外部リンク
[編集]- Mkdir | Microsoft Learn - Microsoft Windows XP関連の旧リファレンス
- mkdir | Microsoft Learn - cmd.exeおよびバッチファイルで利用可能なWindowsコマンドのリファレンス
mkdir(1)
– JM Project Linux User Commands マニュアルmkdir(1)
– FreeBSD General Commands Manual Pages (en)