mkdirコマンドについて
`mkdir`コマンドは、
Unix系や
MS-DOS(互換OSを含む)、OS/2、
Microsoft Windowsなどの
オペレーティングシステムで、
ディレクトリ(フォルダ)を作成するためのコマンドです。 "make directory" の略であり、
MS-DOS系では `md` というエイリアスが一般的です。このコマンドは、
POSIXシステムコールの一つでもあります。
基本的な使い方
最も基本的な使い方は、以下の形式で新しい
ディレクトリの名前を指定することです。
bash
mkdir name_of_directory
ここで `name_of_directory` は作成したい
ディレクトリの名前です。このコマンドを実行すると、指定した名前の新しい
ディレクトリが現在の
ディレクトリ内に作成されます。
Unix系システムでは、複数の
ディレクトリ名を一度に指定することも可能で、その場合、指定された全ての
ディレクトリが作成されます。
オプション
`mkdir`コマンドは、様々なオプションを指定することで、より柔軟な操作が可能です。
Unix系OSでよく使用される主なオプションは以下の通りです。
- - `-p`:パス名形式でディレクトリを指定し、途中のディレクトリが存在しない場合は、それらも全て自動的に作成します。既存のディレクトリが含まれていてもエラーにはなりません。このオプションは、複雑なディレクトリ構造を一度に作成する際に非常に便利です。
- - `-v`:実際に作成されたディレクトリの名前を表示します。通常、`-p`オプションと組み合わせて使用されることが多いです。
- - `-m`:作成するディレクトリのファイルパーミッションを八進数で指定します。例えば、`755` と指定すると、所有者には読み書き実行権限、グループとその他には読み込みと実行権限が付与されます。このオプションは、シェルスクリプト内で一時的なディレクトリを作成し、他のユーザーからのアクセスを制限する際などに使用されます。
オプションの使用例
例えば、`-p` オプションを使った例を見てみましょう。
bash
mkdir -p /tmp/a/b/c
もし `/tmp/a` が既に存在し、`/tmp/a/b` が存在しない場合、このコマンドはまず `/tmp/a/b` を作成し、次に `/tmp/a/b/c` を作成します。
シェルの機能と組み合わせると、さらに複雑な
ディレクトリ構造を一度に作成することも可能です。
bash
mkdir -p dir_{1,2}/subdir_{A,B}/test
このコマンドを実行すると、次のような
ディレクトリ階層が作成されます。
dir_1/subdir_A/test
dir_1/subdir_B/test
dir_2/subdir_A/test
dir_2/subdir_B/test
歴史的な背景
初期のUNIX(4.1BSDやSystem Vの初期バージョン)では、
カーネルに`mkdir`
システムコールが存在しなかったため、`mkdir`コマンドはrootのsetuid属性が付与されていました。代わりに`mknod`
システムコールを使用して
ディレクトリを生成し、` . `(カレント
ディレクトリ)や `..`(親
ディレクトリ)といった
ディレクトリへのリンクを個別に作成していました。
POSIXにおける`mkdir`関数のプロトタイプは以下の通りです。
c
int mkdir(const char *pathname, mode_t mode);
Microsoft Visual C++のCランタイムライブラリには、
Windows APIを利用して実装された、類似のインターフェースを持つ`_mkdir()`関数が定義されています。ただし、Windows OSの機能的な違いから、`mode`に相当する引数は持ちません。この関数はグローバルスコープを持ち、
アンダースコアで始まる命名規則が使用されています。これは、処理系のために予約された名前であることを示しています。また、
POSIXと同名の`mkdir`マクロも定義されていますが、ISO標準ではないため、非推奨となっています。
関連コマンド
参考資料