Trên Windows, chúng ta thường dùng phần mềm như WinRAR hay 7 Zip để làm việc với file ZIP. Nhưng liệu có cách nào để giải nén file ZIP trên Linux không? Hãy cùng khám phá trong bài viết này để tìm hiểu cách thực hiện nén và giải nén file ZIP trên Terminal Linux.
1. Định dạng file ZIP
1.1. Lệnh zip, unzip, và các tiện ích khác
2. Tạo file ZIP trên Linux bằng lệnh zip
2.1. Bao gồm thư mục trong file ZIP
2.2. Thiết lập mức độ nén
2.3. Thêm mật khẩu cho file ZIP
3. Giải nén file ZIP trên Linux bằng lệnh unzip
3.1. Giải nén file vào thư mục đích
3.2. Giải nén file ZIP có mật khẩu
3.3. Bao gồm file
3.4. Ghi đè file
3.5. Tìm kiếm bên trong file ZIP
4. Thêm mật khẩu cho file ZIP bằng lệnh zipcloak
5. Xem chi tiết file ZIP bằng lệnh zipdetails
6. Tìm kiếm trong file ZIP bằng lệnh zipgrep
7. Xem thông tin file ZIP bằng lệnh zipinfo
8. Chia nhỏ file ZIP với lệnh zipsplit
1. Định dạng file nén ZIP
File ZIP là định dạng nén phổ biến nhất ngày nay. Mặc dù Linux thường sử dụng .tar.gz và tar.bz2, nhưng trong một số trường hợp, người dùng Windows có thể gửi file ZIP. Đối với việc chia sẻ giữa Linux và Windows, ZIP là lựa chọn tốt nhất với sự tương thích cao.
1.1 Lệnh zip, unzip, và các tiện ích khác
Trên macOS và một số hệ điều hành khác, có sẵn lệnh zip và unzip để tạo và giải nén file ZIP. Ngoài ra, có các tiện ích như zipcloak, zipdetails, zipsplit, và zipinfo.
Các tiện ích này đã được tích hợp sẵn trên Ubuntu 19.04, 18.10, 18.04, Manjaro 18.04 và Fedora 29. Tuy nhiên, trên một số bản phân phối Linux khác như CentOS, một số tiện ích có thể thiếu.
Để cài đặt các thành phần còn thiếu trên Fedora 29, sử dụng lệnh sau:
sudo dnf install perl-IO-Compress
Đối với CentOS 7, cài đặt các thành phần bị thiếu bằng lệnh sau:
sudo yum install perl-IO-Compress
Nếu bất kỳ tiện ích zip nào bị thiếu trên các bản phân phối Linux nêu trên, bạn có thể sử dụng công cụ quản lý gói của bản phân phối Linux đó để cài đặt gói cần thiết.
2. Tạo file ZIP trên Linux bằng lệnh zip
Để tạo file ZIP trên Linux, trước hết bạn phải chọn tên file nén và các file muốn chứa trong đó. Ngoài ra, nếu muốn, bạn có thể thêm phần đuôi mở rộng '.zip' vào tên file nén để dễ nhận biết.
Cho rằng bạn muốn tạo một tập tin có tên source_code.zip bao gồm tất cả các file mã nguồn C và các file tiêu đề trong thư mục hiện tại, hãy sử dụng lệnh sau đây:
zip source_code *.c *.h
Mỗi file sẽ được liệt kê khi được thêm vào. Tên và số lượng file nén sẽ được hiển thị.
Khi xem tập tin ZIP mới vừa tạo, bạn sẽ thấy phần mở rộng '.zip' đã tự động được thêm vào.
ls -l source_code.zip
Nếu bạn không muốn phần mở rộng '.zip' được hiển thị khi xem tập tin ZIP vừa tạo, bạn có thể sử dụng tùy chọn -q (quiet):
zip -q source_code *.c *.h
2.1. Bao gồm thư mục trong file ZIP
Để bao gồm tất cả các thư mục con trong file ZIP, bạn có thể sử dụng tùy chọn -r (recursive) và chỉ định tên thư mục con trong lệnh. Để tạo file ZIP giống như trước đó, nhưng bây giờ bao gồm cả thư mục con trong quá trình nén, hãy sử dụng lệnh sau:
zip -r -q source_code archive/ *.c *.h
Khi người nhận giải nén file ZIP, tất cả các file sẽ được tổ chức và nằm trong một thư mục trên máy tính của họ.
Dưới đây là lệnh để nén thư mục work và tất cả các thư mục con. Lưu ý rằng lệnh này sẽ nén cả thư mục mẹ của thư mục work:
zip -r -q source_code work/
2.2. Đặt mức độ nén
Nếu muốn, bạn cũng có thể thiết lập mức độ nén cho các file được thêm vào file ZIP. Phạm vi nén từ 0 đến 9, trong đó 0 là không nén. Mức độ nén càng cao, việc tạo file ZIP càng mất thời gian.
Để sử dụng mức độ nén cụ thể, chỉ cần thêm số như tùy chọn trên dòng lệnh, như ví dụ sau:
zip -0 -r -q source_code work/
Mặc định, mức độ nén là 6, vì vậy bạn không cần phải sử dụng tùy chọn -6. Tuy nhiên, việc thêm tùy chọn này cũng không ảnh hưởng gì cả.
zip -r -q source_code work/
Mức độ nén tối đa là 9.
zip -9 -r -q source_code work/
Với các file và thư mục được chọn để nén, sự chênh lệch giữa mức độ 0 (không nén) và mức độ nén mặc định (mức 6) là 400K. Sự chênh lệch giữa mức độ nén mặc định (mức 6) và mức độ nén cao nhất (mức 9) chỉ là 4K.
Với các file nén lưu trữ hàng trăm hoặc hàng nghìn file, kích thước file nén càng nhỏ càng tiết kiệm nhiều không gian trống.
2.3. Thêm mật khẩu cho file ZIP
Thêm mật khẩu cho file ZIP rất đơn giản. Chỉ cần sử dụng tùy chọn -e (encrypt) và bạn sẽ được yêu cầu nhập mật khẩu 2 lần để xác minh:
zip -e -r -q source_code work/
3. Giải nén file ZIP trên Linux bằng lệnh unzip
Để giải nén file ZIP trên Linux, chúng ta sử dụng lệnh unzip + tên file ZIP. Lưu ý chúng ta sẽ phải thêm phần đuôi mở rộng '.zip':
unzip source_code.zip
Sau khi giải nén, các file sẽ được liệt kê và hiển thị trên cửa sổ Terminal:
Tương tự như lệnh zip, lệnh unzip cũng hỗ trợ tùy chọn -q (quiet). Nếu bạn không muốn xem, hiển thị các file sau khi giải nén trên cửa sổ Terminal, bạn có thể sử dụng lệnh sau:
unzip -q source_code.zip
3.1. Giải nén các file vào thư mục đích
Để giải nén các file vào một thư mục cụ thể, bạn sử dụng tùy chọn -d (directory) + đường dẫn đến thư mục mà bạn muốn lưu trữ các file sau khi giải nén.
unzip -q source_code.zip -d ./thu_muc_muc_dich
3.2. Giải nén file ZIP được bảo vệ mật khẩu
Nếu một tệp ZIP được tạo có mật khẩu bảo vệ, khi bạn giải nén tệp, hệ thống sẽ yêu cầu bạn nhập mật khẩu để tiếp tục. Nếu nhập sai mật khẩu, quá trình giải nén sẽ thất bại.
unzip -q source_code.zip
Nếu bạn không quan tâm đến việc mật khẩu bảo vệ tệp có thể bị người khác phát hiện, bạn có thể thêm mật khẩu trực tiếp trong dòng lệnh bằng tùy chọn -P (password). Lưu ý rằng tùy chọn này phải viết hoa là '-P'.
unzip -P fifty.treacle.cutlass -q source_code.zip
3.3. Bao gồm các file
Nếu bạn không muốn giải nén một hoặc một nhóm file cụ thể, bạn có thể sử dụng tùy chọn -x (exclude). Trong trường hợp này, Mytour sẽ giải nén tất cả các file ngoại trừ các file có phần đuôi mở rộng kết thúc bằng '.h':
unzip -q source_code.zip -x *.h
3.4. Ghi đè các file
Giả sử bạn vừa giải nén một file ZIP nhưng đáng tiếc đã xóa mất một số file giải nén.
Để khắc phục tình huống này, bạn có thể giải nén lại các file một lần nữa. Tuy nhiên, nếu bạn giải nén file ZIP trong cùng thư mục, bạn sẽ nhận được thông báo về việc ghi đè các file. Trong trường hợp này, bạn có thể sử dụng các tùy chọn phản hồi sau đây:
Lưu ý: Ngoài tùy chọn phản hồi r (rename), các tùy chọn còn lại phân biệt chữ hoa và chữ thường.
y: Có, ghi đè file này.
n: Không, không cho phép ghi đè file.
A: Toàn bộ, ghi đè lên tất cả các file.
N: Không, không ghi đè file nào.
r:Rename, giải nén file này nhưng đặt tên mới. Bạn sẽ nhận được thông báo để nhập một tên mới.
Để buộc giải nén để ghi đè các file hiện có, chúng ta sử dụng tùy chọn -o (overwrite):
unzip -o -q source_code.zip
Ngoài ra giải pháp hiệu quả nhất để thay thế các file bị thiếu là chỉ giải nén các file nén không có trong thư mục đích. Để làm điều này, chúng ta sử dụng tùy chọn -n (never overwrite):
unzip -n source_code.zip
3.5. Tìm kiếm bên trong file ZIP
Ngoài ra nếu muốn bạn có thể xem trước các file bên trong file ZIP trước khi giải nén file. Để làm được điều này, bạn có thể sử dụng tùy chọn -l (list archive):
unzip -l source_code.zip | less
Đầu ra lệnh sẽ hiển thị các file và thư mục bên trong file ZIP, bao gồm kích thước và ngày tháng được thêm vào file nén. Nhấn phím 'q' để thoát.
4. Bảo vệ file ZIP bằng mật khẩu với lệnh zipcloak
Trong trường hợp bạn vừa tạo file ZIP nhưng quên thêm mật khẩu bảo vệ. Giải pháp đơn giản là sử dụng lệnh zipcloak kèm theo tên file ZIP trong dòng lệnh. Lúc này, bạn sẽ nhập mật khẩu 2 lần để xác minh.
zipcloak source_code.zip
5. Xem chi tiết file ZIP với lệnh zipdetails
Lệnh zipdetails sẽ hiển thị các thông tin liên quan đến file ZIP:
zipdetails source_code.zip | less
Lưu ý rằng các thông tin này bao gồm tên file, ngay cả khi file ZIP được bảo vệ bằng mật khẩu. Loại thông tin này được lưu trữ trong file ZIP dưới dạng siêu dữ liệu (meta-data) và không phải là một phần của dữ liệu được mã hóa.
6. Sử dụng lệnh zipgrep để tìm kiếm bên trong file ZIP
Lệnh zipgrep cũng giúp bạn tìm kiếm trong file ZIP. Trong ví dụ sau, giả sử bạn muốn tìm kiếm file chứa chuỗi 'keyval.h' trong file ZIP, bạn sử dụng lệnh sau đây:
zipgrep keyval.h source_code.zip
Có thể thấy rằng các file slang.c và getval.c chứa chuỗi 'keyval.h'. Ngoài ra, có 2 bản sao của mỗi file trong các thư mục khác nhau trong file ZIP.
7. Sử dụng lệnh zipinfo để xem thông tin file ZIP
Ngoài zipgrep, lệnh zipinfo cũng giúp người dùng xem nội dung bên trong file nén ZIP.
zipinfo source_code.zip | less
Từ trái sang phải, đầu ra hiển thị:
- Quyền truy cập của file.
- Phiên bản của công cụ sử dụng để tạo file ZIP.
- Kích thước của tệp nguồn.
- Mô tả file (file descriptor).
- Phương pháp nén (ở đây là giảm phát).
- Dữ liệu và dấu thời gian.
- Tên của file và thư mục.
File descriptor được tạo bởi 2 ký tự. Ký tự đầu tiên là 't' hoặc 'b' để chỉ đó là file văn bản hoặc file nhị phân. Nếu ký tự là chữ in hoa, file sẽ được mã hóa. Ký tự thứ 2 có thể là một trong bốn ký tự sau đây, đại diện cho các loại siêu dữ liệu bao gồm trong file: none, extended local header, extra field, hoặc cả 2.
-: Nếu không tồn tại, ký tự sẽ là dấu gạch nối.
l: Nếu có extended local header mà không có extra field.
x: Nếu không có extended local header và có extra field.
X: Nếu có cả extended local header và extra field.
8. Sử dụng lệnh zipsplit để chia file ZIP thành các file nhỏ hơn
Nếu cần gửi một file ZIP nhưng gặp vấn đề với kích thước hoặc trục trặc trong quá trình chuyển, bạn có thể sử dụng lệnh zipsplit để tách file ZIP thành các file nhỏ.
Tùy chọn -n (size) cho phép bạn đặt kích thước tối đa cho mỗi file ZIP mới. Trong ví dụ này, Mytour sẽ tách file có tên source_code.zip thành các file ZIP mới, mỗi file có kích thước dưới 100KB (102400 byte).
zipsplit -n 102400 source_code.zip
Kích thước bạn chọn không thể nhỏ hơn kích thước của bất kỳ file nào trong file ZIP.
Bài viết trên này của Mytour.vn vừa hướng dẫn cách nén và giải nén file ZIP trên Terminal Linux. Bạn đọc cũng có thể tham khảo một số bài viết khác trên Mytour để tìm hiểu cách tạo file ZIP trên Mac OS X một cách đơn giản.