Lệnh tar trong Linux — Cách nén và giải nén file

Bạn đã bao giờ rơi vào tình huống cần sao lưu nhanh hàng loạt tệp tin cấu hình trên vps để chuẩn bị nâng cấp hệ thống, nhưng lại thấy việc copy từng file thật quá mất thời gian chưa nhỉ? Nếu câu trả lời là có, thì chắc chắn bạn đang cần đến một người bạn đồng hành vô cùng đắc lực. tar là công cụ mạnh mẽ giúp bạn đóng gói và nén nhiều tệp tin hoặc thư mục thành một tệp duy nhất một cách nhanh chóng. Vậy thực chất tar là gì và làm thế nào để làm chủ nó? Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách dùng tar để tối ưu hóa quy trình làm việc, cũng như nắm vững cách nén tệp tin hiệu quả nhất. Với kinh nghiệm của một Senior System Admin, mình thấy tar Linux là một kỹ năng không thể thiếu nếu bạn muốn quản lý dữ liệu chuyên nghiệp. Hãy cùng mình khám phá ngay nhé!

Cần chuẩn bị gì trước khi dùng lệnh tar?

  • id="quyen-user">Quyền user: Có thể sử dụng với user thường. Tuy nhiên, cần quyền sudo hoặc root nếu thực hiện nén/giải nén các file hệ thống.
  • Hệ điều hành hỗ trợ: Hỗ trợ hầu hết các bản phân phối Linux (Ubuntu, Debian, CentOS, Fedora, Arch Linux) và macOS.
  • Package dependencies: Lệnh tar thường được cài đặt sẵn theo mặc định trên hầu hết các hệ điều hành dựa trên Unix. Nếu thiếu, có thể cài đặt qua trình quản lý gói:
    • Ubuntu/Debian: sudo apt update && sudo apt install tar
    • CentOS/RHEL: sudo yum install tar
    • macOS: Có sẵn qua Homebrew hoặc mặc định của hệ thống
  • Version tối thiểu: Không yêu cầu phiên bản cụ thể, nhưng các phiên bản GNU tar sẽ hỗ trợ đầy đủ các tính năng nén như gzip, bzip2 và xz.

Cú pháp lệnh tar là gì?

Lệnh tar hỗ trợ nhiều dạng cú pháp khác nhau trên các hệ điều hành Linux và Unix để thực hiện nén hoặc giải nén tệp tin.

tar [OPTIONS] [FILE]...
tar [OPTIONS] -cf ARCHIVE [FILE]...
tar [OPTIONS] -xf ARCHIVE
# Tùy chọn của lệnh tar là gì?

Các tùy chọn thường dùng của lệnh tar là gì?

Lệnh tar cung cấp nhiều tùy chọn để điều khiển cách nén, giải nén, liệt kê và quản lý các tệp lưu trữ. Các tùy chọn dưới đây được phân loại theo chức năng chính: hoạt động cơ bản, định dạng nén, và các tùy chọn bổ sung.

Tùy chọn ngắn Tùy chọn dài Mô tả
-c --create tar -c tạo một tệp lưu trữ mới từ các tệp hoặc thư mục được chỉ định.
-x --extract tar -x giải nén (trích xuất) các tệp từ một tệp lưu trữ tar đã tồn tại.
-t --list tar -t liệt kê danh sách các tệp bên trong tệp lưu trữ mà không giải nén.
-z --gzip tar -z áp dụng nén gzip khi tạo hoặc giải nén tệp lưu trữ (*.tar.gz).
-j --bzip2 tar -j áp dụng nén bzip2 khi tạo hoặc giải nén tệp lưu trữ (*.tar.bz2).
-J --xz tar -J áp dụng nén xz khi tạo hoặc giải nén tệp lưu trữ (*.tar.xz).
-f --file tar -f tên_tệp chỉ định tên của tệp lưu trữ cần tạo hoặc xử lý. Tùy chọn này thường được đặt cuối cùng.
-v --verbose tar -v hiển thị chi tiết danh sách các tệp được xử lý trong quá trình tạo, giải nén hoặc liệt kê.
-r --append tar -r thêm các tệp mới vào cuối một tệp lưu trữ tar đã tồn tại.
-u --update tar -u thêm các tệp vào tệp lưu trữ chỉ nếu chúng mới hơn hoặc không tồn tại trong tệp lưu trữ.
-C --directory tar -C đường_dẫn thay đổi thư mục làm việc trước khi tạo hoặc giải nén tệp lưu trữ.
-p --preserve-permissions tar -p bảo toàn quyền truy cập (permission) của các tệp khi giải nén.
-P --absolute-names tar -P cho phép sử dụng đường dẫn tuyệt đối khi tạo tệp lưu trữ.
--strip-components tar --strip-components=N loại bỏ N mức thư mục từ đầu đường dẫn khi giải nén.
-k --keep-old-files tar -k giữ nguyên các tệp đã tồn tại trên hệ thống khi giải nén, không ghi đè.
--exclude tar --exclude=mẫu loại trừ các tệp khớp với mẫu được chỉ định khi tạo tệp lưu trữ.
-w --interactive tar -w yêu cầu xác nhận từng tệp trước khi xử lý (chế độ tương tác).

