gpt4 book ai didi

bash - 测试目录是否可由给定的 UID 写入?

转载 作者:行者123 更新时间:2023-11-29 08:41:05 25 4
gpt4 key购买 nike

我们可以通过当前进程的uid来测试一个目录是否可写:

if [ -w $directory ] ; then echo 'Eureka!' ; fi

但是谁能建议一种方法来测试某个目录是否可由某些其他 uid 写入?

我的场景是我正在管理一个 MySQL 服务器实例,我想临时更改慢查询日志文件的位置。我可以通过执行 MySQL 命令 SET GLOBAL slow_query_log_file='$new_log_filename' 然后禁用和启用查询日志记录来使 mysqld 开始使用该文件。

但我希望我的脚本检查 mysqld 进程的 uid 是否具有创建新日志文件的权限。所以我想做类似的事情(伪代码):

$ if [ -w-as-mysql-uid `basename $new_log_filename` ] ; then echo 'Eureka!' ; fi

但这当然是一个虚构的测试谓词。

澄清:我想要一个不依赖于 su 的解决方案,因为我不能假设我的脚本的用户具有 su 权限。

最佳答案

这是一种漫长而迂回的检查方式。

USER=johndoe
DIR=/path/to/somewhere

# Use -L to get information about the target of a symlink,
# not the link itself, as pointed out in the comments
INFO=( $(stat -L -c "%a %G %U" "$DIR") )
PERM=${INFO[0]}
GROUP=${INFO[1]}
OWNER=${INFO[2]}

ACCESS=no
if (( ($PERM & 0002) != 0 )); then
# Everyone has write access
ACCESS=yes
elif (( ($PERM & 0020) != 0 )); then
# Some group has write access.
# Is user in that group?
gs=( $(groups $USER) )
for g in "${gs[@]}"; do
if [[ $GROUP == $g ]]; then
ACCESS=yes
break
fi
done
elif (( ($PERM & 0200) != 0 )); then
# The owner has write access.
# Does the user own the file?
[[ $USER == $OWNER ]] && ACCESS=yes
fi

关于bash - 测试目录是否可由给定的 UID 写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com