web-dev-qa-db-ja.com

単一のコマンドでディレクトリを作成して許可を与える方法

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

完全な許可777で多数のフォルダーを作成する必要があります。

コマンド

mkdir path/foldername
chmod 777 path/foldername 

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

87
poorani

mkdir のmanページによると...

mkdir -m 777 dirname
179
alex
install -d -m 0777 /your/dir

あなたが欲しいものを与える必要があります。すべてのユーザーは、そのディレクトリにファイルを追加および削除する権限を持っていることに注意してください。

18

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

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

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

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

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

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

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

mkdir -m777 path/foldername 
6
Omer Gafar

たとえば、単純なシェルスクリプトを作成できます。

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

保存して実行可能フラグを有効にすると、mkdirおよびchmodの代わりに実行できます。

./scriptname path/foldername

ただし、 alex's answer は、3つではなく1つのプロセスを生成するため、はるかに優れています。 -mオプションについて知りませんでした。

6
Delan Azabani

上記の答えをさらに拡張して改善するために:

最初に、GNU Coreutils 8.26のmkdirのマニュアルページを確認します-オプション '-m'および '-p'(--mode = MODEとして指定することもできます)に関するこの情報を提供しますおよび--parents、それぞれ):

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

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

私の意見では、これらの声明は曖昧で不明瞭です。しかし、基本的には、「chmod numeric notation」(8進数)で指定されたアクセス許可でディレクトリを作成できる、または「逆方向」に進んでa/your umaskを使用できると書かれています。

サイドノート:umask値は実際にはそのように聞こえるので、「他の方法」と言います-mask、chmodの8進表記のように「許可」するのではなく、許可を非表示/削除します。

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

               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進数の許可についてもう少しだけ追加します。ディレクトリを作成するとき、「システム」はデフォルトのディレクトリ権限を取得します(これはnewディレクトリ(値は777)に適用されます)。yo(u)maskを平手打ちし、それらの一部を非表示にしますパーマ '。私のumaskは022です-777から022を「減算」すると(技術的に減算は過度に単純であり、常に正しいわけではありません-実際にpermsまたはmask ingをオフにします)...私たちは755を取得します前に述べた(または「統計」)。

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

さて、これをより広い意味であなたの質問に適用するために-あなたは(すでに)いくつかの選択肢を持っています。上記の答えはすべて機能します(少なくとも私のcoreutilsによると)。しかし、subディレクトリ(入れ子になったディレクトリ)を777権限で一度に作成する場合、上記のソリューションで問題が発生する可能性があります(またはその可能性が高い)。具体的には、mahomeで022のumaskを使用して以下を実行した場合:

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

yodirectoryyostuffの両方に対して755パーマを取得し、mastuffinyostuffに対しては777パーマのみを取得します。したがって、umaskyodirectoryyostuffに平手打ちされているだけであるように見えます。これを回避するには、サブシェルを使用できます。

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

以上です。 yostuff、mastuffinyostuff、およびyodirectoryの777パーマ。

4
YenForYang