xem thêm: Compression and Archiving

Cách sử dụng lệnh tar trong các tình huống thực tế?

Phần này trình bày các kịch bản nén, giải nén và quản lý tệp tin lưu trữ thường gặp trong quản trị hệ thống.

tar là gì? [Liệt kê danh sách nội dung file tar]

tar -tvf archive.tar
file mode last modification time name
-rw-r--r-- 1 user group 1024 Oct 25 10:00 file1.txt
-rw-r--r-- 1 user group 2048 Oct 25 10:05 file2.txt

Lệnh liệt kê chi tiết các tệp tin có trong file lưu trữ mà không cần giải nén. Trong thực tế, bước này giúp kiểm tra nhanh nội dung trước khi thực hiện thao tác giải nén để tránh ghi đè dữ liệu.

tar -cvzf là gì? [Nén thư mục thành file .tar.gz]

tar -cvzf backup.tar.gz /var/www/html
tar: Removing leading '/' from member names

Lệnh thực hiện nén thư mục bằng thuật toán gzip để giảm dung lượng lưu trữ. Trên môi trường production, đây là cách phổ biến nhất để đóng gói mã nguồn website hoặc cấu hình hệ thống nhằm mục đích backup định kỳ.

tar -xzvf là gì? [Giải nén file .tar.gz]

tar -xzvf backup.tar.gz
file1.txt
file2.txt

Lệnh trích xuất toàn bộ nội dung từ file nén gzip vào thư mục hiện hành. Trong các quy trình deploy, lệnh này được dùng để giải nén các bản build từ CI/CD xuống server ứng dụng.

tar -cvf --exclude là gì? [Nén file loại bỏ thư mục không cần thiết]

tar -cvzf project.tar.gz --exclude='node_modules' ./my_project
tar: Removing leading '/' from member names
./my_project
./my_project/src

Lệnh cho phép tạo file nén nhưng loại bỏ các thư mục hoặc tệp tin cụ thể theo yêu cầu. Đối với DevOps, việc sử dụng flag --exclude giúp loại bỏ các thư mục rác như node_modules hoặc logs, giúp file backup nhỏ hơn và quá trình nén nhanh hơn.

tar -xzvf kết hợp với đường dẫn đích là gì? [Giải nén vào thư mục chỉ định]

mkdir -p /tmp/extracted
tar -xzvf backup.tar.gz -C /tmp/extracted

Sử dụng tham số -C để chỉ định thư mục đích cho quá trình giải nén thay vì thư mục mặc định. Trong các script automation, việc này đảm bảo dữ liệu được giải nén đúng vị trí mong muốn mà không gây lộn xộn trong hệ thống tệp tin.

Các lỗi thường gặp khi sử dụng lệnh tar là gì?

Trong quá trình đóng gói và giải nén dữ liệu, người dùng thường gặp các vấn đề liên quan đến quyền truy cập, định dạng file hoặc thiếu tham số điều khiển.

Lỗi không có quyền ghi vào thư mục đích

tar -xzvf archive.tar.gz -C /root/backup
tar: /root/backup: Cannot open: Permission denied

Lỗi xảy ra khi người dùng thực hiện giải nén vào một thư mục hệ thống mà không có quyền quản trị (root).

Lỗi sai định dạng nén (mismatch compression)

tar -xzvf data.tar
tar: Child returned status 2
tar: Error is not recoverable: exiting now

Lỗi phát sinh khi bạn sử dụng tham số -z (cho định dạng .gz) nhưng file thực tế không được nén bằng gzip.

Lỗi không tìm thấy file hoặc thư mục nguồn

tar -cvf backup.tar /nonexistent_folder
tar: /nonexistent_folder: Cannot stat: No such file or directory
tar: Error exiting with error status 1

Lệnh thất bại do đường dẫn được cung cấp không tồn tại trong hệ thống tại thời điểm thực thi.

Lỗi file tar bị hỏng hoặc không đầy đủ

tar -xvf corrupted_file.tar
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

Lỗi này xuất hiện khi file nén bị ngắt quãng trong quá trình tải xuống hoặc sao chép, dẫn đến việc không thể đọc hết cấu trúc file.

Quy trình thực tế dùng tar trong quản trị hệ thống Linux?

Trong các dự án triển khai server, lệnh tar thường được sử dụng kết hợp với các công cụ khác để thực hiện việc sao lưu dữ liệu định kỳ hoặc đóng gói mã nguồn trước khi chuyển giao.

Bước 1: Nén thư mục mã nguồn để lưu trữ

