実行コマンドは次です。
# 現在のディレクトリ以下のファイルのみを 644 に変更する場合 find . -type f -print | xargs chmod 644 # 現在のディレクトリ以下のディレクトリのみを 755 に変更する場合 find . -type d -print | xargs chmod 755
ここでは chmod ですが find と grep で目的のファイルやディレクトリを探して、xargs でファイルやディレクトリを操作するコマンドに渡すというのはすごく応用が利くので覚えておくと便利です。2000年ごろの web ページにも見つかる伝統的なコマンドの連携です。
chmod は Change Mode の略称で、Linux や UNIX で使えるファイルやディレクトリのモードを変えるコマンドです。このコマンドでアクセス、編集、実行といった権限を変更できます。何がしかのサービスを動かすときにはそのサービスを動かせるだけの権限を設定する必要があります。この時 chmod で誤った設定に変更すると以前の設定に復元できなくなる事態に陥りやすいです。そういった時はとりあえずオーナー以外はアクセスできるだけの状態しておきたくなります。ですがただの chmod を使うのみではファイルに余計な実行権限を与えたり、ディレクトリに移動できなくなったりしてしまいます。この問題を回避していい感じに chmod するのに役立つ方法を紹介します。
余談ですが、権限変更前にバックアップ的にログを取るならばls -lR > tmp.txt
と実行するのが便利です。現在のディレクトリ以下を権限表示付きでテキストファイルに残せます。
$ ls -lR > back.txt $ cat back.txt .: total 0 -rw-r--r-- 1 www-data www-data 0 Jun 2 17:22 a drwxr-xr-x 1 www-data www-data 512 Jun 2 17:22 b -rw-r--r-- 1 www-data www-data 0 Jun 2 17:44 back.txt ./b: total 0 -rw-r--r-- 1 www-data www-data 0 Jun 2 17:22 c
実行するコマンドは上述した通りです、これを細かく解説すると次の様になります。
# find はファイルやディレクトリを探すコマンドで、見つかった結果を標準出力に流します # find の man は↓URLで読めます。 # https://www.freebsd.org/cgi/man.cgi?query=find&apropos=0&sektion=0&manpath=CentOS+7.1&arch=default&format=html # . は探す先のディレクトリです。恐らく全ての環境でデフォルトは現在のディレクトリです。 # -type f は通常ファイルのみを見つけるという意味です。デバイスやソケットなどはまた別に指定できます。 # -print は見つけたモノのフルパスを一行ずつ出力するという意味です。区切り文字がNULL文字の-print0など色々指定できます。恐らく多くの環境でデフォルトは -print です。 find . -type f -print # xargs は標準入力から引数を取得し、コマンドを実行するコマンドです # https://www.freebsd.org/cgi/man.cgi?query=xargs&apropos=0&sektion=0&manpath=CentOS+7.1&arch=default&format=html # パイプで標準出力したフルパスを chmod の引数にすることで見つけたファイルをまとめて change mode します。 find . -type f -print | xargs chmod 644 # このケースでは大丈夫でしょうが、不意にxargs でコマンドを実行したくない場合は -r オプションを使います。 # これは --no-run-if-empty のエイリアスであり、標準入力が空の場合、コマンド実行をしません。 # このオプションを付けない場合、エラーログが無駄に出たりコマンドによっては副作用で嫌なことが起きるやもしれません。