To truncate a file means to reduce its size by removing some of its content. Truncating a file is much faster and simpler than deleting the file, recreating it, and setting the correct permissions and ownership.
When a file is truncated, the data beyond the specified truncate point is discarded, which erases the excess content. Truncation is useful for sequential files, such as text files, log files, or database files.
In this tutorial, you will learn how to truncate files in Linux using shell redirection and the
- A system running Linux.
- The coreutils package installed for the
- Access to the terminal (Ctrl + Alt + T).
- A user account with root privileges.
Truncate Files via Shell Redirection Operator
Shell redirection, specifically the
> operator, is a feature in Unix-like operating systems that allows users to redirect the output of a command or program to a file instead of displaying it in the terminal.
There are several methods for truncating files using the shell redirection operator.
Use Colon (:) as Null Command
The colon symbol (
:) is typically used as a placeholder or null command in shell scripting and produces no output. Use the following command to create an empty file or truncate an existing file to make it empty:
: > filename
In the command, the colon acts as a placeholder or null command that doesn't do anything. The
> symbol redirects the output (which is nothing in this case) to the file specified by
filename. If the file exists, it is overwritten. If the file doesn't exist, a new file is created.
The command above truncates the example file's contents to zero while keeping the file intact.
Note: Read our tutorial on the tr command, which translates or deletes characters from standard input and writes the result to standard output.
tr can perform different text transformations, including truncating character sets.
Use the cat Command
The cat command is often used to concatenate and display the contents of files. In this case, it is a convenient way to access the null device and truncate a file.
The following command output the contents of the
/dev/null device, which is an end-of-file character, and redirects it to the specified file:
cat /dev/null > filename
The command truncates the example file and empties its contents by redirecting the null device's output to the file.
Redirect Using echo
The echo command displays text or variable values in the terminal. Appending the
-n option instructs
echo not to append a newline character, which redirects an empty string to the specified file using shell redirection.
The syntax is:
echo -n > filename
The command redirects an empty string to the specified file. If the file already exists, it is overwritten. If the file doesn't exist, a new file is created. In the example above, the file's contents are removed.
Use Redirection Only
Most modern shells, such as Bash or Zsh, allow you to omit the command before the redirection operator and truncate the file. The syntax is:
The command redirects the output (in this case, no output since there is no preceding command) to the specified example file and truncates it to make it empty.
If the file doesn't exist, the command creates a new empty file.
Truncate with sudo
To truncate a file, you must have write permissions on the file. While the sudo command allows you to truncate a file you don't have the write permissions for, elevated root privileges do not apply to redirection. For example, the following file is read-only, which is why the operation fails:
The command fails and denies permission to truncate the file. There are several options to override this behavior and truncate the file:
- Run a new shell. You can execute the redirection command as a superuser in a new shell to redirect the write permissions:
sudo sh -c '> filename'
sh -c part invokes a new shell and executes the command within that shell after you provide the root password.
- Pipe output to the tee command. Another option is to pipe the output to the tee command and elevate the privileges with
sudo, which writes the empty output to the specified file:
: | sudo tee filename
The null command
: provides an empty input, which is piped to
tee writes that empty input to standard output and to the specified file using elevated privileges.
Truncate Files via truncate Command
truncate command is a utility that allows users to resize a file to a specified size or to remove its contents entirely. However, the
truncate command requires appropriate file system permissions to modify files.
Depending on the file permissions and file location, you may need administrative privileges or use
sudo to execute
truncate with elevated permissions.
Remove File Contents Entirely
The syntax for removing a file's contents with
truncate -s 0 filename
The command removes all contents from the specified examplefile file.
Truncate File to Specific Size
Use the truncate command to reduce a file to a specific size. The default value is in bytes, which has the following syntax:
truncate -s [number of bytes] filename
[number of bytes], specify the desired file size.
In the example above, the command truncates the specified file's size to 10 bytes. Other units are also accepted, such as K for kilobytes, M for megabytes, G for gigabytes, etc. For example, to reduce a file's size to 10KB, use the following syntax:
truncate -s 10K filename
Increase File Size
Add a plus or minus sign in front of the size to increase or decrease the file by that amount. For example, to increase the file size by 10MB, use the following syntax:
truncate -s +5M filename
+5M indicates an increase in size by 5 megabytes. The
+ sign before the size indicates an increase, while a
- sign indicates a decrease.
Executing this command increases the size of the specified file by 5 megabytes. If the file initially has a smaller size, the command adds null bytes at the end of the file to reach the new size. If the file is already larger than 5 megabytes, the command has no effect.
The guide showed you how to truncate files in Linux using the shell redirection operator
> and the
truncate command. Truncating files is useful when you want to remove contents from a file without deleting the file itself.
The command is often used for log files or database files to manage the file size, facilitate file parsing, and improve performance.