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