我有一个修改文件和组权限的脚本。但直到我关闭会话并打开新会话后,它才会生效。
权限更改的说明:
sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps `whoami`
我收到错误的说明:
cd /home/lucio/server/webapps/
cp assets/gunicorn_start.bash.template hello_django/bin/gunicorn_start.bash
最后一行出现以下错误:
cp: cannot create regular file 'hello_django/bin/gunicorn_start.bash': Permission denied
这应该有帮助:
我曾尝试使用login username
更改权限后,但没有任何效果。
如何在不退出脚本的情况下更新权限?
答案1
我认为您能做的最好的事情就是运行您需要使用的命令sg
。
DESCRIPTION
The sg command works similar to newgrp but accepts a command. The
command will be executed with the /bin/sh shell. With most shells you
may run sg from, you need to enclose multi-word commands in quotes.
Another difference between newgrp and sg is that some shells treat
newgrp specially, replacing themselves with a new instance of a shell
that newgrp creates. This doesn't happen with sg, so upon exit from a
sg command you are returned to your previous group ID.
因此,在创建组并将自己添加到其中后,您将能够以该组成员的身份运行命令sg groupname command
。例如,这将有效:
sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps $(whoami)
## From now on, run all commands through sg
sg webapps "mkdir foorbar"
由于编写起来很麻烦,因此我将把它放在一个函数中:
run_as_webapps() sg webapps "$@"
然后,使用该函数调用您需要调用的任何命令
run_as_webapps mkdir foobar
但最终,以 root 身份运行整个脚本可能更简单。要么这样,要么有两个脚本,一个用于设置组,另一个用于执行其他所有操作。在运行第二个脚本之前,只需注销并重新登录即可。
这POSIX 规范明确指出函数应按以下方式定义:
foo () command
由于我不明白的原因,原帖者遇到了麻烦,所以不得不使用
function run_as_webapps(){
sg webapps "$@"
}