【问题标题】:Owner cannot create file in folder with all permission Linux所有者无法在具有所有权限 Linux 的文件夹中创建文件
【发布时间】:2018-12-03 08:14:50
【问题描述】:

我正在尝试使用脚本在文件夹下创建几个文件,但无法创建。 以下是创建某些文件的文件夹权限

su pnaid

部分脚本内容,负责创建文件夹并在其中创建文件

MKDIR_CMD="/bin/mkdir -p \"${PATH_TO_WRITE}\" > /dev/null 2>&1"
"${MKDIR_CMD}"
echo "Checking Dir Path exist"
if [ -d "${PATH_TO_WRITE}" ]; then
   echo "Calling another script to create files under this folder"
   "/createFiles.sh \"${PATH_TO_WRITE}\""
else
   echo "WARNING: unable to create folder"

$(PATH_TO_WRITE) 的父文件夹具有以下权限

drwxr-x---.  2 pnaid pnaid  4096 Dec  3 12:31 work_directory

每次显示“警告:无法创建文件夹”语句。

我尝试使用具有 777 权限的 pnaid 用户创建一个文件夹,并在脚本而不是“${MKDIR_CMD}”中提供该文件夹,在这种情况下,会显示“调用另一个脚本以在此文件夹下创建文件”语句,但另一个脚本无法写入此文件夹。

从原始脚本调用时createFiles.sh的回显语句也没有显示,有什么方法可以查看它。

如果我们在 shell 提示符而不是脚本中执行相同的命令,这些命令会起作用并获得所需的输出;即创建文件夹,其中包含所有文件。

如果我们使用 root 用户运行,同样的脚本也可以工作。

我相信这应该适用于各种 Linux,在这种情况下我使用的是 CentOS

请帮我解决这个问题,如果我遗漏了任何细节,请告诉我。

谢谢

【问题讨论】:

标签: linux shell permissions


【解决方案1】:

这一行:

"${MKDIR_CMD}"

不会工作。它将$MKDIR_COMMAND 的整个值视为要运行的程序的名称,它不会将其拆分为程序和参数,因为您在它周围加上了引号。此外,扩展变量时不会处理重定向。

需要使用eval重新解析字符串:

eval "$MKDIR_CMD"

你有同样的问题:

"/createFiles.sh \"${PATH_TO_WRITE}\""

这应该是:

/createFiles.sh "$PATH_TO_WRITE"

这些问题与权限无关,我怀疑脚本在以 root 身份运行时是否真的有效。

这是一个相关的问题,展示了如何在变量中最好地存储命令参数:

Setting an argument with bash

但是,如果您还存储诸如重定向之类的 shell 运算符,那里的解决方案(使用数组而不是字符串)将不起作用。

【讨论】:

  • 我将尝试更改为使用 eval,该脚本在 root 用户下运行得非常好。谢谢
  • @Pixy:这与用户无关,因为它只是脚本中的错误,但无论如何,我想知道将整个 mkdit 放入变量有什么意义...... ..
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2018-09-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
相关资源
最近更新 更多