Linux文件截断命令(truncate head tail dd)

news/2024/7/1 7:00:04

目录

      • 一、truncate
        • 功能概述
        • 实例(可用于删除文件末尾指定大小的内容)
      • 二、head
        • 功能概述
        • 实例(可用于删除文件末尾指定大小的内容)
      • 三、tail
        • 功能概述:
        • 实例(可用于删除文件开头指定大小的内容)
      • 四、dd
        • 概述
      • 五、应用
        • 1. 清空文件内容

一、truncate

truncate --help
Usage: truncate OPTION... FILE...
Shrink or extend the size of each FILE to the specified size

A FILE argument that does not exist is created.

If a FILE is larger than the specified size, the extra data is lost.
If a FILE is shorter, it is extended and the extended part (hole)
reads as zero bytes.

Mandatory arguments to long options are mandatory for short options too.
  -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 is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).

SIZE may also be prefixed by one of the following modifying characters:
'+' extend by, '-' reduce by, '<' at most, '>' at least,
'/' round down to multiple of, '%' round up to multiple of.
功能概述
  1. 缩小或扩展文件到指定的大小;
  2. (默认)文件不存在会被创建;
  3. 如果文件大于指定的大小,额外的(末尾的)数据将被丢弃;
  4. 如果文件小于指定的大小,则对其进行扩展,并且扩展部分读取为零字节;
实例(可用于删除文件末尾指定大小的内容)
  1. -s 参数:设置或调整文件到指定的大小。

    -s, --size=SIZE        set or adjust the file size by SIZE bytes
    
    $ echo "123456789" > test_truncate
    $ hexdump -C test_truncate
    00000000  31 32 33 34 35 36 37 38  39 0a                    |123456789.|
    # 文件大于指定的大小,额外的(末尾的)数据将被丢弃
    $ truncate -s 5 test_truncate 
    $ hexdump -C test_truncate 
    00000000  31 32 33 34 35                                    |12345|
    # 如果文件小于指定的大小,则对其进行扩展,并且扩展部分读取为零字节
    truncate -s 10 test_truncate
    $ hexdump -C test_truncate 
    00000000  31 32 33 34 35 00 00 00  00 00                    |12345.....|
    
  2. -r 参数:将文件设置为于参考文件相同的大小。

    -r, --reference=RFILE  base size on RFILE
    
    $ ls -l test_truncate*
    -rw-rw-r-- 1 guest guest 10 Nov 30 01:52 test_truncate
    -rw-rw-r-- 1 guest guest 21 Nov 30 02:00 test_truncate_ref
    $ hexdump -C test_truncate                       
    00000000  31 32 33 34 35 00 00 00  00 00                    |12345.....|
    0000000a
    # 将test_truncate文件的大小设置为与test_truncate_ref文件相同
    $ truncate -r test_truncate_ref test_truncate
    $ ls -l test_truncate*                       
    -rw-rw-r-- 1 guest guest 21 Nov 30 02:01 test_truncate
    -rw-rw-r-- 1 guest guest 21 Nov 30 02:00 test_truncate_ref
    $ hexdump -C test_truncate                   
    00000000  31 32 33 34 35 00 00 00  00 00 00 00 00 00 00 00  |12345...........|
    00000010  00 00 00 00 00                                    |.....|
    
  3. -c 参数:文件不存在不创建。

    -c, --no-create        do not create any files
    
    # 带-c参数,不会创建不存在的文件
    ls -l test_truncate
    ls: cannot access test_truncate: No such file or directory
    $ truncate -s 100 -c test_truncate
    $ ls -l test_truncate             
    ls: cannot access test_truncate: No such file or directory
    
    # 不带-c参数,文件不存在则创建,内容都是'0'
    $ truncate -s 100 test_truncate   
    $ ls -l test_truncate          
    -rw-rw-r-- 1 guest guest 100 Nov 30 01:07 test_truncate
    $ hexdump -C test_truncate 
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000060  00 00 00 00                                       |....|
    00000064
    

二、head

head --help
Usage: head [OPTION]... [FILE]...
Print the first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -c, --bytes=[-]K         print the first K bytes of each file;
                             with the leading '-', print all but the last
                             K bytes of each file
  -n, --lines=[-]K         print the first K lines instead of the first 10;
                             with the leading '-', print all but the last
                             K lines of each file
  -q, --quiet, --silent    never print headers giving file names
  -v, --verbose            always print headers giving file names
      --help     display this help and exit
      --version  output version information and exit

K may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
功能概述

将每个文件的前10行打印到标准输出,如果有多个文件则先打印文件名

$ head test_head test_truncate
==> test_head <==
1234567890

