前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >truncate(1) command

truncate(1) command

作者头像
恋喵大鲤鱼
发布2023-10-12 15:24:06
2700
发布2023-10-12 15:24:06
举报
文章被收录于专栏:C/C++基础C/C++基础

1.命令简介

truncate 将文件缩小或扩展到指定大小。

如果指定的文件不存在将被创建。

如果文件大于指定的大小,则会丢失额外的数据。如果较短,它将被扩展,扩展的稀疏部分(空洞)读取时为零字节。

注意,文件空洞部分不占用磁盘空间,文件所占用的磁盘空间仍然是连续的。

在这里插入图片描述
在这里插入图片描述

2.命令格式

代码语言:javascript
复制
truncate OPTION... FILE...

3.选项说明

代码语言:javascript
复制
-c, --no-create
	不创建任何文件。
-o, --io-blocks
	将 SIZE 视为 IO 块数而不是字节数。Linux 文件系统的 IO 块大小通过为 4096 字节。
-r, --reference=<RFILE>
	以 RFILE 为基础尺寸。
-s, --size=<SIZE>
	设置或调整文件大小为指定字节。
--help
	显示帮助信息并退出。
--version
	显示版本信息并退出。

其中 SIZE 参数是一个整数和可选单位,如 10K(10*1024)。单位 K、M、G、T、P、E、Z、Y 都是 1024 的幂。KB,MB,… 为 1000 的幂。 也可以使用二进制前缀:KiB=K,MiB=M,以此类推。

SIZE 也可以添加前缀字符:‘+’ 扩展,‘-’ 减少,‘<’ 最多,‘>’ 至少,‘/’ 向下舍入为 SIZE 的倍数,‘%’ 向上舍入为 SIZE 的倍数。

4.常用示例

我们先创建一个内容为 “Hello World!” 的文件 foo.txt。

代码语言:javascript
复制
# echo 'Hello World!' > foo.txt && ls -l foo.txt
-rw-r--r-- 1 root root 13 Oct 22 21:43 foo.txt

(1)截断文件到指定字节。

比如将上面的 foo.txt 截断到 11 字节,即删除最后一个换行符和感叹符。

代码语言:javascript
复制
# truncate -s 11 foo.txt

# cat foo.txt
Hello World

(2)填充文件到指定字节。

比如将上面的 foo.txt 填充到 4097 字节,然后再使用 du 查看磁盘占用空间大小。

代码语言:javascript
复制
# truncate -s 4097 foo.txt

# du -h foo.txt
4.0K	foo.txt

可见,文件被填上空洞,实际上是不占用磁盘空间的。

至于为什么显示 4K,因为 Linux 文件系统存储最小单位为 block,不足 1 个 block 大小的文件也要占用 1 个 block 大小。这里的一个 block 一般等于 4096 字节。

我们可以通过 ls -l 来显示文件包含空洞的逻辑大小。

代码语言:javascript
复制
# ls -l foo.txt
-rw-r--r-- 1 root root 4097 Oct 22 21:59 foo.txt

参考文献

truncate(1) - Linux manual page - man7.org

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.命令简介
  • 2.命令格式
  • 3.选项说明
  • 4.常用示例
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档