1つのコマンドでディレクトリを作成してアクセス許可を与える方法


107

Linuxでディレクトリを作成して単一のコマンドで権限を与える方法は?

完全な権限でたくさんのフォルダを作成する必要があります777

コマンド

mkdir path/foldername
chmod 777 path/foldername 

2つのコマンドで作成して許可を与えるのは好きではありません。これを単一のコマンドで実行できますか?


1
mkdir temp; chmod 777 temp1行です。'temp'を変数にして、bashコマンドとして保存できます。これはあなたが探していることですか?
スタイル

1
こんにちは@ホワイトローズ、最新の回答を見てください、それは受け入れられた回答でなければなりません。おまけに、mkdir、chmod、chownが1つの弾丸にまとめられています!
Costin Gușă 2014年

回答:


205

mkdirのマニュアルページによると...

mkdir -m 777 dirname

1
-mオプションについて教えてもらえますか?
貧乏人

@Whiterose -mオプションはモード用です。新しく作成されたディレクトリの許可ビットを、Mode変数で指定された値に設定します。Mode変数は、chmodコマンドのModeパラメーターと同じ値を、記号形式または数値形式で受け取ります。
TMKasun

14
入力したパスの最後のディレクトリにのみモードが適用されるため、mkdir -p -mは機能しません。たとえば、mkdir -p -m 707 one / two / threeです。3つすべてのディレクトリが新しく作成された場合でも、最後の1つだけが要求されたアクセス許可を持ち、その他はデフォルトです。install -d -mも同様に機能しません。
表示名

-p上記の@DisplayNameに関する問題の他に、別の問題もあります。これ-mは、ディレクトリが実際に作成された場合にのみ適用されます。すでに存在する場合、そのモードは変更されません。コンテキストに応じて、これは良い場合も悪い場合もあります。
Adam Badura 2016

1
mkdir -m777ディレクトリ
HugoDeiró2018年

19
install -d -m 0777 /your/dir

あなたが望むものをあなたに与えるはずです。すべてのユーザーがそのディレクトリの追加および削除ファイルを書き込む権利を持っていることに注意してください。


1
ボーナス、-gや-oを追加することもでき、mkdir、chmod、chownを1つのショットで使用できます。
Costin Gușă 2014年

4
壊れている。install -d -m 070 one / two / three。パス内の3つすべてのディレクトリが新しく作成された場合でも、最後の1つだけに要求されたアクセス許可が設定されます。mkdir -p -mも同じ方法で壊れます。
表示名

@DisplayName:それでも、の正しいアクセス許可を設定します。threeデフォルトのアクセス許可でパスに十分です。
Markus W Mahlberg、2015年

16

ディレクトリがすでに存在する場合:

mkdir -m 777 /path/to/your/dir

ディレクトリが存在せず、親ディレクトリを作成する場合:

mkdir -m 777 -p /parent/dirs/to/create/your/dir

これにより、最終的なサブディレクトリに777の権限のみが付与されます。どうすればこれを実行して、すべての親ディレクトリにも777権限を付与できますか?
Levi Johansen

1
:私はこのための答えを持っていないが、私は、このための答えはここにあると信じてstackoverflow.com/questions/3740152/...
ペドロ・トルヒーヨ

このコマンドは、この問題を解決するためのものであることに注意してください。私はあなたの質問に対する解決策は次のようなものになると思います:find /your/dirs -type d -exec chmod 755 {} \;
ペドロ・トルヒージョ

10

IMO、そのinstallような状況でコマンドを使用することをお勧めします。私はsystemd-journald再起動後も永続的にしようとしました。

install -d  -g systemd-journal -m 2755 -v /var/log/journal

7

たとえば、簡単なシェルスクリプトを記述できます。

#!/bin/bash
mkdir "$1"
chmod 777 "$1"

保存して実行可能フラグを有効にしたら、mkdirやchmodの代わりに実行できます。

./scriptname path/foldername

ただし、アレックスの答えは3つのプロセスではなく1つのプロセスを生成するため、はるかに優れています。私は-mオプションについて知りませんでした。


delanに感謝します。このコマンドはシェルスクリプトでも記述しています。しかし、単一のコマンドで実行したいと思っています。
貧乏人