==> test_truncate <==
123451234567890
实例(可用于删除文件末尾指定大小的内容)
  1. -c 参数:打印文件的前K个字节;如果是-K,则去除末尾K字节,打印前面所有字节。

    -c, --bytes=[-]K         print the first K bytes of each file;
                                 with the leading '-', print all but the last
                                 K bytes of each file
    
    # 末尾有个回车符
    $ cat test_head 
    1234567890
    $ head -c 3 test_head 
    123$ 
    $ head -c -3 test_head
    12345678$ 
    
  2. -n 参数:打印文件的前K行;如果是-K,则去除末尾K行,打印前面所有行。

    -n, --lines=[-]K         print the first K lines instead of the first 10;
                             with the leading '-', print all but the last
                             K lines of each file
    
    $ cat test_head 
    1234567890
    234567890
    34567890
    4567890
    567890
    $ head -n 2 test_head 
    1234567890
    234567890
    $ head -n -2 test_head 
    1234567890
    234567890
    34567890
    

三、tail

tail --help
Usage: tail [OPTION]... [FILE]...
Print the last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -c, --bytes=K            output the last K bytes; or use -c +K to output
                             bytes starting with the Kth of each file
  -f, --follow[={name|descriptor}]
                           output appended data as the file grows;
                             an absent option argument means 'descriptor'
  -F                       same as --follow=name --retry
  -n, --lines=K            output the last K lines, instead of the last 10;
                             or use -n +K to output starting with the Kth
      --max-unchanged-stats=N
                           with --follow=name, reopen a FILE which has not
                             changed size after N (default 5) iterations
                             to see if it has been unlinked or renamed
                             (this is the usual case of rotated log files);
                             with inotify, this option is rarely useful
      --pid=PID            with -f, terminate after process ID, PID dies
  -q, --quiet, --silent    never output headers giving file names
      --retry              keep trying to open a file if it is inaccessible
  -s, --sleep-interval=N   with -f, sleep for approximately N seconds
                             (default 1.0) between iterations;
                             with inotify and --pid=P, check process P at
                             least once every N seconds
  -v, --verbose            always output headers giving file names
      --help     display this help and exit
      --version  output version information and exit

If the first character of K (the number of bytes or lines) is a '+',
print beginning with the Kth item from the start of each file, otherwise,
print the last K items in the file.  K may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

With --follow (-f), tail defaults to following the file descriptor, which
means that even if a tail'ed file is renamed, tail will continue to track
its end.  This default behavior is not desirable when you really want to
track the actual name of the file, not the file descriptor (e.g., log
rotation).  Use --follow=name in that case.  That causes tail to track the
named file in a way that accommodates renaming, removal and creation.
功能概述:
  1. -n:显示文件的最后 n 行,默认为 10 行。
  2. -f:实时追踪文件的变化并输出新增的内容。
  3. -q:不显示文件名。
  4. -s:设置输出的间隔时间(秒)。
  5. -c:以字节为单位显示指定范围的内容。
实例(可用于删除文件开头指定大小的内容)
  1. -c 参数:打印文件的后K个字节;如果是+K,则从第K个字节开始打印所有后面的内容。

    -c, --bytes=K            output the last K bytes; or use -c +K to output
                                 bytes starting with the Kth of each file
    

    重点

    • 经验证+0和+1都表示从第一个字节开始,和cat功能一样。
    • 可用于删除文件前面的内容,输出到新文件:
      如需删除文件前面的K字节,则参数为+(K+1)
    $ cat test_tail
    1234567890
    $ tail -c 3 test_tail
    90
    $ tail -c +3 test_tail
    34567890
    $ tail -c +0 test_tail
    1234567890
    $ tail -c +1 test_tail
    1234567890
    
  2. -f 参数:实时追踪文件的变化并输出新增的内容。可指定显示几行文件中的内容。

    -f, --follow[={name|descriptor}]
                               output appended data as the file grows;
                                 an absent option argument means 'descriptor'
    
    $ cat test_tail
    1234567890
    234567890
    34567890
    4567890
    567890
    $ tail -2f test_tail 
    4567890
    567890
    
    
  3. -n 参数:显示文件的最后 n 行,默认为 10 行。

    -n, --lines=K            output the last K lines, instead of the last 10;
                                 or use -n +K to output starting with the Kth
    
    $ cat test_tail      
    1234567890
    234567890
    34567890
    4567890
    567890
    $ tail -n 3 test_tail
    34567890
    4567890
    567890
    

四、dd

dd --help
Usage: dd [OPERAND]...
  or:  dd OPTION
