39
Help us understand the problem. What are the problem?

posted at

updated at

Linuxでのmkdirのm,pオプションの同時使用時の注意

本文

Linuxにてmkdirコマンドでディレクトリを作成するときに

mkdir -m 777 hoge 

とするとパーミッション777のディレクトリhogeが作成できます。

mkdir -p hoge/fuga 

とするとディレクトリhogeの作成と同時に中にディレクトリfugaが作成できます。
この時のデフォルトパーミッションは

Linuxのファイル・ディレクトリ作成した時のパーミッション (umask)
http://qiita.com/yuki2006@github/items/3774bf765eb5ef7deabc
の記事通りです。

(ちなみに、-pはすでにディレクトリがあった時などのエラーメッセージ抑制にも使えます)

さて、-mと-pオプションを同時に使用したらどうなるでしょうか?

mkdir -m 777 -p hoge/fuga 

この場合、
ディレクトリhogeと同時に中にディレクトリfugaが作成できるのですが、

fugaがパーミッション777なのですが、

hogeディレクトリは デフォルトパーミッション(上記)になる罠があります。

ちなみに

  info coreutils 'mkdir invocation'

でみたマニュアルでは (man mkdirには書かれていない)

 Note: The `--mode',`-m' option only applies to the right-most
     directories listed on the command line.  When combined with
     `--parents', `-p' option, any parent directories are created with
     `u+wx' modified by umask.

と書いてあるので一応仕様通りらしいです。

代替策(installコマンド)

install --directory --mode=777 hoge/fuga
install -d -m 777 hoge/fuga

これで、hogeもfugaも777のパーミッションで作成されます。

参考

man MKDIR
http://linuxjm.sourceforge.jp/html/GNU_fileutils/man1/mkdir.1.html

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
39
Help us understand the problem. What are the problem?