Ser*_*ker 6 linux permissions bash directory
我的客户让我将一些文件夹部署到他客户网站的一堆主目录中。我使用 Bash 脚本完成了此操作,但最终使用了 root 帐户权限。
我如何制作一个 Bash 脚本来获取 /home/用户下的每个文件夹(不是隐藏文件或文件夹),获取该文件夹的用户和组所有权,然后执行 chown -R {user}.{group} /home /用户?
服务器正在运行 CentOS Linux。
我认为你问的方式有点倒退。您不想获取每个文件夹然后找到用户,而是想要获取用户并找到他们的主文件夹。
#!/bin/bash
while IFS=':' read -r login pass uid gid uname homedir comment; do
echo chown $uid:$gid "$homedir";
done < /etc/passwd
Run Code Online (Sandbox Code Playgroud)
当然,您需要删除回声,并且需要使用 root 权限运行它。我也总是推荐使用 while 循环而不是 for 循环ls
。您可以保存此循环以使用/etc/passwd
.
我必须在上面给凯尔布兰特完全信任。所以,如果你喜欢下面的这个答案,请点击他帖子上的向上三角形来提升他的状态。
但是,我改进了他的例行程序,并觉得我有责任将其发布在这里并将其标记为最终答案。
我在 Kyle 的例行程序中添加的所有内容是确保我们只接触主目录,即其中带有星号的行。然后,我确保这个主目录实际上仍然存在。之后,我执行 chown 语句。就像 Kyle 所说的那样——删除“echo”关键字,它就会实际执行任务。然后,我在 chown 上添加了“-R”以使其递归工作,以防问题可能更深入到一个人的家庭目录中。
#!/bin/bash
while IFS=':' read -r login pass uid gid uname homedir comment; do
if [[ "$homedir" = **/home/** ]]; then
if [ -d "$homedir" ]; then
echo chown -R $uid:$gid "$homedir";
fi
fi
done < /etc/passwd
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
for f in $( ls /home/ );
do chown -R $f:yourgroup /home/$f
done
Run Code Online (Sandbox Code Playgroud)
这里没有健全性检查,我在没有任何测试的情况下编写了它,所以要小心。
(顺便说一句,“没有隐藏文件或文件夹”的要求将通过以下事实来满足,即 Unix 中的隐藏文件只是一个带有 . 前面的常规文件,而 .username 将不是 chown 的有效用户)。
归档时间: |
|
查看次数: |
6483 次 |
最近记录: |