IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

compress指令并不是总是压缩文件

Linux|系统管理|WEB开发 2009-12-17 22:13:42 累计浏览 2,764 次
本机暂存

    用户观察到了一个很有意思的现象,某一个目录下10个小文件,每一个大概都只有几十个字节。都是纯文本。分别对这10个文件用compress指令压缩,结果发现其中一个压缩不成功,也没有给出任何报错信息。

    将该文件传送到AIX 5上,使用compress压缩,则给出”file not change”的提示,依然没有压缩。

    给文件重命名,也不行。另外创建一个文件,然后把文件内容复制过去,也不行。

    我尝试用strace跟踪了compress压缩该文件的过程。发现压缩的确做了,但是最后却执行了unlink的操作,也就是把已经压缩好的文件删除了。

    为什么要删除呢?先看看compress的帮助吧,发现有这样一个参数的说明:

     -f Forces output file to be generated, even if one already.

     exists, and even if no space is saved by compressing.

     If -f is not used, the user will be prompted if stdin is.

     a tty, otherwise, the output file will not be overwritten.

    其中提到了压缩空间的问题。我猜测可能是压缩效率的问题。

    于是用compress -f 的方式,果然压缩成功了。比较压缩前和压缩后的大小,结果发现压缩后的文件还比压缩前的文件要大。难怪,所以-f提高了即使没有压缩空间。

    这倒是挺有意思,一来压缩一个文件,大小不减反增,比较少见。二来compress指令还去做比较?

    于是下载了compress 4.2的源代码,大致看了一下,果然有这么一个判断:

以下是代码片段:
    if (bytes_out >= bytes_in && !(force)) 
                    exit_code = 2;

    bytes_out是压缩后的字节,bytes_in是读入的字节,也就是原始文件的大小。force对应的是-f的参数。

    没有想到,这开发人员还这么考虑呀。

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. I/O模型-读书笔记 (累计阅读 7,908)
  2. 给Apache做压力测试时遇到的问题 (累计阅读 7,332)
  3. TCP链接主动关闭不发fin包奇怪行为分析 (累计阅读 6,710)
  4. linux file命令是如何识别文件的类型的 (累计阅读 5,056)
  5. ASM使用AIX raw disk的问题 (累计阅读 4,883)
  6. 还记得这些 Linux 发行版吗?(五) (累计阅读 4,860)
  7. 记一次tps提升,做的配置变更 (累计阅读 4,288)
  8. strace命令用法详解 (累计阅读 4,269)
  9. 关于libcurl不发包的bug定位 (累计阅读 4,080)
  10. 使用strace工具故障排查的5种简单方法 (累计阅读 3,876)