[Share Experiences] bsdtar 归档程序在保留文件特殊属性上比 GNU tar 更全面和简便
Tofloor
poster avatar
littlebat
deepin
2024-03-14 15:12
Author

(首发地址:学习日记 https://www.learndiary.com/2024/03/bsdtar/

大家好,我是淘宝网“学习日记小店”的 Linux 服务提供者 learndiary。今天我将重点分享关于 BSD 版 tar 工具—— bsdtar(libarchive版本,目前最新为3.7.2)在处理和保留文件特殊属性方面的表现。

在几天前,我针对 Linux GNU 版 tar 在保存文件特殊属性的问题上进行了总结,发现即使通过指定一系列参数,GNU tar也无法正确保留如 chattr 设置的某些文件属性,这一问题至今尚未得到解决。

现在,我们将对 bsdtar 进行实际测试,探究其在保留文件特殊属性时的表现情况。我所使用的 bsdtar 并非原始 BSD 系统自带的归档程序,而是基于 libarchive 项目开发的版本。视频演示:【bsdtar 归档程序在保留文件特殊属性上比 GNU tar 更全面和简便】 https://www.bilibili.com/video/BV1qZ421b7mj/ (本文基于“通义千问”归纳视频字幕生成文本修改)

在 Deepin 20.9 Linux 环境下,bsdtar 可以通过“sudo apt install bsdtar”命令进行安装,而在更新的 Linux 发行版如 Debian11/12 及新版 Ubuntu 中,则需要通过安装“libarchive-tools”包来获取 bsdtar 命令。

这里的 bsdtar 版本是 3.3.3。为了检验 bsdtar 在处理特殊属性的能力,我们选取了之前测试 GNU 版 tar 时用到的三个具有代表性的文件:分别设置了 ACL 特殊权限的 acl.txt、使用 chattr 程序设置了不可更改特殊属性的 attr.txt ,以及拥有网络方面特殊属性的 /usr/bin/ping 命令文件。

接下来,为了减少复杂度,我将以 root 用户身份进行创建和解开归档文件操作。先使用 bsdtar 创建一个名为 test.btar 的归档文件,并在其后缀上采用 btar 以区别于其他归档格式。然后,我们将该归档文件解压至一个新的目录 btest 中,并检查这三个文件是否成功保留了各自的特殊属性。主要命令如下:

sudo bsdtar -cvvf test.btar acl.txt attr.txt /usr/bin/ping # 创建归档文件
sudo bsdtar -xvvf test.btar -C btest # 解开归档文件到目录 btest

经过测试,bsdtar 不仅能够保留 acl.txt 的 ACL 特殊权限,同时也保留了 attr.txt 的不可更改属性( i 属性),ping 命令的网络相关特殊属性也得到了完整保留。另外,相对于 GNU 版 tar 保留特殊属性需要添加一系列参数来说,bsdtar 默认就能保留文件特殊属性,显得更加简便和傻瓜化。这一点相较于 GNU 版 tar 对用户更加友好。

还有一点要注意,bsdtar 创建的上述归档文件必须用 bsdtar 解开才能保留全部特殊属性。为了避免时间久了混淆,所以我把归档文件另取一个 .btar 的后缀名以区别。

此外,对于 bsdtar、GNU 版 tar 以及 star 这三个归档程序之间的区别,在参考链接2(Differences Between BSD tar and GNU tar and star)中有详尽的介绍。但其中提到的一个例子是稀疏文件的处理方式,虽然他指出 GNU版 tar 无法压缩稀疏文件,但事实上只需添加 “--sparse” 参数,GNU 版 tar 也能有效处理并压缩稀疏文件。

总的来说,bsdtar 在保留文件特殊属性方面展现出了更全面的功能,尤其在处理 chattr 设置的属性时,相较于 GNU 版 tar 表现更为完善。建议各位在实际工作中根据自身需求和各归档工具的具体特性进行选择和测试,确保满足应用场景的要求。再次强调,无论查阅何种技术文档,都需要结合实践验证,切勿盲目相信不加证实的信息。

本次关于bsdtar在保留文件特殊属性方面的内容分享就到这里,感谢大家的关注与观看,再见!

参考链接:
1、libarchive:https://www.libarchive.org/
2、Differences Between BSD tar and GNU tar and star: https://www.baeldung.com/linux/bsd-tar-gnu-tar-star
3、使用 bsdtar 完整备份/还原 Linux 系统:https://www.mivm.cn/linux-full-backup-with-bsdtar

Reply Favorite View the author
All Replies
兆兆嘟嘟嘟
deepin
2024-03-14 21:44
#1

感谢分享。

Reply View the author