Đây là hướng dẫn thực hành về lệnh tar với các tình huống phổ biến trong quản trị hệ thống Linux — từ khai thác nội dung lưu trữ đến xây dựng quy trình sao lưu định kỳ.
Giải nén toàn bộ nội dung từ file lưu trữ
Dùng tùy chọn -x để trích xuất dữ liệu. Lệnh sau sẽ giải nén toàn bộ cấu trúc thư mục trong archive.tar vào vị trí hiện tại:
[user@server ~]$ tar -xvf archive.tar
Chỉ định thư mục đích khi giải nén
Thêm tùy chọn -C kèm đường dẫn để định hướng nơi giải nén. Ví dụ sau đưa mọi tệp vào /var/backups/restore/:
[user@server ~]$ tar -xvf archive.tar -C /var/backups/restore/
Trích xuất một hoặc vài tệp cụ thể
Bạn có thể chỉ định tên tệp (kèm đường dẫn tương đối bên trong lưu trữ) để giải nén riêng lẻ. Câu lệnh dưới đây chỉ lấy config.yaml từ thư mục etc/ trong lưu trữ và đặt vào /tmp/configs/:
[user@server ~]$ tar -xvf backup.tgz etc/config.yaml -C /tmp/configs/
Tạo lưu trữ nén bằng gzip (.tar.gz / .tgz)
Sử dụng -z để tích hợp nén gzip. Dưới đây đóng gói /srv/app và /usr/local/bin, đồng thời bỏ qua các tệp nhật ký:
[user@server ~]$ tar -zcpvf app-backup-$(date +%F).tgz /srv/app /usr/local/bin --exclude='*.log'
Tạo lưu trữ nén bằng bzip2 (.tar.bz2 / .tbz2)
Tùy chọn -j kích hoạt nén bzip2 — thường đạt tỷ lệ nén cao hơn gzip nhưng chậm hơn. Ví dụ:
[user@server ~]$ tar -jcpvf full-system.tbz2 /etc /opt --exclude='/etc/udev/rules.d'
Xem danh sách nội dung mà không giải nén
Tùy chọn -t hiển thị bảng nội dung chi tiết. Kết hợp với grep để lọc nhanh:
[user@server ~]$ tar -tvf app-backup-2024-10-05.tgz | grep -E '\.(conf|json)$'
Giải nén tự động nhận diện định dạng
Hầu hết phiên bản tar hiện đại (từ GNU tar 1.26+) tự phát hiện thuật toán nén. Vì vậy, bạn có thể dùng chung cú pháp cho mọi loại:
[user@server ~]$ tar -xpvf data-archive.tbz2 -C /mnt/recovery/
[user@server ~]$ tar -xpvf site-backup.tgz -C /var/www/
Tự động hóa sao lưu hàng ngày bằng cron
Tạo tác vụ định kỳ để sao lưu thư mục /data/shared. Thêm dòng sau vào crontab (crontab -e):
0 2 * * * /usr/bin/tar -zcpvf /backup/daily/shared-$(/bin/date +\%Y-\%m-\%d).tgz /data/shared > /dev/null 2>&1
Sử dụng danh sách tệp đầu vào và loại trừ
Tạo hai tệp văn bản: /opt/backup-includes.txt chứa đường dẫn cần đóng gói, và /opt/backup-excludes.txt liệt kê các mục cần bỏ qua:
[user@server ~]$ cat /opt/backup-includes.txt
/home/webapp
/etc/nginx
/usr/share/fonts
[user@server ~]$ cat /opt/backup-excludes.txt
/home/webapp/cache
/etc/nginx/conf.d/default.conf
Chạy lệnh sau để sinh lưu trữ dựa trên danh sách:
[user@server ~]$ tar -zcpvf full-deploy-$(date -I).tgz -T /opt/backup-includes.txt -X /opt/backup-excludes.txt
Đo dung lượng lưu trữ trước khi nén
Để kiểm tra kích thước của luồng nén (không lưu thành tệp), dùng -f - kết hợp với wc -c:
[user@server ~]$ tar -cf - /var/log | gzip | wc -c
12489320
Chia nhỏ lưu trữ lớn thành nhiều phần
Dùng lệnh split để phân chia file lưu trữ thành các mảnh có kích thước cố định — hữu ích khi truyền qua kênh giới hạn (email, FTP, USB FAT32):
[user@server ~]$ split -b 4M -d -a 3 full-backup.tgz backup-part-
Lệnh trên tạo các tệp backup-part-000, backup-part-001, … mỗi tệp 4 MB. Để ghép lại:
[user@server ~]$ cat backup-part-* > full-backup.tgz