When working with Linux command line, the echo command combined with redirection operators is a fundamental way to manipulate file contents. The basic syntax you're probably familiar with is:
echo "text" > file.txt
This writes "text" to file.txt, overwriting any existing content. But what if you want to add content without erasing the existing data?
Linux provides the double greater-than symbol (>>) for appending content to files. This operator preserves existing content while adding new text at the end of the file.
echo "new content" >> existing_file.txt
Let's look at some common scenarios where appending is useful:
# Appending to log files
echo "$(date): Application started" >> /var/log/myapp.log
# Building configuration files
echo "server_name example.com;" >> /etc/nginx/conf.d/site.conf
echo "listen 80;" >> /etc/nginx/conf.d/site.conf
# Creating multi-line files
echo "Line 1" >> output.txt
echo "Line 2" >> output.txt
echo "Line 3" >> output.txt
For more complex scenarios, you can combine echo with other commands:
# Append command output
ls -l >> directory_listing.txt
# Append multiple lines with a single echo
echo -e "First line\nSecond line" >> multiline.txt
# Append with variable substitution
username=$USER
echo "User $username logged in at $(date)" >> access.log
When writing scripts, it's good practice to handle potential errors:
# Check if file exists and is writable
if [ -w logfile.txt ]; then
echo "New entry" >> logfile.txt
else
echo "Error: Cannot write to logfile.txt" >&2
fi
While echo is common, other tools can append content too:
# Using printf
printf "%s\n" "New content" >> file.txt
# Using cat with heredoc
cat <> file.txt
Additional content
More lines
EOF
Every Linux user knows the basic redirection operator >
for sending command output to a file:
echo "Hello World" > log.txt
But this overwrites existing content. What if we need to preserve previous data?
Linux provides the >>
operator for appending content:
echo "New log entry" >> log.txt
Let's see some real-world scenarios:
1. Continuous logging:
date >> server.log
echo "Server started successfully" >> server.log
2. Multi-line appends:
cat <> config.cfg
[New Section]
host = example.com
port = 8080
EOT
For production environments, consider these professional practices:
# Append with timestamp
echo "$(date +'%Y-%m-%d %T') - User logged in" >> auth.log
# Error-resistant append
{ echo "Important message"; some_command; } >> compound.log 2>&1
- Permission issues (use
sudo
if needed) - File locking during concurrent writes
- Accidental use of
>
instead of>>
Other ways to append in Linux:
# Using printf
printf "Appended text\n" >> file.txt
# Using tee
echo "Via tee" | tee -a file.txt