gzip在只读文件系统上压缩文件的关键是使用-c选项将压缩结果输出到标准输出,再重定向至外部可写路径(如/tmp或/home),从而避免修改只读分区;同时可结合tar -czf将整个只读目录打包压缩到可写位置,并需提前验证目标路径的写权限与磁盘空间。

在只读文件系统上使用 gzip 压缩文件,关键在于**不依赖原路径写入**——因为只读分区无法创建或修改文件。此时必须把压缩结果重定向到外部可写位置(比如 /tmp、/home 或挂载的 USB 分区),同时保留源文件不变。
用 -c 选项输出到标准输出,再重定向到可写路径
这是最常用且可靠的方法:-c(或 --stdout)让 gzip 把压缩数据输出到 stdout,不触碰原文件,也不尝试写入当前只读目录。
- 语法:
gzip -c /path/to/readonly/file > /writable/path/file.gz - 示例:源文件在只读的
/mnt/cdrom/report.txt,想存到可写的/home/user/backup/下:gzip -c /mnt/cdrom/report.txt > /home/user/backup/report.txt.gz - 注意:目标路径(如
/home/user/backup/)必须已存在且有写权限;若目录不存在,需提前创建。
配合 tar 实现多文件打包压缩到外部路径
如果要压缩多个文件或整个目录结构(虽然 gzip 本身不支持目录,但可和 tar 配合),推荐用 tar -czf 直接输出到可写位置:
- 命令:
tar -czf /writable/backup.tar.gz -C /path/to/readonly/dir . - 说明:
-C切换到只读目录作为根路径,.表示打包当前所有内容,-z调用 gzip 压缩,最终输出到可写分区。 - 优势:避免逐个处理文件,还能保留目录结构和部分元数据。
验证目标路径是否可用并处理常见错误
执行前建议先确认可写路径状态,避免因权限或空间不足导致失败:
- 检查写权限:
ls -ld /writable/path,确保你对该目录有w权限 - 检查磁盘空间:
df -h /writable/path,确保剩余空间大于预估压缩后大小(通常为原大小的 30%–70%,文本类更小) - 若提示
Permission denied,不是 gzip 问题,而是重定向目标不可写;若提示No space left on device,需清理或换路径
补充:解压时同样需指定可写目标路径
后续解压也需注意路径选择——不能直接解到只读分区:
- 正确方式:
gzip -dc /writable/file.gz > /writable/unpacked.txt(解压为文本) - 或:
gunzip -c /writable/file.gz | tar -xf - -C /writable/extract/(配合 tar 解包) - 禁止:
gzip -d /mnt/cdrom/file.gz(会失败,因只读分区不允许写入)











