我使用期望脚本自动将一些支持文件传输到终端上。支持文件在 scp 到目标终端之前会自动压缩。这是通过一个内部的 Expect 程序来完成的,该程序会自动填写 scp 的密码,因此我们不必输入密码。我可以毫无问题地复制各个文件,但是当我尝试复制 tar.gz 时文件,它更改 /tmp 目录的权限。我一直在将 /tmp 目录更改回 1777 以获得权限,并将其更改为 root.root,这是通常的设置方式,但这并不总是有效。由于 sqlite 无法将临时文件写入 /tmp,它会导致 sqlite 错误,这是非常具有破坏性的。我怎样才能确定造成这种情况的确切原因?我知道它必须与 tar.gz 文件相关,但我的印象是 tar 会保留文件的权限。
我的目录中文件的权限是:
-rw-rw-r-- 1 aembree aembree 88K Oct 2 15:20 dropin.tar.gz
在传输 /tmp 之前,在 ls -al 中看起来像这样:
drwxrwxrwt 15 root root 8.4K Oct 2 15:08 tmp
传输后 /tmp 看起来像这样:
drwxrwxr-x 15 10539 10539 8.4K Oct 2 15:01 tmp
正在运行的 tar 命令如下:
tar -vPczf /home/aembree/bin/resources/dev/dropin.tar.gz --exclude='helperscript' -C $dropinlist . > /home/aembree/bin/resources/logs/tarlog
一旦文件位于远程计算机上,expect 就会执行以下命令来解压它:
send "cd /tmp ; tar -xzf dropin.tar.gz ; rm dropin.tar.gz ; cd ;\n"
答案1
您已将其包含.
在提供给 的源集合中tar
。当您提取 tarball 并应用权限时会出现问题。您的源目录.
将被提取并应用权限。不幸的是在提取点.
实际上是/tmp
。
修复方法是从 tarball 中排除.
或创建一个临时目录以在/tmp
其中提取所有内容。