首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以创建脚本来保存和恢复权限?

问是否可以创建脚本来保存和恢复权限?
EN

Stack Overflow用户
提问于 2010-08-10 22:51:02
回答 13查看 17.5K关注 0票数 25

我使用的是linux系统,需要在一组嵌套文件和目录上尝试一些权限。我想知道是否有一些方法可以保存文件和目录的权限,而不保存文件本身。

换句话说,我想保存perm,编辑一些文件,调整一些权限,然后将权限恢复到目录结构中,保持更改后的文件不变。

这有意义吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-08-10 23:10:38

嗯。因此,您需要1)读取文件权限2)以某种方式存储它们,并与每个文件相关联3)读取您存储的权限并将其重新设置

不是一个完整的解决方案,而是一些想法:

代码语言:javascript
复制
stat -c%a filename
>644

很可能是与

代码语言:javascript
复制
find -exec

为了存储这些信息,this so question有一些有趣的想法。基本上,您可以创建一个与实际文件相匹配的临时文件结构,每个临时文件都包含文件权限

为了重置,你迭代你的临时文件,读权限和chmod实际文件回来。

票数 6
EN

Stack Overflow用户

发布于 2010-08-10 23:26:05

最简单的方法是使用ACL工具,即使您实际上并不使用ACL。只需调用getfacl -R . >saved-permissions来备份目录树的权限,并调用setfacl --restore=saved-permissions来恢复它们。

否则,备份权限的方法是使用find -printf。(GNU find是必需的,但这是您在Linux上所拥有的。)

代码语言:javascript
复制
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions

您将获得一个包含以空字符分隔的记录的文件;每个记录都包含一个文件的数字权限、用户名、组名和文件名。要恢复,循环遍历记录并调用chmod和chown。find的-depth选项是为了防止您想要使某些目录不可写(您必须首先处理它们的内容)。

您可以使用从Daniel Alder提供的代码段派生的bash代码段来恢复权限

代码语言:javascript
复制
while IFS=: read -r -d '' mod user group file; do
  chown -- "$user:$group" "$file"
  chmod "$mod" "$file"
done <saved-permissions

您可以使用以下awk脚本将find输出转换为一些shell代码,以恢复权限。

代码语言:javascript
复制
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
    print "#!/bin/sh";
    print "set -e";
    q = "\047";
}
{
    gsub(q, q q "\\" q);
    f = $0;
    sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
    print "chown --", q $2 ":" $3 q, q f q;
    print "chmod", $1, q f q;
}' > restore-permissions.sh
票数 42
EN

Stack Overflow用户

发布于 2013-04-21 07:20:27

首先安装ACL包:

代码语言:javascript
复制
sudo apt-get install acl

递归地存储文件的权限和所有权:

代码语言:javascript
复制
getfacl -R yourDirectory > permissions.acl

恢复(相对于当前路径):

代码语言:javascript
复制
setfacl --restore=permissions.acl
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3450250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档