Hướng dẫn các phương pháp lưu kết quả lệnh (stdout/stderr) vào tệp trong Linux.
1. Toán tử chuyển hướng (Redirection Operators) – Cách phổ biến nhất
Ghi đè (Overwrite) – >
# ls /var/log > /tmp/varlog.log
- Tạo file mới hoặc xóa trắng nội dung cũ rồi ghi.
- Chỉ chuyển hướng stdout (file descriptor 1).
Ghi nối (Append) – >>
# ls /var/log >> /tmp/varlog.log
- Thêm nội dung vào cuối file, giữ nội dung cũ.
Chuyển hướng stderr – 2>
# command 2> error.log
Chuyển hướng cả stdout và stderr
# command > output.log 2>&1 # Cách cũ (Bash/Sh)
# command &> output.log # Cách ngắn (Bash/Zsh)
# command > output.log 2>&1 # POSIX compliant
Ghi nối cả stdout và stderr
# command >> output.log 2>&1
# command &>> output.log # Bash 4+
2. Lệnh tee – Xem trên màn hình VÀ ghi file cùng lúc
# command | tee output.log # Ghi đè
# command | tee -a output.log # Ghi nối
# command | tee output.log > /dev/null # Chỉ ghi file, không hiện màn hình
- Hữu ích khi chạy script tự động nhưng vẫn muốn theo dõi real-time.
3. Lệnh logsave – Có timestamp (ít dùng)
# logsave /tmp/varlog.log ls /var/log # Ghi đè
# logsave -a /tmp/varlog.log ls /var/log # Ghi nối (-a append)
- Thêm ngày/giờ vào đầu file log.
- Output sạch hơn redirection thuần.
- Không phổ biến như
>/tee.
4. Script – Tự động log mọi lệnh (session logging)
# script -t 2> timing.log -c "commands" > session.log
# Hoặc phiên tương tác:
# script session.log
# ... gõ lệnh ...
# exit
5. So sánh nhanh
| Phương pháp | Stdout | Stderr | Hiện màn hình | Timestamp | Phổ biến |
|---|---|---|---|---|---|
> / >> | ✅ | ❌ | ❌ | ❌ | ⭐⭐⭐⭐⭐ |
2> / 2>>> | ❌ | ✅ | ❌ | ❌ | ⭐⭐⭐ |
&> / &>>> | ✅ | ✅ | ❌ | ❌ | ⭐⭐⭐⭐ |
tee | ✅ | ❌ (cần 2>&1) | ✅ | ❌ | ⭐⭐⭐⭐ |
logsave | ✅ | ❌ | ❌ | ✅ | ⭐⭐ |
script | ✅ | ✅ | ✅ | ✅ (với -t) | ⭐⭐⭐ |
Mẹo hay
command 2>&1 | tee -a log.txt: Xem real-time + ghi cả stdout/stderr nối đuôi.exec > >(tee -a /var/log/myscript.log) 2>&1: Đặt đầu script để log toàn bộ session script.- Dùng
loggergửi log đến syslog:logger -t myscript "Message".