mkdirコマンドでディレクトリを作成する方法|-pの階層一括作成やパーミッション指定もコマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドK-O, ファイル・ディレクトリ管理コマンド > mkdirコマンドでディレクトリを作成する方法|-pの階層一括作成やパーミッション指定もコマンド
「ディレクトリを作りたいけど、途中のフォルダが存在しなくてエラーになる」
「複数のディレクトリを一度に作成したい」

Linuxでディレクトリを作成するmkdirコマンドは、ファイル操作の基本中の基本です。
この記事では、mkdirコマンドの基本的な使い方から、-pオプションによる階層一括作成、パーミッション指定、実務で役立つテクニックまで解説します。
【この記事でわかること】 ・mkdir はディレクトリを新規作成するコマンド
・-p オプションで途中のディレクトリも含めて階層ごと一括作成できる
・-m オプションで作成と同時にパーミッション(例: 755)を指定できる
・mkdir -p dir/{sub1,sub2,sub3} でブレース展開を使った一括作成が便利
・スクリプト内では mkdir -p で「存在しても失敗しない」安全な書き方が定番

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

mkdirコマンドとは?

mkdirは「make directory」の略で、新しいディレクトリ(フォルダ)を作成するコマンドです。

Linuxではファイルの整理、アプリケーションの配置、ログの保存先など、あらゆる場面でディレクトリを作成します。サーバー構築や運用の最初の一歩として、必ず使いこなせるようにしておきましょう。

mkdirの基本的な使い方

1. ディレクトリを1つ作成する

最もシンプルな使い方です。

# カレントディレクトリにtestdirを作成 mkdir testdir # 作成されたか確認 ls -ld testdir drwxr-xr-x 2 user user 4096 3月 18 10:00 testdir

2. 複数のディレクトリを一度に作成する

スペース区切りで複数のディレクトリ名を指定すれば、まとめて作成できます。

# 3つのディレクトリを一度に作成 mkdir dir1 dir2 dir3 # 確認 ls -l drwxr-xr-x 2 user user 4096 3月 18 10:00 dir1 drwxr-xr-x 2 user user 4096 3月 18 10:00 dir2 drwxr-xr-x 2 user user 4096 3月 18 10:00 dir3

3. 絶対パスで指定して作成する

パスを指定すれば、カレントディレクトリ以外の場所にも作成できます。

# /tmp配下にworkディレクトリを作成 mkdir /tmp/work

主要オプション

1. -p:親ディレクトリごと一括作成する

mkdirで最も重要なオプションが -p(parents)です。途中の階層が存在しなくても、必要な親ディレクトリをすべて自動作成します。

# -pなしだと途中のディレクトリがないとエラー mkdir /home/user/project/src/main mkdir: cannot create directory '/home/user/project/src/main': No such file or directory # -pをつけると途中のディレクトリも全て作成される mkdir -p /home/user/project/src/main # 確認 ls -R /home/user/project/ /home/user/project/: src /home/user/project/src: main

-pオプションにはもう1つ便利な特徴があります。既にディレクトリが存在していてもエラーにならないという点です。

# -pなしで既存ディレクトリを指定するとエラー mkdir testdir mkdir: cannot create directory 'testdir': File exists # -pなら既に存在してもエラーにならない mkdir -p testdir

この性質を利用して、シェルスクリプト内では「なければ作る、あればそのまま」という処理を -p 1つで実現できます。

2. -m:パーミッションを指定して作成する

-mオプションで、作成時のパーミッション(権限)を指定できます。

# パーミッション700(所有者のみ読み書き実行可)で作成 mkdir -m 700 secret_dir # 確認 ls -ld secret_dir drwx------ 2 user user 4096 3月 18 10:00 secret_dir

通常、mkdirで作成されるディレクトリのパーミッションはumask値によって決まります(デフォルトは755が多い)。機密データ用のディレクトリなど、最初から厳しい権限にしたい場合に -m が役立ちます。

3. -v:作成結果を表示する

-v(verbose)オプションで、ディレクトリが作成されたことを画面に表示します。

# -vで作成経過を表示 mkdir -pv /home/user/project/{src,bin,log} mkdir: created directory '/home/user/project' mkdir: created directory '/home/user/project/src' mkdir: created directory '/home/user/project/bin' mkdir: created directory '/home/user/project/log'

スクリプト内で複数ディレクトリを一括作成する際、どこまで作成されたか把握するのに便利です。

実務で使えるmkdirテクニック

1. ブレース展開でプロジェクト構成を一発作成

bashのブレース展開({A,B,C})と -p を組み合わせると、プロジェクトのディレクトリ構成を1コマンドで作成できます。

# Webアプリのディレクトリ構成を一発作成 mkdir -p myapp/{src,config,log,tmp,public/{css,js,images}} # 確認 find myapp -type d myapp myapp/src myapp/config myapp/log myapp/tmp myapp/public myapp/public/css myapp/public/js myapp/public/images

2. 日付ベースのログディレクトリを自動作成

dateコマンドと組み合わせて、日付ごとのディレクトリを作成する方法です。cronジョブやバックアップスクリプトでよく使います。

# 今日の日付でバックアップ用ディレクトリを作成 mkdir -p /backup/$(date +%Y%m%d) # 年/月/日の階層で作成 mkdir -p /var/log/myapp/$(date +%Y)/$(date +%m)/$(date +%d)

3. シェルスクリプトでの安全なディレクトリ作成

スクリプトでは「存在チェック+作成」よりも mkdir -p の方がシンプルで安全です。

# 冗長な書き方(非推奨) if [ ! -d /var/log/myapp ]; then mkdir /var/log/myapp fi # シンプルな書き方(推奨) mkdir -p /var/log/myapp

トラブルシュート・エラー対処

「Permission denied」が出た時の対処法

書き込み権限がないディレクトリに作成しようとするとこのエラーが出ます。

$ mkdir /var/mydir mkdir: cannot create directory '/var/mydir': Permission denied # sudoで実行する $ sudo mkdir /var/mydir

/var や /etc など、root権限が必要なディレクトリ配下ではsudoをつけて実行してください。

「File exists」が出た時の対処法

同名のファイルやディレクトリが既に存在する場合のエラーです。

$ mkdir testdir mkdir: cannot create directory 'testdir': File exists # -pオプションなら既存でもエラーにならない $ mkdir -p testdir

ただし、同名の「ファイル」(ディレクトリではない)が存在する場合は -p をつけてもエラーになります。lsコマンドで対象が何なのか確認してください。

「No such file or directory」が出た時の対処法

途中の親ディレクトリが存在しない場合のエラーです。-p オプションで解決します。

$ mkdir /home/user/new/subdir/work mkdir: cannot create directory '/home/user/new/subdir/work': No such file or directory # -pで親ディレクトリごと作成 $ mkdir -p /home/user/new/subdir/work

本記事のまとめ

やりたいこと コマンド
ディレクトリを作成する mkdir ディレクトリ名
親ディレクトリごと一括作成する mkdir -p 親/子/孫
パーミッションを指定して作成する mkdir -m 700 ディレクトリ名
作成結果を画面に表示する mkdir -v ディレクトリ名
複数ディレクトリを一度に作成する mkdir dir1 dir2 dir3
ブレース展開で構成を一括作成する mkdir -p app/{src,bin,log}

mkdirで階層ディレクトリを一発で作成できていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。