linux - 在 Linux 中使用另一个组写入文件

标签 linux shell unix

我有一个用户 ID ops,它属于多个组,例如 sysgroup、usergroup。当我默认写入其他用户目录时,它是在 sysgroup 下写入的。但是对于某些用户,我需要使用用户组权限来编写。我怎样才能做到这一点?

这是我的示例代码

if ls n18_????_??????????.txt &> /dev/null; then
     cp n18_????_??????????.txt /export/home/user
     chgrp usergroup /export/home/user/n18_????_??????????.txt
     mv n18_????_??????????.txt $archDir
fi

我正在复制然后更改组,所以每次它都会更改所有匹配模式的文件的组。

最佳答案

新加坡

另一种方法是使用sg:

sg usergroup bash

它会调用另一个 shell,其中的事件组是 usergroup。如果你退出,它会恢复到原来的状态。

用户模式

您还可以使用usermod 来更改用户的主要组。它使其成为每次登录的默认值。

usermod -g usergroup user

参见 sgusermod .

须藤

还有一种方法是使用 sudo。看这个thread也是。

sudo -g usergroup id -gn  ## Verify that it works.
sudo -g usergroup bash

脚本解决方案

您可以使用 sudo 让脚本再次调用自身。

#!/bin/bash
if [[ $1 == __GROUP_CHANGED__ ]]; then
    shift
else
    exec /usr/bin/sudo -g users "$0" __GROUP_CHANGED__ "$@"
fi

或者

#!/bin/sh
if [ "$1" = __GROUP_CHANGED__ ]; then
    shift
else
    exec /usr/bin/sudo -g users "$0" __GROUP_CHANGED__ "$@"
fi

这个概念也适用于 sgsg 不接受命令的原始参数。它只接受一个字符串参数并将其传递给 /bin/sh。当您将多个参数(尤其是那些带有空格的参数)传递给脚本时,这不是一个好方法。引用是一个很大的问题。

关于linux - 在 Linux 中使用另一个组写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300132/

相关文章:

bash - sudo cat << EOF > 文件不起作用,sudo su 可以

linux - tar 排除特定路径上的错误输出

linux - UNIX 解析 HTML 页面显示标签内容 - 一行?

linux - 如何在ubuntu上安装JavaPackage

linux - 如何防止ps2eps旋转页面

python - Node JS/Python/C/C++中USB连接后Linux复制文件

linux - 在 SFTP 时运行 Nohup

unix - 如何在 shell 脚本中使用并行执行?

shell - 是否存在在 Common Lisp 中运行外部程序的标准方法?

linux - 如何使用awk将同一列的2行合并为1行