web-dev-qa-db-ja.com

SSH経由でファイルのアクセス許可を確認する方法

最初に、私はこれに非常に慣れていないので、これが非常に基本的であるか、または私が過度に知らされていないように聞こえる場合は、私を許してください。

VPSの特定のディレクトリにあるすべてのファイルをチェックして、ファイルが644でディレクトリが755であることを確認したいと思います。ファイル/ディレクトリが多すぎるため、FTPは問題外です。 SSHが最も論理的な選択のようですが、chmodのアクセス許可を取得する前に、何を変更するかを確認したいと思います。この基準を満たさないファイル/ディレクトリを見つけて表示する方法はありますか?

洞察力を事前に感謝します。

6
Bms85smB

David Spillettの答えの改良として、単一のfindコマンドを使用するのはどうですか?私はそれがすべてのパイプよりも少しきれいだと思います、そしてgrepを呼び出します。さらに、これが爆発する可能性のあるエッジケースを少しカットします。

find . -type f ! -perm 644は、-rw-r--r--権限を持たないすべてのファイルを見つける必要があります。ディレクトリの場合は、find . -type d ! -perm 755を使用できます。

表示されている内容に満足したら、chmodを同じコマンドに組み合わせることができます。

find . -type f ! -perm 644 -exec chmod 644 {} \;
find . -type d ! -perm 755 -exec chmod 755 {} \;

10
find . -type f | xargs ls -l | grep -v rw-r--r--

"現在のディレクトリ内のすべてのファイルを検索し、" ls -l "に渡して詳細を一覧表示し、lsの出力をスキャンしてすべての行を探しますnot(grepの-vオプション) 「rw-r--r--」を含む一致を否定し、ディレクトリの場合:

find . -type d | xargs ls -l | grep -v drw-r--r--

別のディレクトリをスキャンする場合は、「。」を置き換えます。それを使って:

find /path/to/directory -type f | xargs ls -l | grep -v rw-r--r--

また、ファイル/ディレクトリ名の一部にスペースが含まれている可能性がある場合は、エラーを回避するために、findおよびxargsで「0で区切られた文字列を使用する」オプションを使用します。

find . -type f -print0 | xargs -0 ls -l | grep -v rw-r--r--

また、サニティチェックとしてリストする場合は、grepから-vオプションを削除して、do一致するファイル/ディレクトリを見つけることができます。

findを使用すると、デフォルトでサブディレクトリもスキャンされます。子ではなく1つのディレクトリのみをスキャンするには、grepfindを使用する代わりに、ls -lの出力をxargsにパイプするだけです。

chmodを実行するときは、-vオプションを指定できることを忘れないでください。これにより、機能がリストされ、操作を実行しても変更されません。これは、正しいコマンドを与えました。

7
David Spillett

次のコマンドは、指定されたディレクトリ内のすべてのファイルに対する数値のアクセス許可を与える必要があります

 stat -c "%a %n" /path/to/files/*
0
Hyppy