我正在对多台服务器进行 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}'