chown
ファイルの所有権と権限(何を使用して変更できるか)をバックアップして復元する方法はありますかchmod
?
あなたはこれを行うことができますWindowsでicaclを使用する。
アクセス制御リストはどうですか?
答え1
これを行うには、次のコマンドを使用できます。アクセス制御リストパッケージ(すべての主要ディストリビューションで利用可能である必要がありますが、基本インストールの一部ではない場合があります)ACLが存在する場合は、それをバックアップして復元するがACLをサポートしていないシステムでもデフォルトの権限に適用されます。
現在のディレクトリとそのサブディレクトリを繰り返しバックアップする権限:
getfacl -R . >permissions.facl
権限の復元中:
setfacl --restore=permissions.facl
答え2
私はこれを行う「既製品」について何も知りません。ただし、基本権限を処理する起動スクリプトは次のとおりです。説明されているACLのどれも処理しませんが、あなたの質問は具体的にこれらの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に複数のスペースが含まれていることを意味します。