我在 Unix 中有两个用户和组:user1:user1
和user2:user2
。
myDirectory
我有一个包含以下详细信息的目录( ls -ltr
)
drwxr-xr-x. 4 user2 user2 35 Apr 27 10:16 myDirectory
现在,我正在运行一个脚本,myScript.sh
如下所示user1
:
#!/bin/sh
whoami
if [ -f /myDirectory/*.tar.gz ]
then
rm -f /myDirectory/*.tar.gz
fi
cp -f someDirectory/*.tar.gz /myDirectory/
但是,我收到以下错误:
cp: cannot create regular file ‘/myDirectory/myTar.tar.gz’: Permission denied
我究竟做错了什么?我怎样才能解决这个问题?
答案1
您可以使用组权限来执行此操作。您需要创建一个用户组,添加两个用户,并更改目标目录的组所有权。首先,创建一个组:
groupadd newusergroup
然后将用户添加到其中:
usermod -G newusergroup user1
usermod -G newusergroup user2
然后更改目标目录的权限:
chgrp newusergroup /myDirectory
这一切都假设您希望两个用户都有权访问该目录。如果您只想让 user1 具有访问权限,只需更改权限,如下所示:
chown user1.user1 /myDirectory
答案2
的权限group
会mydirectory
影响您在该目录中删除或创建文件的方式。
首先user1
运行以下命令:
chmod g+w mydirectory
答案3
如果是需要写入的用户,即您要复制的用户,那就更好了到,运行脚本。这样,您就不必授予目标目录特殊的写入权限。
另外,测试
if [ -f /myDirectory/*.tar.gz ]
有故障。该-f
测试采用一个参数,但如果模式与多个文件匹配,则需要传递多个参数。既然你想清空myDirectory
压缩tar
档案的目录,那么就足够了
rm -f /myDirectory/*.tar.gz
如果没有要删除的文件,标记 to 将导致它不会出错-f
。rm
答案4
好吧,我看到很多错误:
- 不允许您写入
myDirectory
。只user2
允许在那里写入。 - 您将绝对路径与相对路径混淆了。
/myDirectory
是与 不同的目录myDirectory
。这也可能导致权限被拒绝错误,因为您的脚本正在尝试将其复制到文件系统根文件夹中myDirectory
。如果myDirectory
是相对于当前命令行路径(在其中调用脚本的上下文)的路径,那么./myDirectory
就是正确的。否则请考虑向我们提供更详细的信息,了解其myDirectory
真正所在的位置。这很重要,因为相对路径的范围myDirectory
可以在几个方面有所不同。在不了解您的具体情况的情况下,与此相关的答案只能是一般性答案,可能不适用于您的具体情况。 [
and条件]
表达式仅适用于Bash
,不适用于Shell
。的定义Shell
还取决于您当前工作的 UNIX 系统。通常,在 Linux 中它指向Bash
,因为 Linux 没有直接Shell
实现,BSD 也没有。只有Mac有自己的直接Shell
实现。因此,Shell
这只是一个理论上的 UNIX 标准,如今该理论文档有许多不同的方言和解释,这实际上取决于您当前运行的 UNIX 系统。所以,直接使用更好Bash
。这在大多数 UNIX 平台上 100% 有效。我不知道有哪个 UNIX 系统中 Bash 是不可用的。
其他一些需要考虑的有趣点:您可能想要添加多个组,它们是user1
和user2
。然后您可以将主文件夹组更改myDirectory
为该组。据我所知,这是常见的方法。
您还可以通过 shebang 命令使用 Bash /usr/bin/env
,这可确保您真正进入任何 Bash:
#!/usr/bin/env bash
对于其他脚本语言(如 perl、php 等)来说,这也是一个很好的方法。