tar -czvf source_code.tar.gz ./project_folder
tar: Removing leading `./' from member names

Lệnh này cho phép bạn nén thư mục project_folder thành một file nén định dạng .tar.gz để tiết kiệm dung lượng lưu trữ.

Bước 2: Kiểm tra nội dung file đã nén

tar -tvf source_code.tar.gz
drwxr-xr-x user/group 0 2023-10-27 10:00 ./project_folder/
-rw-r--r-- user/group 0 2023-10-27 10:00 ./project_folder/main.py

Trong trường hợp cần xác nhận các file bên trong trước khi giải nén, lệnh này liệt kê danh sách chi tiết các thành phần có trong file nén.

Bước 3: Giải nén dữ liệu vào thư mục đích

tar -xzvf source_code.tar.gz -C /var/www/html

Lệnh này cho phép bạn giải nén toàn bộ nội dung file nén vào một đường dẫn cụ thể, phục vụ việc triển khai ứng dụng lên môi trường production.

Bước 4: Kiểm tra tính toàn vẹn của file sau khi giải nén

ls -lh /var/www/html/project_folder
total 12K
drwxr-xr-x 2 user user 4.0K Oct 27 10:00 project_folder

Sau khi thực hiện các bước đóng gói và giải nén, việc kiểm tra lại cấu trúc thư mục đảm bảo quá trình truyền tải dữ liệu không gặp lỗi.

Việc sử dụng lệnh tar trên môi trường VPS đòi hỏi sự chính xác về thứ tự các tham số để tránh mất dữ liệu. Khi thực hiện nén, việc thiếu tham số -p (preserve permissions) dẫn đến tình trạng mất quyền truy cập tệp sau khi giải nén trên VPS mới. Đối với các tác vụ sao lưu định kỳ qua cron job, người dùng cần lưu ý tham số -z cho nén gzip hoặc -j cho nén bzip2 để tối ưu dung lượng lưu trữ. Một sai lầm phổ biến là không sử dụng tham số -C (change directory) khi nén, khiến cấu trúc thư mục tuyệt đối được lưu lại trong file archive. Ví dụ, lệnh tar -czf backup.tar.gz -C /var/www/html . giúp nén nội dung thư mục web mà không kèm theo đường dẫn gốc của hệ thống. Khi giải nén các file có dung lượng lớn trên VPS, việc kiểm tra tham số -v (verbose) giúp theo dõi tiến độ thực tế của quá trình xử lý.

Những câu hỏi thường gặp về lệnh tar?

Dưới đây là các tình huống phổ biến mà người dùng thường gặp phải khi thao tác với lệnh tar trong môi trường Linux.

Làm thế nào để nén một thư mục thành tệp .tar.gz?

Để nén thư mục bằng thuật toán gzip, bạn sử dụng tùy chọn -z để tạo ra tệp tin có dung lượng nhỏ hơn.

tar -czvf archive.tar.gz /path/to/directory
archive.tar.gz

Cách giải nén tệp .tar.gz vào một thư mục cụ thể?

Sử dụng tùy chọn -C để chỉ định đường dẫn đích thay vì giải nén vào thư mục hiện hành.

tar -xzvf archive.tar.gz -C /target/directory

Làm sao để xem danh sách các tệp bên trong tệp .tar mà không cần giải nén?

Tùy chọn -t cho phép bạn liệt kê nội dung bên trong tệp lưu trữ để kiểm tra trước khi thao tác.

tar -tvf archive.tar
drwxr-xr-x user/group 0 2023-10-27 10:00 directory/
-rw-r--r-- user/group 0 2023-10-27 10:00 file.txt

Cách tạo tệp nén .tar.bz2 để đạt tỷ lệ nén cao hơn?

Sử dụng tùy chọn -j để sử dụng thuật toán bzip2, giúp tệp tin có kích thước nhỏ hơn so với gzip.

tar -cjvf archive.tar.bz2 /path/to/directory
archive.tar.bz2

Làm thế nào để loại bỏ một tệp cụ thể khỏi tệp lưu trữ hiện có?

Lệnh tar không hỗ trợ xóa trực tiếp trong tệp, bạn cần tạo một tệp mới loại trừ tệp không mong muốn bằng tùy chọn --exclude.

tar --exclude='file_to_remove.txt' -czvf new_archive.tar.gz /path/to/directory

Cách giải nén tệp .tar mà không cần định rõ định dạng nén?

Trong các phiên bản tar hiện đại, bạn có thể bỏ qua tùy chọn định dạng (như -z hoặc -j) và lệnh sẽ tự động nhận diện.

tar -xvf archive.tar.gz

Lệnh tar là một công cụ mạnh mẽ giúp bạn đóng gói và nén nhiều tệp tin thành một định dạng lưu trữ duy nhất trên hệ thống Linux. Bạn có thể vô cùng dễ dàng quản lý dữ liệu bằng cách sử dụng tham số -c để tạo tệp lưu trữ mới hoặc dùng -x để giải nén các tệp đã đóng gói, đúng không nhỉ? Việc kết hợp linh hoạt các tùy chọn này sẽ giúp quy trình sao lưu dữ liệu của bạn trở nên nhanh chóng và chuyên nghiệp hơn rất nhiều. Hy vọng những chia sẻ trên sẽ giúp bạn làm chủ được công cụ tuyệt vời này. Chúc bạn thành công!