CHMOD - 对文件和目录应用不同的权限

CHMOD - 对文件和目录应用不同的权限

我一直试图清理几个盒子上的权限,并一直在搜索 chmod 手册以及我可以处理的所有互联网文档,但都没有任何运气 - 所以我们开始吧。

基本上,我有一个包含许多子目录和文件的目录——并且我想设置以下权限:

对于目录:770 (u+rwx、g+rwx、o-rwx)

对于文件:660(U+rw、g+rw、ax、o-rw)

如果可能的话,我想尝试使用单个递归 chmod 来执行此操作 - 以避免遍历每个目录并逐个设置文件权限。

我想象一定有一种方法可以做到这一点,而不需要编写我自己的 shell 脚本——但我还没有找到任何东西。

我感谢您的帮助!

答案1

我确实发现脚本很有用,因为它通常有助于一次性更改文件和目录权限,并且它们通常是链接的。770 和 660 用于文件服务器上的共享目录,755/644 用于 Web 服务器目录,等等。我在 root 的 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

答案2

不需要脚本。

// 目录:

find . -type d -exec chmod 770 '{}' \;

// 文件:

find . -type f -exec chmod 660 '{}' \;

答案3

就您而言,它可能不必像其他人所说的那样复杂(尽管它确实是一种处理这类事情的好工具)。 模式之间的区别在于执行位。 如果没有任何文件已经设置了执行位,那么您可以像您要​​求的那样,find通过一次调用 来完成此操作。chmod

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

这里的关键是大写字母X,手册页解释为

仅当文件是目录或某些用户已具有执行权限时才执行/搜索。

因此,如果您的文件尚未设置执行位,则只会为目录设置执行位。

答案4

简洁干净:

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

相关内容