GNU tar如何在Linux中保留由“chattr +i”设置的文件不可变属性?

GNU tar如何在Linux中保留由“chattr +i”设置的文件不可变属性?

我想使用 tar(GNU tar 1.30) 来备份 Linux 中由“chattr +i”设置的不可变属性的文件。命令行如下:

mdx@e5450:~$ touch test.txt
mdx@e5450:~$ sudo chattr +i test.txt
mdx@e5450:~$ lsattr test.txt
----i---------e---- test.txt
mdx@e5450:~$ sudo tar --acls --selinux --xattrs --xattrs-include='*' -cpvvzf test.tar.gz test.txt
-rw-r--r--  mdx/mdx           0 2024-03-01 16:30 test.txt
mdx@e5450:~$ mkdir test
mdx@e5450:~$ sudo tar --acls --selinux --xattrs --xattrs-include='*' -xpvvzf test.tar.gz -C test
-rw-r--r--  mdx/mdx           0 2024-03-01 16:30 test.txt
mdx@e5450:~$ lsattr test/test.txt
--------------e---- test/test.txt
mdx@e5450:~$

你看,解压后immutable属性就没有了。

我可以使用bsdtar 3.3.3存档test.txt,不可变属性将被保留。详情如下:

mdx@e5450:~$ sudo bsdtar -cvvzf test.btar.gz test.txt
a -rw-r--r--  1 mdx    mdx         0 Mar  1 16:30 test.txt
mdx@e5450:~$ mkdir btest
mdx@e5450:~$ sudo bsdtar -xvvzf test.btar.gz -C btest
x -rw-r--r--  0 mdx    mdx         0 Mar  1 16:30 test.txt
mdx@e5450:~$ lsattr btest/test.txt
----i---------e---- btest/test.txt

在 Linux 中使用 GNU tar 时,是否可以保留由“chattr +i”设置的文件不可变属性?

答案1

我想你已经发现了 GNU tar 的一个缺点。但事情并不像你想的那样!

“i”是 Linux 文件系统术语中所谓的“属性”。现在,您已正确保存和恢复扩展属性,一个很晚的补充,但不是老派的属性

遗憾的是,GNU tar 没有命令行选项来强制执行这些操作,并且似乎不能一致地处理它们。 bsdtar 确实正确地执行了这一事实,这表明存在错误或功能缺陷。我敢打赌它根本就没有实现,因为我无法在 GNU tar 源代码中快速找到ioctl它。FS_IMMUTABLE_FL不应该有太多的补充 - 请向他们的邮件列表发送电子邮件询问这是否是有意的!

相关内容