132

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

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

コマンド

mkdir path/foldername
chmod 777 path/foldername 

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

4

8 に答える 8

253

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

mkdir -m 777 dirname
于 2011-04-26T05:33:42.213 に答える
22

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

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

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

mkdir -m 777 -p /parent/dirs/to/create/your/dir
于 2019-01-22T22:54:53.463 に答える
21
install -d -m 0777 /your/dir

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

于 2014-04-23T13:15:56.360 に答える
10

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

install -d  -g systemd-journal -m 2755 -v /var/log/journal
于 2017-04-06T09:01:46.730 に答える
8

上記の回答のいくつかを拡張して改善するためだけに:

まず、GNU Coreutils 8.26のmkdirのマニュアルページを確認します。これにより、オプション「-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進数のアクセス許可について少しだけ追加します。ディレクトリを作成するとき、「システム」はデフォルトのディレクトリパーマ(新しいディレクトリに適用されます(その値は777))を取得し、yo(u)maskを叩き、それらのパーマの一部を効果的に非表示にします。私のumaskは022--777から022を「減算」すると(技術的に減算は過度に単純化され、常に正しいとは限りません-実際にパーマをオフにするか、マスクします)...記載されているように(または「記載」)755を取得します) ついさっき。

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

さて、これをより広い意味であなたの質問に適用するために-あなたは(すでに)いくつかのオプションを持っています。上記のすべての答えは機能します(少なくとも私のcoreutilsによると)。ただし、777のアクセス許可を持つサブディレクトリ(ネストされたディレクトリ)を一度に作成する場合は、上記のソリューションで問題が発生する可能性があります(または発生する可能性が非常に高くなります)。具体的には、022の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の両方のパーマを取得しますが、のパーマのみを取得します。したがって、これですべてが平手打ちされたように見えます...これを回避するために、サブシェルを使用できます。yodirectoryyostuff777mastuffinyostuffumaskyodirectoryyostuff

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

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

于 2017-02-27T07:05:24.250 に答える
7

たとえば、次のような簡単なシェルスクリプトを作成できます。

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

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

./scriptname path/foldername

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

于 2011-04-26T05:33:08.100 に答える
7

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

mkdir -m777 path/foldername 
于 2018-05-16T13:17:17.367 に答える
4

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

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

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

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

于 2020-06-02T17:56:52.757 に答える