编辑:--delay-directory-restore
解决了以下关于无法解压文件的问题。pwd 的权限还是有改动的,所以原贴的问题可能没有解决。
不是真正的答案,而是重现错误的方法。
首先创建一些文件和目录。删除对目录的写访问权限:
mkdir hello
mkdir hello/world
echo "bar" > hello/world/foo.txt
chmod -w hello/world
chmod -w hello
接下来,从目录中创建 tar 文件,保留权限。
cd hello
tar -cpf ../hw.tar --no-recursion ./ world world/foo.txt
cd ..
列出档案:
tar -tvf hw.tar
# dr-xr-xr-x ./
# dr-xr-xr-x world/
# -rw-r--r-- world/foo.txt
到目前为止,由于“权限被拒绝”错误,我无法以普通用户身份解压存档。档案不能天真地解压。本地目录的权限也会改变。
mkdir untar
cd untar
ls -ld .
# drwxr-xr-x ./
tar -xvf ../hw.tar
# ./
# world/
# tar: world: Cannot mkdir: Permission denied
# world/foo.txt
# tar: world/foo.txt: Cannot open: No such file or directory
# tar: Exiting with failure status due to previous errors
ls -ld .
# dr-xr-xr-x ./
尝试umask
和/或-p
没有帮助。但是,添加--delay-directory-restore
确实有助于解压:
tar -xv --delay-directory-restore -f ../hw.tar
# ./
# world/
# world/foo.txt
ls -ld .
# dr-xr-xr-x ./
chmod +w .
也可以将文件解压缩为 root。最让我吃惊的是,tar 显然可以改变 pwd 的权限,目前还没有解决。
顺便说一句,我最初是通过为 / with 创建一个 tarball 来解决这个问题的
tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /
作为 root (pwd=/) 并以普通用户身份解压以创建 linux 容器。