如何刷新脚本的权限?

如何刷新脚本的权限?

我有一个修改文件和组权限的脚本。但直到我关闭会话并打开新会话后,它才会生效。

权限更改的说明:

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 "$@"
}

相关内容