Linuxでディレクトリを作成し、単一のコマンドでアクセス許可を与える方法は?
完全な権限でたくさんのフォルダを作成する必要があります777
。
コマンド
mkdir path/foldername
chmod 777 path/foldername
2つのコマンドで作成して許可を与えるのは好きではありません。これを1つのコマンドで実行できますか?
mkdirのマニュアルページによると...
mkdir -m 777 dirname
ディレクトリがすでに存在する場合:
mkdir -m 777 /path/to/your/dir
ディレクトリが存在せず、親ディレクトリを作成する場合:
mkdir -m 777 -p /parent/dirs/to/create/your/dir
install -d -m 0777 /your/dir
あなたが望むものをあなたに与えるべきです。すべてのユーザーには、そのディレクトリに追加ファイルと削除ファイルを書き込む権利があることに注意してください。
IMO、install
このような状況ではコマンドを使用することをお勧めします。systemd-journald
再起動後も永続的にしようとしていました。
install -d -g systemd-journal -m 2755 -v /var/log/journal
上記の回答のいくつかを拡張して改善するためだけに:
まず、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
の両方のパーマを取得しますが、のパーマのみを取得します。したがって、これですべてが平手打ちされたように見えます...これを回避するために、サブシェルを使用できます。yodirectory
yostuff
777
mastuffinyostuff
umask
yodirectory
yostuff
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
以上です。yostuff、mastuffinyostuff、およびyodirectoryの777パーマ。
たとえば、次のような簡単なシェルスクリプトを作成できます。
#!/bin/bash
mkdir "$1"
chmod 777 "$1"
保存して実行可能フラグを有効にすると、mkdirとchmodの代わりに実行できます。
./scriptname path/foldername
ただし、alexの答えは、3つではなく1つのプロセスを生成するため、はるかに優れています。-m
私はそのオプションについて知りませんでした。
次のコマンドを使用して、ディレクトリの作成とアクセス許可の付与を同時に行うことができます
mkdir -m777 path/foldername
しないでください。 最後のディレクトリcにmkdir -m 777 -p a/b/c
のみアクセス許可が設定されるためです。777
aとbは、umaskからのデフォルトの権限で作成されます。
権限を持つ新しいディレクトリを作成する代わりに、umaskをオーバーライドするサブシェルで777
実行します。mkdir -p
(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)
ただし、a、b、cのいずれかがすでに存在する場合、これによって権限が変更されることはありません。