私はいくつかのボックスのアクセス許可を整理するために努力しており、chmodマンと、運が悪ければ私が処理するすべてのインターネットドキュメントを精査してきました。
基本的に、私は多くのサブディレクトリとファイルを含むディレクトリを持っています-そして、私は以下の許可を設定したいと思います:
ディレクトリの場合:770(u + rwx、g + rwx、o-rwx)
ファイルの場合:660(U + rw、g + rw、a-x、o-rw)
可能であれば、これを単一の再帰的chmodで試してみたいと思います-各ディレクトリを再帰してファイルごとのアクセス許可を設定することを避けるためです。
自分でシェルスクリプトを記述せずにこれを行う方法があるはずだと思いますが、何も見つけることができませんでした。
私はあなたの助けに感謝します!
ファイルとディレクトリの両方のアクセス許可を1度に変更すると便利で、リンクされていることが多いため、スクリプトは便利だと思います。ファイルサーバー上の共有ディレクトリの場合は770と660、Webサーバーディレクトリの場合は755/644などです。そのタイプのサーバーで最もよく使用されるモードのスクリプトをルートのbin /に保持し、一般的な場合は手動で検索しますモードは適用されません。
#!/bin/sh
# syntax: setperm.s destdir
#
if [ -z $1 ] ; then echo "Requires single argument: <directoryname>" ; exit 1 ; fi
destdir=$1
dirmode=0770
filemode=0660
YN=no
printf "\nThis will RECURSIVELY change the permissions for this entire branch:\n "
printf "\t$destdir\n"
printf "\tDirectories chmod = $dirmode\tFiles chmod = $filemode\n"
printf "Are you sure want to do this [$YN]? "
read YN
case $YN in
[yY]|[yY][eE][sS])
# change permissions on files and directories.
find $destdir -type f -print0 | xargs -0 chmod $filemode $i
find $destdir -type d -print0 | xargs -0 chmod $dirmode $ii ;;
*) echo "\nBetter safe than sorry I always say.\n" ;;
esac
スクリプトは必要ありません。
//ディレクトリ:
find . -type d -exec chmod XXX {} \;
//ファイル:
find . -type f -exec chmod XXX {} \;
あなたの場合、他の人がそれを作成したほど複雑にする必要はないかもしれません(ただし、find
は実際にこの種のことを行うには一般的に優れたツールです)。モード間の違いは実行ビットです。実行ビットが設定されているファイルがない場合は、chmod
の1回の呼び出しで要求どおりに実行できます。
chmod -R u=rwX,g=rwX,o= FILE...
ここで重要なのは大文字のX
で、manページでは次のように説明されています
実行/検索は、ファイルがディレクトリであるか、一部のユーザーに対してすでに実行権限を持っている場合に限ります。
したがって、ファイルにまだ実行ビットが設定されていない場合は、ディレクトリにのみ設定されます。
少なくとも私の使用例では、rsync
を使用してディレクトリをそれ自体にコピーする方が、chmod
から直接find
のファイルのリストを使用するよりもはるかに高速であることがわかりました。
rsync -rpt --chmod=D770,F660 . .
同じ操作にchown
を追加する場合は、rsync
を使用すると、--chown=user:group
オプション。
クリーンでシンプル:
chmod 660 $(find . -type f)
chmod 770 $(find . -type d)