0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Linux使用truncate命令将文件缩小或扩展到指定的大小

CHANBAEK 来源:myfreax 作者:myfreax 2022-12-06 17:06 次阅读

在某些情况下,您可能希望将现有文件截断,即减少或者缩小文件的大小。简单来说,截断文件意味着删除文件内容而不删除文件。

截断文件比删除文件后重新创建文件并设置正确的权限和所有权。更快,更容易。

还有一点就是,如果要删除的文件已经被其它进程打开,如果你此时删除文件可能会导致使用该文件的进程没有响应。但你可以尝试将文件截断。

教程说明如何在Linux使用truncate命令将文件缩小或扩展到指定的大小。

truncate 命令截短/清空/填充文件

truncate命令的-s选项可让您将文件的大小缩小或扩展到指定的大小。文件大小参数一个整数,该整数是任何数*1024。你也可以整数后面指定可选的单位参数。

单位可以是K,M,G,T,P,E,Z,Y或者是KB,MB,GB等。此外大小参数还可以指定一个前缀,如下。

+加号表示增加的大小, -减少指定的大小。还可以是大于<或者小于号>,增加或者减少指定大小,使用/ 进行四舍五入,%向上取整。

如果文件大于指定的大小,则会删除额外的数据。如果文件较小,则对其进行扩展到指定大小,并且扩展部分的读数为零字节。

truncate -s 0 filename命令将文件的缩小的零的大小。命令truncate -s +1M file1会在原来基础再增加1M大小。

truncate -s 0 filename
truncate -s +1M filename
ls -al filename

truncate 命令清空日志文件

随着时间的流逝,您的磁盘驱动器可能会堆满很多大型日志文件,这些日志文件会占用大量磁盘空间。

此时,你可以运行命令sudo truncate -s 0 /var/log/**/*.log清空清空/var/log目录以.log结尾的文件。

另一个更好的选择是使用logrotate工具压缩和删除日志文件。

sudo truncate -s 0 /var/log/**/*.log

Shell 重定向清空文件

清空文件最简单,最常用的方法是使用Shell重定向操作符>。使用重定向清空文件的命令是: > filename

:返回零字节的空字符串,也可以理解为不产生任何输出。重定向操作符>将命令:的输出重定向到指定文件。

filename是您要清空的文件。如果文件存在,它将被清空为零的大小,即空文件,否则创建零字节的文件。

现在大多数Shell程序,例如Bash或Zsh,都可以在重定向符号之前省略命令,因此你可以将: > filename写成> filename

: > filename
> filename

除了:命令,你还可以使用另一个不产生任何输出的命令cat /dev/null/dev/null是空设备文件。

然后使用重定向操作符> 重定向到你要清空的文件,例如命令cat /dev/null > filename会清空文件filename

此外还可以使用echo命令和-n选项。-n选项表示不输出尾随的换行符。例如命令echo -n > filename

cat /dev/null > filename
echo -n > filename

Sudo与Shell 重定向清空文件

要能够清空文件,您需要对文件具有写权限。通常您可能会因为权限问题而使用 sudo命令。

但是使用sudo提升权限不适用于重定向操作符>,例如命令sudo : > /var/log/syslog

你的终端将会打印错误消息bash: /var/log/syslog: Permission denied。

sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied

遇到此问题时可以有几种解决方案。第一种是使用sudo和sh命令启动子shell运行命令。

另一种解决方案是将命令的标准输出通过管道传递给tee命令,然后使用sudo将提升权限运行tee命令晴空文件。例如命令: | sudo tee filename

sh命令的-c选项允许用户指定要运行的命令,命令将会shell的子进程运行。命令sudo sh -c '> filename'创建shell子进程运行> filename命令。

sudo sh -c '> filename'
: | sudo tee filename

结论

要在Linux中截断文件,请使用重定向操作符>,后跟文件名或者使用truncate命令。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
收藏 人收藏

    评论

    相关推荐

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令
    的头像 发表于 12-04 14:45 554次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>Linux</b>中使用htop<b class='flag-5'>命令</b>

    Linux拷贝命令

    Linux cp命令拷贝命令非常实用,cp命令可以指定路径下的
    发表于 07-24 08:32

    请问linux如何用命令实现以G、M、K的形式描述文件文件夹的大小

    linux下如何用命令实现以G、M、K的形式描述文件文件夹的大小
    发表于 12-16 06:45

    可以ESP Basic扩展到ESP32吗?

    ,这些库肯定会让他建立很多伟大的项目并学习大量关于 MCU 和 IOT 的问题,你打算 ESP Basic 扩展到 ESP32 吗 ?
    发表于 05-10 07:55

    何在Keil中将函数变量编译指定地址

    何在Keil中将函数变量编译指定地址在Keil 中将函数变量编译
    发表于 10-19 06:51

    Linux文件内容查询命令

    Linux文件内容查询命令 Linux文件内容查询命令  grep、fgrep和egrep
    发表于 01-18 12:45 786次阅读

    Linux基础教程之如何在linux不解压tar.gz文件查看的文件大小资料概述

    本文档的主要内容详细介绍的是Linux基础教程之如何在linux不解压tar.gz文件查看的文件大小详细程序资料免费下载。
    发表于 10-31 17:06 2次下载

    Linux中的35个find命令用法

    Linux查找命令Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定
    的头像 发表于 02-02 16:53 3412次阅读
    <b class='flag-5'>Linux</b>中的35个find<b class='flag-5'>命令</b>用法

    何在Linux使用pidof命令

    `pidof`是一个命令行程序,可让您找到正在运行程序的进程ID。在教程中,我们将说明如何在Linux 使用pidof命令
    的头像 发表于 12-05 17:01 1887次阅读

    何在Linux使用touch命令

    Linux touch命令用于更改文件时间戳。但touch命令的最常见用法是创建文件
    的头像 发表于 12-05 17:21 1698次阅读

    何在Linux使用rpm命令

    RPM是基于RedHat Linux发行版的软件包管理器,例如CentOS和Fedora。RPM还指`rpm`命令和`.rpm`文件扩展名称。
    的头像 发表于 01-04 17:14 1395次阅读

    何在Linux上使用粘贴命令

    Linux中的粘贴命令是一个有用的工具,用于将多个文件或文本行合并到单个文件或输出中。它通常与剪切命令结合使用,允许用户剪切特定行或文本部分
    的头像 发表于 02-08 16:58 1453次阅读

    恒讯科技分析:如何在Linux上使用rm命令删除文件和目录?

    本指南展示了如何在Linux中使用rm命令行删除文件、目录和其他内容?
    的头像 发表于 06-09 17:02 856次阅读

    linux中查找文件命令

    Linux中,可以使用以下命令来查找文件: find 命令:可以在指定目录及其子目录中查找文件
    的头像 发表于 11-08 14:24 609次阅读

    linux删除文件命令rm

    Linux系统中,可以使用rm命令来删除文件或目录。该命令的功能是删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下的所有
    的头像 发表于 11-13 16:42 435次阅读