7

上記の答えのいくつかを拡張して改善するだけです:

まず、mkdir manページでGNU Coreutils 8.26を確認します。これにより、オプション「-m」および「-p」に関する情報が得られます(それぞれ--mode = MODEおよび--parentsとして指定することもできます)。 ):

... set [s]ファイルモード(chmodなど)、a = rwxではない-umask

...存在する場合はエラーなし、必要に応じて親ディレクトリを作成

ステートメントは曖昧で、私の意見では不明確です。しかし、基本的には、「chmod数値表記」(8進数)で指定されたアクセス権でディレクトリを作成できるか、「逆の方法」でumaskを使用できると記載されています。

補足:私は「逆の方法」と言います。umaskの値は実際にはそれがどのように聞こえるかです。つまり、chmodの8進数表記のように「許可」するのではなく、マスク、許可を非表示/削除します。

shell-builtinコマンドumaskを実行して、3桁のumaskを確認できます。私にとっては022です。つまりmkdir yodirectory、特定のフォルダー(たとえばmahome)で実行すると、次のstatような出力が得られます。

               755                   richard:richard         /mahome/yodirectory
 #          permissions                 user:group      what I just made (yodirectory),
 # (owner,group,others--in that order)                 where I made it (i.e. in mahome)
 # 

次に、これらの8進数のアクセス許可についてほんの少しだけ追加します。ディレクトリを作成すると、「あなたのシステム」はデフォルトのディレクトリperms ' (新しいディレクトリに適用されます(その値は777である必要があります))を取り、yo(u)maskで平手打ちし、それらのpermsの一部を効果的に隠します。私のumaskは022です。つまり、777から022を「減算」すると(技術的に減算は過度に単純で常に正しいわけではありません。実際にはパーマをオフにするか、マスクをマスクします)...指定されたとおりに755になります(または「示されています」) ) ついさっき。

3桁の8進数の前にある「0」は省略できます(4桁である必要はありません)。この場合、スティッキービット、setuid、またはsetgidsは必要なかった(または言及しなかった)ためです。 (あなたはそれらを調べたいかもしれません、ところで、あなたは777に行くのでそれらは役に立つかもしれません)。したがって、言い換えると、0777は777を意味します(または同等です)(ただし、777は必ずしも0777と同等ではありません。777は、setuids、setgidsなどではなく、アクセス許可のみを指定するためです)。

さて、これをより広い意味であなたの質問に適用するために-あなたは(すでに)いくつかのオプションを持っています。上記のすべての答えは機能します(少なくとも私のcoreutilsによると)。ただし、777のアクセス許可を持つサブディレクトリ(ネストされたディレクトリ)を一度に作成する場合は、上記の解決策で問題が発生する可能性があります(または発生する可能性が高い)。具体的には、0222のumaskを使用してmahomeで以下を実行した場合:

mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff

私はパーマなります755両方のためにyodirectoryyostuffだけで、777用パーマmastuffinyostuff。だから、それumaskは叩きつけられたすべてであるように見えます... yodirectoryそしてyostuffこれを回避するためにサブシェルを使うことができます:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

以上です。yostuff、mastuffinyostuff、yodirectoryの777 perms。


7

次のコマンドを使用してディレクトリを作成し、同時に権限を与えることができます

mkdir -m777 path/foldername 

1
-mと777の間にスペースはありません
Omer Gafar

1

しないでください。 mkdir -m 777 -p a/b/cこれ777により、最後のディレクトリcにのみ権限が設定されます。aとbは、umaskからのデフォルトの許可で作成されます。

代わりに、権限を持つ新しいディレクトリを作成777するmkdir -pには、umaskをオーバーライドするサブシェルで実行します。

(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)

ただし、a、b、cのいずれかがすでに存在している場合でも、権限は変更されません。


ええ、4桁のumaskを渡す場合、先頭の桁は常にゼロでなければなりません(省略できます)。最初の8進数字がsetuid、setgid、stickyビットを設定するchmodとの対称性のためかもしれませんが、そうであれば、umaskはそれらを制限することを許可しないので、それはかなり無意味です。
John Mellor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.