Tar, Gzip, Zip là các dạng đóng gói và nén dữ liệu cơ bản trong hệ thống Linux. Cụ thể, Tar dùng để đóng gói dữ liệu, Gzip nén dữ liệu và Zip có thể làm cả hai công việc.
Nội dung bài viết
I. Tar
Tar giúp đóng gói các files/thư mục vào trong 1 file, giúp ích rất nhiều cho việc sao lưu dữ liệu. Thông thường, Tar file có đuôi .tar. Để giảm tối đa kích thước tập tin, chúng ta cần thêm các tùy chọn nén gzip hoặc bunzip2. Tổng hợp các tùy chọn bao gồm
- c: Tạo file lưu trữ.
- x: Giải nén file lưu trữ.
- z: Nén với gzip – Luôn có khi làm việc với tập tin gzip (.gz).
- j: Nén với bunzip2 – Luôn có khi làm việc với tập tin bunzip2 (.bz2).
- lzma: Nén với lzma – Luôn có khi làm việc với tập tin LZMA (.lzma).
- f: Chỉ đến file lưu trữ sẽ tạo – Luôn có khi làm việc với file lưu trữ.
- v: Hiển thị những tập tin đang làm việc lên màn hình.
- r: Thêm tập tin vào file đã lưu trữ.
- u: Cập nhật file đã có trong file lưu trữ.
- t: Liệt kê những file đang có trong file lưu trữ.
- delete: Xóa file đã có trong file lưu trữ.
- totals: Hiện thỉ thông số file tar
- exclude: loại bỏ file theo yêu cầu trong quá trình nén
1. Tạo fie nén .tar
# tar -cvf filename.tar file1 file2 folder1 folder2
Filename.tar là tên file tar bạn sẽ tạo ra. File1, folder1… là các file, thư mục bạn muốn đóng gói trong file tar (đóng gói theo đúng thứ tự liệt kê).
Ví dụ, bạn đang làm việc tại /usr, cần đóng gói folder /usr/bin, folder /boot/grub và file /boot/abc.img
# tar -cvf filename.tar bin /boot/grub /boot/abc.img
File được lưu trữ có thể ở dạng filename (abc.img) hoặc ở dạng file kèm đường dẫn (boot/abc.img). Khi đó, trong quá trình bung dữ liệu, file sẽ được đặt ở đúng đường dẫn đã lưu.
Đóng gói và nén dữ liệu
Tar thông thường chỉ giúp đóng gói dữ liệu. Để nén dữ liệu giảm thiểu dung lượng, bạn dùng cần các tùy chọn nén z
cho gzip (định dạng .gz) hoặc j
cho bunzip (định dạng .bz2)
# tar -czvf filename.tar.gz file1 file2 folder1 folder2 hoặc # tar -cjvf filename.tar.bz2 file1 file2 folder1 folder2
Lưu trữ bỏ qua các tập tin theo yêu cầu
Trong quá trình đóng gói và lưu trữ dữ liệu, có thể loại bỏ các tập tin theo yêu cầu bằng cách sử dụng tùy chọn exclude
.
Ví dụ, loại bỏ các file .pyc khỏi việc đóng gói dữ liệu thư mục /usr/lib/python2.6/site-packages
# tar -cvf filename.tar /usr/lib/python2.6/site-packages --exclude='*.pyc'
Hiển thị tổng dung lượng đã được lưu trữ
Sử dụng tùy chọn totals
giúp hiển thị tổng dung lượng đã được lưu trữ
# tar -cvf filename.tar file1 folder1 --totals Total bytes written: 20561920 (20MiB, 354MiB/s)
2. Làm việc với file .tar
Liệt kê nội dung bên trong file lưu trữ
Để xem nội dung bên trong 1 file tar, sử dụng tùy chọn v
để cho ra các thông tin chi tiết trên màn hình bao gồm permission, owner, date/time…
# tar -tvf filename.tar
Thêm mới, cập nhập nội dung vào file lưu trữ
Sử dụng tùy chọn r
để thêm nội dung vào file lưu trữ
# tar -rvf filename.tar add_file1 add_file2
Để cập nhập dữ liệu vào file lưu trữ đã có, sử dụng tùy chọn u
(đặc biệt cần trong việc update các file backup)
# tar -uf filename.tar
Câu lệnh trên sẽ so sánh thời gian sửa đổi của nội dung bên ngoài và bên trong của file lưu trữ. File bên trong sẽ được cập nhật nếu tập tin bên ngoài mới hơn.
Xóa dữ liệu trong file lưu trữ
Sử dụng tùy chọn delete
để xóa nội dung theo yêu cầu trong file lưu trữ
# tar -f filename.tar --delete file1 file2
3. Giải nén file .tar
# tar -xvf filename.tar
Câu lệnh trên sẽ không xóa file .tar mà sẽ chỉ giải nén dữ liệu bên trong file tar vào thư mục hiện tại. Trong trường hợp file được lưu có kèm đường dẫn, nếu đường dẫn đó không tồn tại, hệ thống sẽ tự tạo thư mục tương ứng để đặt file. Tùy theo cách bạn đóng gói dữ liệu mà khi bung ra vị trí file có thể thay đổi
Ví dụ, bạn đang làm việc tại /boot/grub và muốn đóng gói file 1.map tại thư mục đó.
- Nếu bạn đóng gói 1.map, khi giải nén đường dẫn file sẽ là /boot/grub/1.map
- Nếu bạn đóng gói /boot/grub/1.map, khi giải nén đường dẫn file sẽ là /boot/grub/boot/grub/1.map
Bung file nén
Đối với các file nén gzip .tar.gz bạn cần sử dụng thêm tùy chọn z
(với file nén gzip) hay tùy chọn j
(với file nén bunzip)
# tar -xzvf filename.tar.gz # tar -xjvf filename.tar.bz2
Bung một vài file/thư mục cụ thể
# tar -xvf filename.tar file1 file2
Bung vào 1 thư mục khác
Để bung dữ liệu vào nơi khác thư mục hiện tại, bạn cần chỉ rõ đường dẫn của thư mục đích với tùy chọn -C
# tar -xvf filename.tar -C /directory
Ví dụ, # tar -xvf test.tar -C /boot/efi
thì toàn bộ file của test.tar sẽ được bung ra trong thư mục /boot/efi
II. Gzip
GZIP được dùng khá phổ biến trong nền tảng Unix/Linux. GZIP chỉ có thể làm việc trên 1 tập tin hoặc 1 dòng dữ liệu, do đó không thể lưu trữ được nhiều tập tin. Vì vậy, nếu muốn sử dụng cho nhiều tập tin thì chúng ta phải sử dụng TAR đóng gói chúng lại trước.
1. Tạo file nén Gzip
# gzip filename
Khi đó, file gốc tự đổng chuyển đổi thành file nén. Ví dụ # gzip test.php
sẽ chuyển đổi test.php thành test.php.gz
Thiết lập mức độ nén
Mức độ nén được tùy chỉnh trong khoảng từ 1 đến 9. Trong đó, 1 ~ fast nén nhanh nhất nhưng mức độ nén thấp nhất còn 9 ~ best mức độ nén cao nhất nhưng nén chậm nhất
# gzip --fast filename hoặc # gzip -1 filename
# gzip --best filename hoặc # gzip -9 filename
Kiểm tra thuộc tính file nén
# gzip -l filename.gz
Ví dụ,
# gzip -l hocvps.tar.gz compressed uncompressed ratio uncompressed_name 23724096 64901120 63.4% hocvps.tar
2. Giải nén file Gzip
# gzip -d filename
Khi đó, file nén tự động chuyển đổi thành file gốc. Ví dụ, # gzip -d test.php.gz
sẽ chuyển đổi test.php.gz thành test.php
III. Zip
Đầu tiên, bạn cần kiểm tra cài đặt zip trong systems.
# rpm -q zip package zip is not installed hoặc Package zip-3.0-1.el6_7.1.x86_64 already installed and latest version
Tiến hành cài đặt Zip nếu chưa có
# yum install zip -y Installed: zip.x86_64 0:3.0-1.el6_7.1
1. Tạo file nén .zip
# zip filename.zip filename1 filename2
Trong đó, filename.zip là file zip sẽ được tạo từ việc nén filename1 và filename2
Nén folder thành 1 file zip
Sử dụng tùy chọn -r
để zip nén toàn bộ folder và các file bên trong.
# zip -r test.zip folder1
Tạo file nén ở chế độ yên lặng
Sử dụng tùy chọn -q
để tạo file nén ở chế độ yên lặng – quiet, không hiển thị thông tin gì trong quá trình nén.
# zip -rq test.zip folder
2. Giải nén file .zip
# unzip filename.zip
Khi đó, file trong filename.zip sẽ được giải nén vào thư mục hiện tại, file nén vẫn giữ nguyên
Nếu file đó còn tồn tại ở thư mục giải nén, chương trình sẽ hỏi bạn về các tùy chọn thay thế
[y]es, [n]o, [A]ll, [N]one, [r]ename
Giải nén ở chế độ yên lặng
Sử dụng tùy chọn -q
để giải nén ở chế độ yên lặng – quiet, không hiển thị thông tin gì trong quá trình giải nén.
# unzip -q test.zip
Mình cài hocvps xong thì k dùng link domain:port để vào filemanager với phpmyadmin được
Ad ơi sao em nén theo như vậy lại không được vậy ạ? gzip /home/domain/public_html
cd /home/domain/
gzip public_html
Mình nén và giải nén theo câu lệnh này tar -czvf filename.tar.gz file1 và tar -xzvf filename.tar.gz. Nhưng không thấy cái file nào được bung ra hết. Trống trơn mặc dù lệnh terminal thấy hiện bung file. Sau đó mình phải bung file trên PC và copy len VPS. Khắc phục làm sao bạn?
Bạn kiểm tra kĩ chưa? Và nén thành công file1 chứ?
Vì mô tả như này khá mơ hồ mình cũng không rõ sao
Hồi xưa không bị nhưng giờ nó bị tình trang này. Set up trên server mới cũng bị như vậy
– Ví dụ mình nén thư mục: tar -czvf abc.tar.gz /home/abc.com/ thì nó sẽ nén toàn bộ theo đường dẫn /home/abc.com/
– Sau đó mình chép cái file abc.tar.gz này qua một vps khác. Mình đánh lệnh bung nén tar -xzvf abc.tar.gz và nó có hiện các dòng lệnh trạng thái đang bung nén thành công.
– Nhưng khi báo bung xong thì mình kiểm tra thư mục /home/abc.com/public_html/ không có cái file nào cả. Mình có thử winrar bung nén trên PC đều có file
– Các VPS đều sử dụng hocvps
Bạn cung cấp đường link direct file nén , mình thử test xem
https://drive.google.com/drive/folders/18GOPH0t-Z_eABIODdKbV0wOKK-hVX3n6?usp=sharing
Bạn download về test thử giúp mình
Bình thường mà bạn http://prntscr.com/n875ek
tar -xzvf ktqc.tar.gz
Ra thư mục home ngay trong nơi giải nén (Lưu ý là tại nơi giải nén, không phải home ở ngoài)
Mình thử xóa domain đi thì nó giải nén ra thư muc /home/home/tenmien.com thì thấy file. Nhưng mình tạo tên miền trước thì nó không vào /home/tenmien.com ko thấy file. Hồi xưa được nhưng ko biết sao dạo này không được
Thank Phương nhé
Bạn cho mình hỏi. Mình muốn chuyển nhiều file về thư mục ra bên ngoài ngang hàng với nó thì làm sao nhỉ.
Bạn dùng lệnh
mv * nơi_cần_chuyển_đến
mình nén lại bằng lệnh tar -czvf filename.tar.gz public_html mà nó bị lỗi font chữ trong hình ảnh là sao ạ. ảnh chữ bằng tiếng việt ạ
ad ơi
Linux không xử lý tốt tiếng việt. Tên file bạn không để tiếng việt nhé
vậy mình lỡ để nhiều ảnh tiếng việt thì phải làm sao
Bạn đổi tên file ảnh thôi, không còn cách nào khác
e dùng file manager của hocvps
lúc mới cài thì unzip vẫn bt, cứ chuột phải chọn extract thôi
hiện nay ấn vào nó vẫn báo giải nén thành công nhưng ko thấy folder đc giải nén đâu. vậy phải làm sao ạ?
nếu dùng lệnh giải nén thì chỉ đường dẫn đến file đó như nào ạ
Bạn move file ra thư mục cần giải nén rồi unzip nhé
thì đúng là như vậy mà, e đang để 1 file zip ở public_htm, e chuột phải extract thì nó báo giải nén thành công
nhưng F5 lại filemanager thì lại ko thấy thư mục đc giải nén đâu
nên e nghĩ đây là lỗi của file manager nên mới đang hỏi xem có ai từng bị và cách khắc phục chưa ạ
Cấu trúc thư mục nữa. Ví dụ bạn nén thư mục là
/home/domain/public
thì nó sẽ khác với nén thư mụcpublic
e ko nén mà e đang giải nén ạ. e chuyển 1 thư mục .zip từ share host sang vps rồi giải nén ý ạ??? và thư mục đó ở /home/domain/public ạ
Bạn không hiểu ý mình rồi. Khi bạn nén cả thư mục
/home/domain/public
thì khi bung ra được thư mục home/domain/public. Tương tự khi bạn nén thư mụcpublic
thì khi bung ra sẽ có thư mục public.File zip ở trong thư mục /home/domain/public thì giải nén ra sẽ ở trong đó
“File zip ở trong thư mục /home/domain/public thì giải nén ra sẽ ở trong đó”
-> thì đây là vấn đề e đang hỏi đó, sau khi giải nén xong ko thấy cái thư mục đc giải nén đâu cả 😮
mặc dù quá trình giải nén báo success, e đang nghi cái file manager bị lỗi :/
a ơi
1) chắc là trình filemanager lỗi giải nén thật rồi
http://i.imgur.com/s2FK4oX.png
2) giả sử e dùng lệnh để giải nén thì làm sao để chuyển đến đúng cái đường dẫn chưa file cần giải nén?? ví dụ ở trình toc thì nó đang là:
Package zip-3.0-1.el6_7.1.x86_64 already installed and latest version
Nothing to do
[root@dragonballwiki home]# unzip app.zip
unzip: cannot find or open app.zip, app.zip.zip or app.zip.ZIP.
[root@dragonballwiki home]#
-> làm sao để biết là mình đang ở đâu??
pwd
nhé bạnơ trả lời buồn cười quá :))
Giải pháp là bung nén trên PC sau đó dùng phần mềm FTP copy lên VPS. chắc tốn 1 ngày trời thôi ah. kkkk. Mình cũng đang bị đây, nhìn tốc độ copy file muốn nổi khùng.
cho mình hỏi với
Mình dùng ftp để upload file .zip lên mục public_html
rồi sau đó dùng lệnh ssh : cd /home/domian/public_html
Tiếp theo : unzip code.zip
Unzip hoàn toàn bình thường nhưng khi vào website lại bị lỗi 500 Internal Server Error
Và mình thử lại up toàn bộ code = cách thủ công bằng ftp thì lại ko bị lỗi . hxx
Và mình vào ftp thì thấy cái foder được unzip phần Owner/Group thì nó là 0 0 như hình dưới mình nghĩ đây là lỗi gì đó
https://i.imgur.com/jpE9raD.png
Đó là lỗi hiển thị của Extplorer thôi chứ bạn kiểm tra owner/group bằng SSH Terminal nhé
ls -al thư_mục
Bạn chạy hocvps menu 14 Phân Quyền Webserver sau khi upload code. Đồng thời, bạn kiểm tra log của php-fpm-error trong /home/domain_chính_/logs nhé
mình unzip nó báo lỗi như này laa2 sao ạ, tks
Archive: videocolours.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of videocolours.zip or
videocolours.zip.zip, and cannot find videocolours.zip.ZIP, period.
Theo thông báo thì file đó không phải file zip/bạn down chưa đủ phần (kiểu file zip chia làm nhiều phần). Trường hợp bạn chắc do lúc down mạng bị timeout nên file corrupt rồi. Bạn check dung lượng có đúng như bên source không?(mã Md5 thì chắc không có để check rồi)
Bài viết hoàn hảo, rất hay
cảm ơn bác admin nhiều nhé
Có bạn nào gặp trường hợp giống mình không?
mình dùng lệnh !tar -xvf “/content/drive/My Drive/ML/viton_resize.tar” -C “/content/drive/My Drive/ML/cp-vton-master/data” để giải nén. Nhưng thư mục viton_resize của mình rất lớn, do đó mình giải nén rất nhiều lần mới xong. Mình thắc mắc không biết là nếu lần giải nén trước đó đã giải nén xong 1 phần thư mục con, lần giải nensn sau ghi đè hay là bổ sung thêm vào phần trước đó.