2016-10-03 7 views
0

私は、ローカル開発用にDockerを使用して、Mac上のすべてのものをコンテナにインストールする作業を開始しました。プロジェクトの数によって見ると、私定期的に彼らは何を達成しようとしている、特にドックで-type d-exec chmod 750/640を使用する場合

find /www -type d -exec chmod 750 {} \; \ 
find /www -type f -exec chmod 640 {} \; 

まず、次のシェルコマンドを参照して、第二のコマンドが実際に何を意味し、最後になぜあなたはしたいです/とき、または使用する必要がありますこの?

私は最近、複製して別のプロジェクトを修正して(それはもはや同じベースコンテナに基づいた十分な公正....それでも)違いはありませんように見えて、これらのコマンドを引っ張りました。

啓発のどんな光り輝く光景も大変ありがたいです。 handy link in the comments below to explain shellを教えてくれること

: は何: - 750のはまだわからない、そしてもっと重要なのは、なぜあなたはこれを行うだろう750 にパーミッションを変更し、/wwwですべてのフォルダを検索し、chmodコマンドを実行し

EDITS 。

+0

'find'コマンドと' chmod'コマンドのドキュメントを読んだことがありますか? –

+1

[find/www-type d -exec chmod 750 {} \;](http://explainshell.com/explain?cmd=find+%2Fwww+-type+d+-exec+chmod+750+ {}) – Cyrus

+0

ありがとう素晴らしいリンクは、シェルが私の新しい親友になることを説明します。 – pushplaybang

答えて

1

コマンドは、すべてのファイルとディレクトリは、読み書き可能な所有者、およびグループによって読み取り可能であることを設定しますが、ファイルが誰によって実行することができません。

最初にunix permissions in a bit more detailにお書き添えください。

find /www -type f -exec chmod 640 {} \; 

/wwwの下にあるすべてのファイルを検索し、r EADアクセス(4)を持つようにr EAD、w儀式アクセス(6)とグループを持っているユーザーを設定します。他のユーザーはアクセス権がありません(0)。

find /www -type d -exec chmod 750 {} \; 

これらのディレクトリに(5)/www下のすべてのディレクトリを検索し、r EADを持っているユーザーを設定し、r EADおよび電子x ecute権限を持っているw儀式や電子x ecute権限(7)とグループ。他のユーザーにはパーミッションはありません(0)。各find-execコマンドを終了し、シェルで実行したときに、それがシェルコマンドの最後で通常の;として解釈されないようにエスケープする必要があります後

\;。これは、をエスケープする必要がないため、読みやすく、である+でも実現できます。 stdout/stderrに依存している場合は、出力が異なる可能性があります。

Execute permissions on a directoryは、ユーザーがディレクトリに変更し、内部のファイルにアクセスできることを意味します。ディレクトリは実行可能ファイルの意味では実行できないため、実行ビットは何かを意味するためにオーバーロードされました。

link Cyrus posted to explainshell.comも優れたツールです。

+0

素晴らしい答えをいただきありがとうございます。 – pushplaybang

+0

'-exec'は' + 'または'; 'の最後の必須パラメータを持っています - したがってOPのオリジナルコードのセミコロンはシェルディレクティブではなく、実際には必要な引数です。 ( '+'形式ははるかに効率的で、できるだけ多くの引数を各コマンドに組み合わせるという点で、 'xargs'のように動作します)。 –

+0

@CharlesDuffyありがとう、それを逃した – Matt

関連する問題