unix - chmod默认的文件未来权限

时间:2012-03-02 11:07:32

标签: linux shell unix permissions chmod

据我所知,默认情况下,使用chmod 644的权限创建文件时。是否有更改,以便在某个文件夹中创建的任何文件默认为664?

2 个答案:

答案 0 :(得分:4)

在POSIX系统上控制文件创建模式的实用程序称为umask。我不认为你可以像这样在每个文件夹中应用文件创建掩码。但是,您可以在脚本中使用umask。子shell中定义的掩码不会影响常规umask(0002)设置。

如果要在cd特殊目录中自动更改掩码设置,可以将以下内容添加到bash脚本中(我在chdir()函数上提示this } SO post):

chdir() {
    local action="$1"; shift
    case "$action" in
        # popd needs special care not to pass empty string instead of no args
        popd) [[ $# -eq 0 ]] && builtin popd || builtin popd "$*" ;;
        cd|pushd) builtin $action "$*" ;;
        *) return ;;
    esac
    #
    # now do stuff in the new pwd
    #
    SPECIAL_DIRS="/tmp/blah1 /tmp/blah2"
    DEFAULT_MASK="0002"
    for dir in $SPECIAL_DIRS
    do
      if [[ "$PWD" == "$dir" ]]
      then
          umask 0007
          echo "[*] special mask settings applied - $(umask -S)"
      else
          umask $DEFAULT_MASK
      fi
    done
    #
    #
}
alias cd='chdir cd'
alias pushd='chdir pushd'
alias popd='chdir popd

如您所见,我将/tmp/blah1/tmp/blah2定义为特殊目录。现在,如果我cd /tmp/blah1来自常规广告,我的umask设置将会相应更改。

[22:45:43] user@host1:[~]$ cd /tmp/blah1
[*] special mask settings applied - u=rwx,g=rwx,o=
[22:45:49] user@host1:[/tmp/blah1]$ cd /tmp/blah2
[*] special mask settings applied - u=rwx,g=rwx,o=
[22:46:03] user@host1:[/tmp/blah2]$ 

答案 1 :(得分:1)

不,但您可以将新创建​​的文件和目录的默认组设置为父文件夹的一组 - 可能解决您的问题: chmod g+s <parent-directory>。默认情况下,<parent-directory>中创建的所有内容都将归属<parent-directory>