【发布时间】:2012-03-20 21:31:17
【问题描述】:
我知道,默认情况下,当使用 chmod 644 权限创建文件时。是否有任何更改,以便在某个文件夹中创建的任何文件默认为 664?
【问题讨论】:
-
默认情况下使用
644权限创建文件并不完全正确。默认权限由创建进程的umask 设置决定。022的 umask 可能是最常见的。
标签: linux shell unix permissions chmod
我知道,默认情况下,当使用 chmod 644 权限创建文件时。是否有任何更改,以便在某个文件夹中创建的任何文件默认为 664?
【问题讨论】:
644 权限创建文件并不完全正确。默认权限由创建进程的umask 设置决定。 022 的 umask 可能是最常见的。
标签: linux shell unix permissions chmod
在 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]$
【讨论】:
否,但您可以将新创建的文件和目录的默认组设置为父文件夹组 - 可能解决您的问题:
chmod g+s <parent-directory>。默认情况下,将在<parent-directory> 中创建的所有内容都将拥有<parent-directory> 的组所有权。
【讨论】: