因此,我设置一个代码,将文件的组所有者更改为特定组。
PS 有超过 10 个用户,具有相同的文件夹和文件结构,我想更改每个文件夹中特定文件的所有权。
这样,如果有人编辑该文件,在 10 秒内(使用cron
和sleep
函数),它会将组所有者更改为特定组。
这是我使用的代码,并创建了一个名为owner.sh的文件
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
它应该可以工作,但是当我试图攻击它时,
bash owner.sh
它说不/home/*/private/FILE.TXT
存在,但如果我手动运行它,那就是
chgrp www-data /home/*/private/FILE.TXT
,它会进入每个用户的文件夹并更改该特定文件的组。
那么如何让它按照我想要的方式工作呢?
答案1
尝试:
#!/bin/bash
while true; do
for user in $(ls /home); do
chgrp www-data /home/${user}/private/FILE.TXT
done
sleep 10
done
无限循环是为了绕过 1 分钟重复作业的 cron 限制。使其可执行:
chmod +x /PATH/TO/owner.sh
并且只需在没有 cronjob 的情况下运行它即可。
另外,如果您只想对文件的修改做出反应并直接修改该文件的所有权,您可以使用 inotify-tools:
#!/bin/bash
for user in $(ls /home); do
inotifywait -mqe close_write /home/${user}/private/FILE.TXT --format %f | while IFS= read -r file; do chgrp www-data $file; done
done
只需运行一次