有没有办法在 Linux 上递归转储整个目录所有权和模式

有没有办法在 Linux 上递归转储整个目录所有权和模式

我正在对多台服务器进行 Samba 更新,每台服务器都有多个共享目录。用户通过 Windows 域 AD 进行身份验证,因此我预计 Linux 机器上的本地 UID 会发生变化。我想知道是否有办法转储所有共享目录的所有权,这样我就不必手动设置,而是在升级后恢复它。

答案1

您可以使用脚本来完成此操作。

1) 将目录(名称)转储到文件中。2) 使用find path -type d(这将打印路径下的每个目录)。3) 查找公共元素并应用 ls -lah

这是一种肮脏的做法。只有当你绝望的时候才建议这么做 :>

您可能还会发现有用的find . -type d -print0 {} \; | xargs ls -lah

答案2

您可以使用该getfacl工具(acl 包的一部分)来转储和恢复正常的 unix 权限和 acl:

使用getfacl -R将 acl 转储到文件中,并使用setfacl --restore=file恢复它们:

   --restore=file
       Restore a permission backup created by 'getfacl -R' or similar. All
       permissions of a complete directory subtree are restored using this
       mechanism.  If the input contains owner comments or group comments,
       setfacl attempts to restore the owner  and  owning  group.  If  the
       input contains flags comments (which define the setuid, setgid, and
       sticky bits), setfacl sets those three bits accordingly; otherwise,
       it  clears  them.  This  option  cannot be mixed with other options
       except '--test'.

即使您没有设置 acls,此方法也能正常工作 - 该工具将转储并恢复标准 unix fs 权限。如果您的文件系统未启用 acl 支持,它也能正常工作(对于大多数文件系统,它仍然是非默认挂载选项)

答案3

Solaris 在这里具有优势,因为它有一个名为 的好命令pkgproto

但你可以使用类似

find /home/elao/ -type d | xargs ls -lnd | awk '{print "chown "$3":"$4,$8}'

相关内容