首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AIX中构建安全性acl复制脚本(需要帮助完成它)

在AIX中构建安全性acl复制脚本(需要帮助完成它)
EN

Stack Overflow用户
提问于 2013-11-16 11:52:10
回答 2查看 513关注 0票数 2

到目前为止,我编写的脚本如下:

代码语言:javascript
复制
#!/bin/ksh

rm -fR /tmp/aclget
cd /

find ./ -type d \
| grep -v "^./tmp/" \
| xargs -I {} mkdir -p "/tmp/aclget/{}"

find ./ \
| grep -v "^./tmp/" \
| xargs -I {} aclget -o "/tmp/aclget/{}.acl" "{}"

cd /tmp
tar -cvf acl.tar aclget
gzip acl.tar

在另一台计算机上复制权限

代码语言:javascript
复制
#!/bin/ksh
cd /tmp
gunzip acl.tar
tar -xvf acl.tar

cd /tmp/aclget
find ./ -exec aclput -i {} `echo "{}" | sed "s/^\.//g"`

我遇到的问题是,在构建列表时,tmp总是没有空间。是否有可能制造管道,使其能够在飞行中工作?

在阅读反馈并尝试使用uuencode的概念后更新代码,经过一些测试后进行更改。(xargs中的255字节限制可能需要内核调优)

检查:

代码语言:javascript
复制
odmget -q "attribute=ncargs" PdAt          
lsattr -El sys0 | grep ncargs

调谐:

代码语言:javascript
复制
chdev -l sys0 -a ncargs=1024

剧本:

代码语言:javascript
复制
#!/bin/ksh

cd /

find ./ -name "^./tmp/" -o \
-exec sh "aclget '{}' | uuencode - '/tmp/acl/{}.acl'" \; \
| gzip acl.uu.gz

有人想到相反的部分了吗?我到目前为止,需要削减文件,因为uudecode只能解码第一个文件。

代码语言:javascript
复制
#!/bin/ksh

gunzip acl.uu.gz | uudecode
cd /tmp
find ./ -exec aclput -i {} `echo "{}" | sed "s/^\.//g"`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-16 13:00:22

我从未使用过aclget,但以下是一些您可以使用的通用方法。

首先,您可以按目录对块目录进行处理,希望没有单个块太大。此外,您还可以优化tar类:

代码语言:javascript
复制
tar -vc aclget | gzip -9 > myfile1.tar.gz

如果需要,btw、bzip和xz有更好的压缩比。

另一种办法可以取代:

代码语言:javascript
复制
xargs -I {} aclget -o "/tmp/aclget/{}.acl" "{}"

有一个while循环,如:

代码语言:javascript
复制
(
  batch_idx=0
  iterations=1
  threshold=$(( 100 * 1024 * 1024 ))
  while read -r FILE; do
    aclget -o "/tmp/aclget/$FILE.acl" "$FILE"
    tar uv -C /tmp/aclget -f acl.tar $FILE.acl
    rm "/tmp/aclget/$FILE.acl"
    if (( iterations%threshold == 0 )); then
      mv acl.tar acl_$batch_idx.tar
      gzip acl_$batch_idx.tar
      (( batch_idx+=1 ))
      iterations=0
    fi
    (( iterations+=1 ))
  done
  mv acl.tar acl_$batch_idx.tar
  gzip acl_$batch_idx.tar
)

使用find-print0选项也很好,但是您需要在while子shell中更改IFS变量,但是您需要测试它,希望它不会影响除了read之外的其他任何命令。

您知道,我没有给您一个经过测试的解决方案,但我看到您非常有能力将上面的代码转换为工作代码。致以问候!

更新:忘记告诉您使用的伪函数filesize。它非常依赖于你的机器上的平台。如果可以使用statwcdu等。见这里的建议:

更新2:我更新了well循环,使其与ksh (来自aix7)兼容,并且避免使用文件大小作为标准。您将需要调整阈值变量,以便它足够大,以避免大量的输出文件,并将适合您的自由空间。

票数 0
EN

Stack Overflow用户

发布于 2013-11-20 13:22:41

太久了,所以我打开另一个标签继续,

这些问题最终得出的结论是,我在构建简单高效的脚本方面要求太高。没有百分之百,所以这是我的问题。

而且,我的盒子里的gzip似乎无法执行动态压缩,它会在内存中积累变化,所以使用压缩。

现在的版本:

dump_acl2.sh

代码语言:javascript
复制
#!/bin/ksh
aclget $1 | uuencode -m $1.acl

dump_acl.sh

代码语言:javascript
复制
#!/bin/ksh

cd /
find ./ \
-type nfs \
-o -name "^./tmp/" \
-o -exec \tmp\dump_acl2.sh {} \; \
| compress -c \
> \tmp\dump_acl.`hostname -s`.uu.Z
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20018085

复制
相关文章

相似问题

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