我正在使用linux软件解决方案,该解决方案使用tar命令备份大量数据。 硬编码到调用tar的二进制文件中的命令是:
/bin/tar --exclude "/backup" --exclude / --ignore-failed-read -cvjf - /pbackup 2>>'/tar_err.log' | split -b 1000m - '/backup/temp/backup.tar.bz2'
没有机会改变命令,因为它是被编码的。它使用bzip2来压缩数据。当使用参数--use-compress-prog = pbzip2(使用所有CPU内核)时,我经历了强劲的性能提升(高达60%)。 通过将bzip2从/ bin / bzip2符号链接到pbzip2二进制文件,我试图欺骗软件,但是在监视进程时它仍然使用bzip2,因为我将它内置到tar中。
我知道这是一个棘手的问题,但有没有办法利用pbzip2而不改变外部调用的命令?
我的系统是Debian Sequeeze。
非常感谢!
答案 0 :(得分:1)
危险:未来的丑陋解决方案;在继续之前备份二进制文件
首先,检查硬编码字符串是否易于访问:在二进制文件上使用strings
,看看它是否显示您所说的字符串(可能是多个部分,例如/bin/tar
,--exclude
,--ignore-failed-read
,...)。
如果成功,请抓住您选择的十六进制编辑器,打开二进制文件并查找硬编码字符串;如果它分成几个部分,你需要的那个是包含/bin/tar
的那个;使用一些任意三个字母的名称覆盖tar
,例如fkt
( f a k e t ar;快速Google搜索没有显示{{1}的任何结果},所以我们应该是安全的。)
该程序现在应该调用/usr/bin/fkt
而不是常规/usr/bin/fkt
。
现在,将tar
这样的脚本放入:
/bin
使用您之前选择的名称(#!/bin/sh
/bin/tar --use-compress-prog=pbzip2 $*
)调用它并正确设置权限(它们应为755并由fkt
拥有)。这个脚本只需要获取它获得的所有参数并调用真实的root
,在它们前面添加你需要的参数。
我在评论中建议的另一个解决方案可能是为应用创建tar
,将chroot
重命名为其他名称(tar
,也许?)并调用上面的脚本realtar
(显然现在您应该将脚本中的tar
更改为/bin/tar
)。
如果程序没有经常更新并且第一次尝试就有效,我可能会选择第一个解决方案,设置和维护chroot并不好玩。
答案 1 :(得分:0)
为什么不将/ bin / tar移动到(比方说)/ bin / tar-original
然后创建一个脚本/ bin / tar来做你想做的任何事情。