ディレクトリ内のすべてのエントリをデフォルトのファイル所有権と権限にどのように変更しますか?

ディレクトリ内のすべてのエントリをデフォルトのファイル所有権と権限にどのように変更しますか?

別のドライブのコンテンツを自分のホームディレクトリに移動しましたが、権限が正しくありません。まず、次のように入力して所有権を変更しました。

  ~$ sudo chown -R USERME /home/USERHOME/

今は効果があると思います。

しかし、今はすべてのファイルとサブディレクトリをデフォルトの権限に変更し、ファイルは読み取り+書き込み、ディレクトリはr + w + xに変更したいと思います。この問題を処理する再帰的な方法が見つかりませんでした。私は以下を実行しました:

  ~$ sudo chmod 755 -R /home/USERHOME/

すべてが私のために働くようにしてください。しかし、ファイルは実行可能ファイルとして表示されますが、これは私が望むものではありません。より多くのサブディレクトリとファイルがあるので、単純な再帰的な解決策を探しています。

デフォルトでは、chmodを介してデフォルトのumaskパラメータをフォルダ全体に再適用する再帰的な方法を探しているようです。


修正する:

@SkyDanのおかげで解決策を投稿しました。「ファイルのchmodを変更しますが、ディレクトリは変更しないでください」

答え1

chmodできます。見つける必要はありません。

シンボルパターンと大文字を使用してくださいX

chmod -R u=rwX,og=rX directory

重複を避け、編集を簡単にするには、代わりを使用してください。性格中心ではなく行動中心にすることができます。

chmod -R a=rX,u+w directory

大文字のXはchmodにxをディレクトリに適用するように指示します(すでにディレクトリがある場合はそうする場合go+X)。

手動抽出:

シンボルパターンの形式は[ugoa...][[+-=][perms...]...]です。ここで perms は、セット rwxXst のゼロ文字以上、またはセット rwxXst の単一文字です。 Ge.複数のシンボルパターンをカンマで区切って指定できます。

ugoa 文字の組み合わせは、ファイルへのユーザーのアクセス権の変更を制御します。ファイルを所有しているユーザー(u)、ファイルグループの他のユーザー(g)、ファイルグループに属していない他のユーザー(o)、またはすべてのユーザー(1人)。これらのいずれも与えられないと、aが与えられたのと同じ効果がありますが、umaskに設定されたビットは影響を受けません。

+ 演算子は、選択したファイルモードビットを各ファイルの既存のファイルモードビットに追加します。 - 対応するビットを削除し、=を追加し、記載されていないビットを削除します。そして、設定されたユーザーとグループIDのビットは影響を受けません。

rwxXst文字は、影響を受けるユーザーのファイルモードビットを選択します。読み取り(r)、書き込み(w)、実行(またはディレクトリ検索)(x)、ファイルがディレクトリの場合、またはすでに一部のファイルに対する実行権限を持っている場合にのみ、実行/ユーザー(X)の検索、実行時のユーザーまたはグループIDの設定、消去フラグまたは固定ビット(t)制限。次の1つ以上の文字の代わりにugo文字の1つを指定できます。ファイルを所有するユーザーに許可(u)、ファイルグループに属する他のユーザーに許可(g)、誰にも許可2つのカテゴリのユーザーに対する上記の権限(o)のいずれか。

答え2

ファイルとディレクトリには異なるファイルモードビットが必要な場合がよくありますが、chmod -R通常はすべてのエントリに同じモードが適用されます。

ファイルとディレクトリを区別するのはfind便利なユーティリティです。

一般ファイルのモードを変更します。

# Finds all regular files and passes them to chmod
find /path/to/dir -type f | xargs chmod u=rw,g=r,o=r

ディレクトリモードの変更:

# Directories require the execution bit to be accessible
find /path/to/dir -type d | xargs chmod u=rwx,g=rx,o=rx

ユーティリティfind自体は再帰的であるため、フラグchmodで使用する必要はありません-R

答え3

各ファイル/ディレクトリなどに個別の権限を持っている場合は、まずその項目を見つけてから、その項目を操作する必要があります。例:

 find . -type d -name '*spec_dir*' | xargs chmod 755 

したがって、上記のコマンドは現在のディレクトリのすべてのサブディレクトリを検索し、drwxr-xr-xの権限を見つかった名前に含まれるすべてのエントリに設定しますspec_dir

権限をリセットせずに追加/削除する必要がある場合は、g + / - p形式を使用してください。たとえば、他のグループに対してのみ実行権限を追加するには、次のようにします。o+x

chmod o+x fileまたは上記のコマンドコンテキストで... | xargs chmod o+x

find . -type f -name 'my_files*'ファイルなどでも同じことができます。

答え4


修正する

助けてくれた@SkyDanに感謝します。このUnixの問題はここにあります解決策が見つかりました。

私が最初にやった

~$ find . -type d -print0 | xargs -0 chmod 755

ユーザーが読み取り、書き込み、実行できるようにすべてのディレクトリを変更します。それから私はそうでした。

~$ find . -type f -print0 | xargs -0 chmod 644

ユーザーがすべてのファイルを読み書きできるようにします。

関連情報