1

How to empty (truncate) Log files in Linux

 2 years ago
source link: https://computingforgeeks.com/how-to-empty-truncate-log-files-in-linux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
How to empty (truncate) Log files in Linux

At some point in Sysadmin life cycle, you may need to empty a log file to save on system disk space or for any other reason. There are various ways you can empty a file in a Linux system.

Empty log file using truncate command

The safest method to empty a log file in Linux is by using the truncate command. Truncate command is used to shrink or extend the size of each FILE to the specified size.

truncate -s 0 logfile

Where -s is used to set or adjust the file size by SIZE bytes. The file can be relative to the current directory or an absolute path to the file provided.

For complete truncate command options, use the option --help

$ 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

The SIZE argument is an integer and optional unit (example: 10K is 10*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.

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/truncate>
or available locally via: info '(coreutils) truncate invocation'

For multiple files you can use wildcard, example:

truncate -s 0 /var/log/*log

For nested folders:

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

Or using for loop and truncate:

for logfile in $(ls /var/log/*.log)
do 
  truncate -s 0 $logfile
done

Empty log file using :> or true >

You can also use :> to clear file content. The syntax is

:> logfile

This is equivalent to

true > logfile

See example below

Empty log file using echo command

If you echo nothing to a file, it will clear the content to empty it.

echo "" > logfile

This is the same as

echo  > testfile

Empty log file using the dd command

The syntax for using dd command is

dd if=/dev/null of=logfile
dd if=/dev/null > logfile

See examples below

$ ls -l testfile 
-rw-r--r-- 1 jmutai jmutai 1338 Oct  2 23:07 testfile

$ [jmutai@arch tmp]$ ls -l testfile 
-rw-r--r-- 1 jmutai jmutai 1338 Oct  2 23:07 testfile

[jmutai@arch tmp]$ dd if=/dev/null of=testfile 
0+0 records in
0+0 records out
0 bytes copied, 0.000322652 s, 0.0 kB/s

[jmutai@arch tmp]$ ls -l testfile 
-rw-r--r-- 1 jmutai jmutai 0 Oct  2 23:33 testfile

For multiple files, a simple loop in bash should suffice.

for file in logfile1 logfile2 logfile2 ... ; do
    truncate -s 0 $file 
    #or
    dd if=/dev/null of=$file
    #or
    :>$file
done

Empty log file using the find and truncate command

You can as well use find to locate all .log files in a directory and truncated.

find /var/log -type f -iname '*.log' -print0 | xargs -0 truncate -s0

For any file with log key word:

find /var/log -type f -iname '*log' -print0 | xargs -0 truncate -s0

Use any of the method to empty your large log files.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK