bsdtar 归档程序在保留文件特殊属性上比 GNU tar 更全面和简便

(首发地址:学习日记 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/ (本文基于“通义千问”归纳视频字幕生成文本修改)

bsdtar 归档程序在保留文件特殊属性上比 GNU tar 更全面和简便

在 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python编程基础】第一节.Python基本语法(上)

文章目录 前言⼀、Python介绍二、Python环境配置三、Pycharm 书写代码四、Python基本语法 4.1 print 函数的简单使用 4.2 注释 4.3 Python 代码中三种波浪线和 PEP8 4.4 在 cmd 终端中运⾏ Python 代码 4.5 变量 4.6 数据类型 4.7 类型转换…

字典树 [Tire]

数据结构、算法总述:数据结构/基础算法 C/C_禊月初三的博客-CSDN博客 字典树,英文名 trie。顾名思义,就是一个像字典一样的树。 Trie 树是一种多叉树的结构,它的特点是所有的字符都存储在树的分支上,并且从根节点到某…

什么是VR应急预案演练虚拟化|VR体验馆加盟|元宇宙文旅

VR 应急预案演练虚拟化指的是利用虚拟现实(Virtual Reality,VR)技术进行应急预案演练的过程。在传统的应急预案演练中,人们通常需要在实际场地或模拟环境中进行演练,这可能存在一些限制,如成本高昂、场地受…

禅理“吃饭时吃饭,睡觉时睡觉”有多难?

吃饭时吃饭,睡觉时睡觉。这句是非常有名的禅理,简单的一句话透露了深刻内容。 电视剧《百年虚云》讲述了近代佛门宗师“虚云老和尚”一百二十年的传奇人生。他一生经历过道光,咸丰,同治,光绪,宣统&#xf…

Delphi7应用教程学习1.3【练习题目】:文本及悬停文字的显示

这个例子主要用到了btn的Hint 属性,Hint是提示的意思。 还有Delphi7还是很好用的,改变了的属性是粗体,默认没有改变的属性为细体。

吴恩达prompt 笔记2:迭代提示开发(Iterative Prompt Develelopment)

1 前言 我们很难在初次尝试中就设计出最佳的提示,因此需要根据ChatGPT的反馈进行分析,分析输出具体在哪里不符合期望,然后不断思考和优化提示。如果有条件的话,最好是利用批量的样本来改善提示,这样可以对你的优化结…

【Docker】Kong 容器化部署及配置参数说明

Kong标准软件基于Bitnami apache 构建。当前版本为2.4.58 你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platform qinghub…

elasticsearch常见问题:xpack.security.transport.ssl、unknown setting [node.master]

文章目录 引言I 安装elasticsearch1.1 安装Master Node1.2 安装Slave nodeII elasticsearch常见问题2.1 invalid configuration for xpack.security.transport.ssl2.2 server ssl configuration requires a key and certificate2.3 unknown setting [node.master]III Kibana启动…

两台 CentOS 之间传数据:SCP 方式

两台 CentOS 之间传数据:SCP 方式 文章目录 两台 CentOS 之间传数据:SCP 方式一、CentOS 安装 SSH 服务0、注意1、更新系统2、安装 OpenSSH 服务器3、启动 SSH 服务4、检查SSH服务状态5、配置防火墙6、测试 SSH 连接7、更改SSH默认端口(可选) 二、文件传…

Spring炼气之路(炼气一层)

目录 一、IOC 1.1 控制反转是什么? 1.2 什么是IOC容器? 1.3 IOC容器的作用 1.4 IOC容器存放的是什么? 二、DI 2.1 依赖注入是什么? 2.2 依赖注入的作用 三、IOC案例实现 3.1下载Maven 3.2 配置Maven中的settings.xml文…

【经验总结】ubuntu 20.04 git 上传本地文件给 github,并解决出现的问题

1. 在GitHub 上创建仓库 登录 GitHub 个人网站 点击 New 填写 Repository name, 以及 Description (optional) 选择 Public , 并添加 Add a README file 点击 Create repository github repository 创建成功 2. 设置SSH key 在本地 bash 运行:…

【PLC】现场总线和工业以太网汇总

1、 现场总线 1.1 什么是现场总线 1)非专业描述: 如下图:“人机界面”一般通过以太网连接“控制器(PLC)”,“控制器(PLC)”通过 “现场总线”和现场设备连接。 2)专业描述(维基百科) 现场总线…

【好玩的经典游戏】Docker环境下部署经典贪吃蛇小游戏

【好玩的经典游戏】Docker环境下部署经典贪吃蛇小游戏 前言一、相关介绍1.1 httpd介绍1.2 贪吃蛇小游戏介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、检查本地环境3.1 检查系统版本3.2 检查Docker服务状态四、下载httpd镜像五、创建httpd容器5.1 新建目录5.2 创建…

开源项目_搭建对象存储服务MinIO

1 简介 MinIO 是一个开源的对象存储服务器,与 Amazon S3 兼容。它的设计目标是为大规模数据工作负载提供简单、安全和高性能的存储。 以下是 MinIO 的一些主要特性:高性能,S3 兼容,安全性,可扩展性,开源&…

WAAP全站防护是什么,有什么作用

WAAP全站防护是基于风险管理和WAAP理念打造的安全方案,以“体系化主动安全” 取代安全产品的简单叠加,为各类Web、API业务等防御来自网络层和应用层的攻击,帮助企业全面提升Web安全水位和安全运营效率。 主要的特性在于: 1.全周…

学习Java十一天总结

目录 一、走进Java编程世界 二、变量、常量和运算符 三、if选择结构 四、switch选择结构 五、while循环结构 六、for循环结构 七、数组 八、深度循环结构 九、类和对象 十、类的无参方法 十一、类的带参方法 十二、字符串 一、走进Java编程世界 程序是为了让计算机…

C语言例:设 int a=11; 则表达式 a+=a-=a*a 的值

注&#xff1a;软件为VC6.0 代码如下&#xff1a; #include<stdio.h> int main(void) {int a11, b;b (aa-a*a); //a*a121 -->a-121结果为a-110 -->a-110结果为a-220printf("表达式aa-a*a 的值为&#xff1a; %d\n",b);return 0; } //优先级&#x…

常用pip命令

pip是一个现代的&#xff0c;通用的Python包管理工具。它提供了对Python包的查找、下载、安装、卸载的功能。 安装库 pip install package_name如果你想从特定的源安装&#xff0c;可以使用-i或--index-url选项&#xff1a; pip install package_name -i https://pypi.examp…

mac安装rust环境

mac安装rust环境 老规矩官方文档 1. mac官网使用的是脚本安装, 至于为啥没使用brew也没推荐俺也不太清楚 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh2. 一般来说中途会遇见有一个选择我这里选择直接回车默认安装(如果以后我研究明白的话会进行更新, 现在是…

Java-Thread 几种创建方式

Thread 创建线程的四种方法&#xff1a; 继承Thread类创建线程类&#xff0c;然后创建线程实例。实现Runnable借口创建线程目标类&#xff0c;然后创建线程实例。使用Callable和FutureTask创建异步任务&#xff0c;然后创建线程实例。通过线程池创建线程 Runnable异步任务的…