【问题标题】:unix - chmod default future permissions for filesunix - chmod 文件的默认未来权限
【发布时间】:2012-03-20 21:31:17
【问题描述】:

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

【问题讨论】:

  • 默认情况下使用644 权限创建文件并不完全正确。默认权限由创建进程的umask 设置决定。 022 的 umask 可能是最常见的。

标签: linux shell unix permissions chmod


【解决方案1】:

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

如果您想在 cding 在特殊目录中时​​自动更改您的掩码设置,您可以将以下内容添加到您的 bash 脚本中(我从 this SO 帖子中获得了关于 chdir() 函数的提示):

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 定义为特殊目录。现在,如果我从常规 bash 中 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]$ 

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2015-08-30
      • 2012-01-07
      • 2019-10-25
      • 2010-09-18
      • 2016-01-20
      • 1970-01-01
      相关资源
      最近更新 更多