web-dev-qa-db-ja.com

CHMOD-ファイルに異なる権限を適用します。ディレクトリ

私はいくつかのボックスのアクセス許可を整理するために努力しており、chmodマンと、運が悪ければ私が処理するすべてのインターネットドキュメントを精査してきました。

基本的に、私は多くのサブディレクトリとファイルを含むディレクトリを持っています-そして、私は以下の許可を設定したいと思います:

ディレクトリの場合:770(u + rwx、g + rwx、o-rwx)

ファイルの場合:660(U + rw、g + rw、a-x、o-rw)

可能であれば、これを単一の再帰的chmodで試してみたいと思います-各ディレクトリを再帰してファイルごとのアクセス許可を設定することを避けるためです。

自分でシェルスクリプトを記述せずにこれを行う方法があるはずだと思いますが、何も見つけることができませんでした。

私はあなたの助けに感謝します!

9
Skone

ファイルとディレクトリの両方のアクセス許可を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
10
iPaulo

スクリプトは必要ありません。

//ディレクトリ:

find . -type d -exec chmod XXX {} \;

//ファイル:

find . -type f -exec chmod XXX {} \;
18
Sunny

あなたの場合、他の人がそれを作成したほど複雑にする必要はないかもしれません(ただし、findは実際にこの種のことを行うには一般的に優れたツールです)。モード間の違いは実行ビットです。実行ビットが設定されているファイルがない場合は、chmodの1回の呼び出しで要求どおりに実行できます。

chmod -R u=rwX,g=rwX,o= FILE...

ここで重要なのは大文字のXで、manページでは次のように説明されています

実行/検索は、ファイルがディレクトリであるか、一部のユーザーに対してすでに実行権限を持っている場合に限ります。

したがって、ファイルにまだ実行ビットが設定されていない場合は、ディレクトリにのみ設定されます。

16
Mikael Auno

少なくとも私の使用例では、rsyncを使用してディレクトリをそれ自体にコピーする方が、chmodから直接findのファイルのリストを使用するよりもはるかに高速であることがわかりました。

rsync -rpt --chmod=D770,F660 . .

同じ操作にchownを追加する場合は、rsyncを使用すると、--chown=user:groupオプション。

4
Matthew Bush

クリーンでシンプル:

chmod 660 $(find . -type f)
chmod 770 $(find . -type d)
1
takeshin