Copy a file, converting and formatting according to the operands.

  bs=BYTES        read and write up to BYTES bytes at a time
  cbs=BYTES       convert BYTES bytes at a time
  conv=CONVS      convert the file as per the comma separated symbol list
  count=N         copy only N input blocks
  ibs=BYTES       read up to BYTES bytes at a time (default: 512)
  if=FILE         read from FILE instead of stdin
  iflag=FLAGS     read as per the comma separated symbol list
  obs=BYTES       write BYTES bytes at a time (default: 512)
  of=FILE         write to FILE instead of stdout
  oflag=FLAGS     write as per the comma separated symbol list
  seek=N          skip N obs-sized blocks at start of output
  skip=N          skip N ibs-sized blocks at start of input
  status=LEVEL    The LEVEL of information to print to stderr;
                  'none' suppresses everything but error messages,
                  'noxfer' suppresses the final transfer statistics,
                  'progress' shows periodic transfer statistics

N and BYTES may be followed by the following multiplicative suffixes:
c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M
GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.
概述

if 表示输入文件,of 表示输出文件,options 是一些可选参数。下面是一些常用的参数:

  • bs:设置每次读取和写入的块大小(单位为字节或者是可以添加的后缀,如b、k、m等),默认为512字节。
  • count:设置要复制的块数。
  • iflag:设置输入选项,常用的选项有direct(绕过缓存直接读取)和sync(同步数据到磁盘)。
  • oflag:设置输出选项,常用的选项有direct(绕过缓存直接写入)和sync(同步数据到磁盘)。

五、应用

1. 清空文件内容
echo > 文件名
echo "" > 文件名
cat /dev/null > 文件名
truncate -s 0 文件名
dd if=/dev/null of=文件名

http://lihuaxi.xjx100.cn/news/1852410.html

相关文章

《Effective C++》条款26

尽可能延后变量定义式的出现时间 string test(const string& passwd) {string s;if (s.size() < MinLenth){throw logic_error("passwd is too short");} } 这段代码的问题是&#xff1a;如果抛出了异常&#xff0c;那么定义的string对象将面临毫无意义的构造…

网工内推 | 云计算运维,云相关认证优先,最高30K,带薪年假

01 安畅网络 招聘岗位&#xff1a;云计算运维工程师 职责描述&#xff1a; 1、负责对公有云平台的计算、存储、网络资源等IAAS/SAAS/PAAS层产品组件日常交付部署运维工作&#xff0c;包括调试、配置、维护、监控、优化等工作&#xff1b; 2、负责对操作系统及应用日常运行维护…

【腾讯云云上实验室-向量数据库】个人对腾讯云向量数据库的体验心得

目录 前言Tencent Cloud VectorDB概念使用初体验腾讯云向量数据库的优势应用场景有哪些&#xff1f;未来展望番外篇&#xff1a;腾讯云向量数据库的设计核心结语 前言 还是那句话&#xff0c;不用多说想必大家都能猜到&#xff0c;现在技术圈最火的是什么&#xff1f;非人工智…

Serilog .net下的新兴的日志框架

Serilog .net下的新兴的日志框架 1.Serilog简介 Serilog 是针对 .NET 应用程序的流行日志记录框架。它以其灵活性、易用性和可扩展性而闻名。借助 Serilog&#xff0c;开发人员可以轻松记录应用程序中的事件、错误和消息。它支持结构化日志记录&#xff0c;能够以结构化格式存…

Linux常用命令----rmdir命令

文章目录 1. 简介2. 参数含义3. 常见用法及实例4. 注意事项5. 结语 1. 简介 rmdir命令在Linux系统中用于删除空的目录。它是一个基本的命令行工具&#xff0c;用于维护文件系统的组织结构。与rm命令不同&#xff0c;rmdir只能删除空目录&#xff0c;这提供了一种安全机制&…

修复电脑中缺失的VCRUNTIME140.dll文件的5个有效方法

vcruntime140.dll丢失5个修复方法与vcruntime140.dll是什么以及丢失对电脑的影响 引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcruntime140.dll丢失”。那么&#xff0c;什么是vcruntime140.dll&#xff1f;它…

2次MD5加密——用于分布式对话

用户端 &#xff1a; 指发起请求并与服务器进行交互的终端设备或应用程序。它可以是电脑、智能手机等。 用户端负责发送请求给服务端&#xff0c;并接收和处理服务端返回的响应。 服务端 &#xff1a; 是指提供服务、接收和处理用户端请求的计算机系统或应用程序。 它监听来自用…

CentOS一键安装docker脚本

CentOS安装Docker一键脚本 在CentOS上安装Docker是许多项目中常见的任务之一。为了简化这个过程&#xff0c;你可以使用下面的一键脚本。 #!/bin/bash# 卸载旧版本&#xff08;如果有&#xff09; sudo yum remove -y docker \docker-client \docker-client-latest \docker-c…