如何在Linux中使用截断命令

时间:2020-03-05 15:30:05  来源:igfitidea点击:

如何在Linux中使用truncate命令。
Linux truncate命令通常用于将每个FILE的大小缩小或者扩展到指定的大小。
文件的最终大小取决于首字母。
如果FILE(例如归档文件或者日志文件)大于指定的大小,则会丢失另外的数据,但是如果FILE较短,则会对其进行扩展,并且扩展部分(孔)的读数为零字节。

显示的命令已在CentOS 7机器和Ubuntu 16.04服务器上进行了测试。
大多数Linux发行版附带truncate命令。
如果系统没有截断命令,那么对于Ubuntu/Debian系统,它由coreutils软件包提供。

$sudo apt-get install coreutils
$dpkg -l | grep coreutils
coreutils 8.25-2ubuntu3~16.04 amd64 GNU core utilities

对于CentOS 7:

# yum provides truncate
coreutils-8.22-18.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo : base
Matched from:
Filename : /usr/bin/truncate

如果未安装,请使用:

$sudo yum-y install coreutils

常见的截断选项

-c, --no-create --> do not create any files
-o, --io-blocks --> treat SIZE as number of IO blocks instead of bytes
-r, --reference=RFILE --> base size on RFILE
-s, --size=SIZE --> set or adjust the file size by SIZE bytes
--help --> display this help and exit
--version --> output version information and exit

使用截断时,SIZE参数必须为整数和可选单位(例如:10K为10 * 1024)。
使用的单位为K,M,G,T,P,E,Z,Y(1024的幂)或者KB,MB,...(1000的幂)。

SIZE参数也可以以以下修饰字符之一作为前缀:'+'扩展,'-'减少,'<<,最多'>'至少,'/'向下舍入为'% '取整。

截断用法示例

以下是truncate命令的最常见用法示例。

1.使用truncate清除文件内容

# truncate -s 0 file

这对于例如清除日志文件很有用。
这比手动删除文件并为新文件做些触摸要好。
截断过程基本上删除了文件的所有内容。
它不会删除文件本身,但会将其作为零字节文件保留在磁盘上。
例如,让我们使用truncate将/var/log/syslog清除为0个字节。

# du -sh /var/log/syslog
616K /var/log/syslog
# truncate -s 0 /var/log/syslog

如果我们再次检查文件大小,则该大小应为0字节。

# du -sh /var/log/syslog
0 /var/log/syslog

请注意,truncate命令将保留文件许可权和所有权。
我们可以使用ls -lh命令进行确认:

# ls -lh /var/log/syslog
-rw-r----- 1 syslog adm 0 Mar 17 18:34 /var/log/syslog

2.将文件截断为特定大小

下面的示例将文件截断为100个字节。

# touch file.txt
#  ls -lh file.txt 
-rw-r--r-- 1 root root 0 Mar 17 18:39 file.txt 
# truncate -s 100 file.txt

现在检查文件大小:

ls -lh file.txt
-rw-r--r-1根根100 Mar 17 18:40 file.txt

要将文件截断为100 KB,请执行以下操作:

# truncate -s 100K file.txt
# ls -lh file.txt 
-rw-r--r-- 1 root root 100K Mar 17 18:41 file.txt

根据需要,可以使用M,G,T,P,E,Z和Y代替“ K”。

3.使用截断扩展文件大小

我们也可以将文件的大小从当前扩展到所需状态。
使用-s选项,其大小为+。

$touch file.txt
$truncate -s 100K file.txt
$ls -lh file.txt 
-rw-r--r-- 1 jmutai wheel 100K Mar 18 13:12 file.txt
$truncate -s +200K file.txt
$ls -lh file.txt 
-rw-r--r-- 1 jmutai wheel 300K Mar 18 13:12 file.txt

通过添加另外的200K,这会将文件大小从100K扩展到300K。

4.通过截断来减小文件大小

假设我们有一个500K的文件,并且希望将其缩小到250K。
我们将使用-s选项并指定大小。
例如

$ls -lh file.txt -rw-r--r-- 1 jmutai wheel 500K Mar 18 13:15 file.txt
$truncate -s -250K file.txt
$ls -lh file.txt 
-rw-r--r-- 1 jmutai wheel 250K Mar 18 13:15 file.txt

我们可以看到当前大小更改为250K。