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

时间:2013-11-16 11:52:10

标签: ksh aix

到目前为止我写的当前脚本:

#!/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

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

#!/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个字节限制进行内核调整)

检查:

odmget -q "attribute=ncargs" PdAt          
lsattr -El sys0 | grep ncargs

Tunning:

chdev -l sys0 -a ncargs=1024

脚本:

#!/bin/ksh

cd /

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

任何人都有相反的想法吗?我到目前为止,需要削减文件,因为uudecode只能解码第一个文件

#!/bin/ksh

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

2 个答案:

答案 0 :(得分:0)

我从未使用过aclget,但这里有一些你可以使用的通用方法。

首先,您可以按目录对目录进行工作,并希望没有单个块太大。您还可以优化tar,如:

tar -vc aclget | gzip -9 > myfile1.tar.gz

btw bzip和xz在需要时具有更好的压缩率。

另一种方法可能是:

xargs -I {} aclget -o "/tmp/aclget/{}.acl" "{}"

有一个while循环:

(
  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的{​​{1}}选项也非常好,但是您需要更改-print0子shell中的IFS变量。你需要测试一下,希望它不会影响while以外的任何其他命令。

你知道,我没有给你一个经过测试的解决方案,但我发现你有能力将上述内容变成工作代码。此致!

更新:忘了告诉你使用过的伪功能read。它与您的机器上的平台相关。如果可以使用filesizestatwc和其他人...请点击此处获取建议:

更新2 :我将while循环更新为兼容ksh(来自aix7)我避免使用filesize作为标准。您需要调整阈值变量,使其足够大,以避免大量输出文件和窗台适合您的可用空间。

答案 1 :(得分:0)

已经太长了,所以我打开另一个标签继续,

问题终于得出结论,我对构建简单有效的脚本要求太高了。没有100%,所以这是我的问题。

另外,我的框中的gzip似乎无法在飞行压缩中执行,它会累积内存中的更改,因此会使用compress。

现在的版本:

dump_acl2.sh

#!/bin/ksh
aclget $1 | uuencode -m $1.acl

dump_acl.sh

#!/bin/ksh

cd /
find ./ \
-type nfs \
-o -name "^./tmp/" \
-o -exec \tmp\dump_acl2.sh {} \; \
| compress -c \
> \tmp\dump_acl.`hostname -s`.uu.Z