linux - unix - chmod 文件的默认 future 权限

标签 linux shell unix permissions chmod

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

最佳答案

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

如果您想在 cd 时自动更改 mask 设置在一个特殊目录中,您可以将以下内容添加到 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作为特殊目录。现在如果我愿意cd /tmp/blah1从常规的 bash 中,我的 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]$ 

关于linux - unix - chmod 文件的默认 future 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9532288/

相关文章:

Perl 未初始化警告

linux - 我的 shell 脚本中的 URL 中断

linux - 符号链接(symbolic link)将 java 安装到/usr/java/latest

linux - 在 Linux 中,我想添加计数文件并将计数回显到日志

linux - 在 Mac 上将 .json 文件拆分为多个文件

linux - 使用 shell gitlab-runner ERRO [0000] 时出现 docker 错误

Linux命令行递归删除其他文件夹中不存在的文件

linux - 想要从具有页眉页脚的文件中获取分隔数据,以便进行数据处理以进行性能分析

bash - 计算 bash 变量中的位数

c - Oracle OCI - 以另一个用户身份运行时失败并出现 ORA-12705