备份和恢复文件权限

备份和恢复文件权限

有没有办法备份和恢复文件所有权和权限(可以使用 和 更改的内容chownchmod

你可以这样做在 Windows 中使用 icacls

访问控制列表怎么样?

答案1

您可以使用以下命令来执行此操作访问控制列表软件包(应该在所有主流发行版上可用,但可能不是基本安装的一部分)。当 ACL 存在时,它们会备份和恢复 ACL,但即使在不支持 ACL 的系统上,它们也适用于基本权限。

递归备份当前目录及其子目录的权限:

getfacl -R . >permissions.facl

恢复权限:

setfacl --restore=permissions.facl

答案2

我不知道有什么“现成的”可以做到这一点。不过,这里有一个适合您的入门脚本,它将处理基本权限。它不处理任何描述的 ACL - 但您的问题明确排除了这些。 (它也会在病态文件名上失败 - 以空格开头或包含不可打印字符的文件名。)

保存权限

find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list

恢复权限

while read PERMS OWNER GROUP FILE
do
    chmod "$PERMS" "$FILE"
    chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list

答案3

#!/bin/bash
# prepare files
home="/home/exchange"
cd $home
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $home">>recovery_acl.sh
f='./'
# create acl file sorted by dir_level
for i in `seq 0 15`;do
  find . -mindepth $i -maxdepth $i -type d -exec getfacl {} +|grep -E '*UTS|file:'>>acl
done
sed -i 's/default\:user/\-dm\ u/g' acl
sed -i 's/default\:group/\-dm\ g/g' acl
sed -i 's/user/\-m\ u/g' acl
sed -i 's/group/\-m\ g/g' acl
sed -i 's/\#\ file\:\ /\.\//g' acl
sed -i 's,\\,\\\\,g' acl

while IFS='' read -r line ; do
  # grep dir name
  if echo "$line" | grep -q "$f" ; then
    dir="$line"
    continue
  fi
  echo setfacl $line '"'$dir'"'>>recovery_acl.sh
  # grep non def acl (for files)
  if echo "$line" | grep -q '\-m' ; then
    echo setfacl $line '"'$dir'"'/*>>recovery_acl.sh
  fi
done < "acl"

sed -i "s/\\\134/\\\\\\\134/g" recovery_acl.sh
sed -i "s/\\\040/\\\\ /g" recovery_acl.sh

这个 bash 脚本仅获取 acl 目录(在我的例子中为文件 acls = dir(parent) acl )执行脚本后,将创建另一个“recovery_acl.sh”。

在恢复“没有这样的文件或目录”之类的错误时,意味着 dir 为空或 dirname 有两个/多个空格在一起。

相关内容