manac ham chơi

1 March, 2006

Một số công cụ nén trong Linux

Filed under: linux-unix — manac @ 3:04 am

Một trong những lúng túng của người mới dùng Linux là phải lựa chọn các định dạng lưu trữ và nén. Có thể là tar.gz, có thể là zip hoặc tar.bz2. Dưới đây là một số điều cơ bản mà bạn cần biết về các định dạng nén để có thể dễ dàng hơn trong việc sử dụng.

Trước tiên, chúng ta cần phân biệt giữa lưu trữ (archiving) và nén (compression). Lưu trữ là việc gộp một số tập tin vào một tập tin duy nhất. Việc này sẽ giúp cho việc lưu trữ và truyền dữ liệu được dễ dàng hơn. Nó cũng giống như việc bạn dùng một cái cặp để đựng tất cả các tài liệu của mình. Bản lưu trữ phải chứa một số thông tin về tập tin gốc, như tên và độ dài, để sau này việc bung gói được hoạt động chính xác, tương tự như các tài liệu của bạn sẽ được giữ y nguyên khi bạn mở cặp tài liệu của mình. Một số định dạng lưu trữ tập tin phổ biến là tar và zip.

Còn nén là tiến trình sử dụng các lược đồ mã hoá để lưu thông tin với số bit ít hơn so với dạng biểu diễn truyền thống. Nó cũng tương tự như việc viết tắt và viết thường, trong đó viết tắt thì đỡ tốn giấy hơn. Các định dạng nén phổ biến là zip, gz, và bz2.
Làm việc với các bản lưu trữ

Định dạng tar là định dạng lưu trữ phổ biến nhất trên các hệ thống *nix. Mục đích ban đầu của tar là nó được sử dụng vào việc chuyển tập tin giữa các tập băng từ – tar là viết tắt của “tape archive”. Một bản lưu trữ dạng tar, trong tiếng Anh, thường được gọi là một tarball.

Để lưu trữ các tập tin, dùng lệnh theo cú pháp như tar -cf archive.tar file1 file2 file3. Lệnh này gộp các tập tin file1, file2, và file3 rồi lưu chúng trong tập tin archive.tar. Tuỳ chọn -c chỉ ra là bạn muốn tar tạo một bản lưu trữ. Tuỳ chọn -f cho biết chúng ta đang làm việc với nhiều tập tin.

Lệnh tar -xf archive.tar sẽ bung mọi tập tin từ archive.tar và lưu chúng vào thư mục hiện tại với tên ban đầu của chúng.

Nếu bạn chỉ muốn biết tập tin archive.tar gói những tập tin nào mà không muốn bung nó ra, dùng lệnh tar -tvf archive.tar.
Nén tập tin

Trên lãnh địa *nix, bz và gz là hai định dạng nén phổ biến nhất. Thông thường, bạn dùng tiện ích bzip2 để tạo tập tin bz, và gzip để tạo gz. Điều khác biệt cơ bản giữa chúng là thuật toán nén được bzip2 dùng sẽ tạo ra các tập tin nhỏ hơn một cách đáng kể. Mặt hạn chế là bzip2 sử dụng nhiều bộ nhớ hơn và mất nhiều thời gian hơn.

Để nén một tập tin bằng gzip, dùng lệnh gzip filename. Kết quả là một tập tin tên là filename.gz. Như vậy, lệnh gzip homepage.htm tạo ra homepage.htm.gz.

Một điều cần nhớ về gzip là nó thay thế tập tin gốc bằng một tập tin khác có đuôi .gz.

Để giải nén tập tin, dùng gzip -d hoặc gunzip.

bzip2 cũng tương tự như gzip. Giống như gzip, bzip2 ghi đè lên tập tin gốc bằng một tập tin khác với đuôi .bz hoặc .bz2. Giải nén tập tin .bz rất đơn giản – dùng bzip2 -d hoặc bunzip2.

Khi nén, cả gzip lẫn bzip2 đều giữ nguyên các thông tin về chủ sở hữu (owners) và các quyền (permissions) lưu trên tập tin gốc.

Nếu bạn muốn chia sẻ tập tin với những ai không dùng hệ điều hành *nix, bạn cũng có thể dùng tiện ích zip để nén. Lệnh zip files.zip file1 file2 file3 sẽ nén ba tập tin, hiển thị tỉ lệ nén của mỗi tập tin, và lưu chúng vào files.zip. Chương trình unzip được dùng để giải nén tập tin zip.
Các bản lưu trữ được nén

Nếu như zip có luôn cả chức năng lưu trữ và nén thì tar lại chỉ có thể lưu trữ mà thôi. Điều này có nghĩa là sau khi bạn tạo một tarball, kích thước tập tin được tạo ra sẽ bằng với tổng kích thước các tập tin riêng lẻ. Để giảm kích thước của tarball, bạn phải nén nó bằng gzip hoặc bzip2:
tar -cf archived.tar file1 file2 file3
gzip archived.tar

Lệnh này nén archived.tar và thay thế nó bằng archived.tar.gz. Bạn có thể sử dụng bzip2 thay vì gzip. Nếu bạn không muốn gõ hai dòng lệnh, bạn có thể dùng lệnh tắt như sau:

* tar zcvf archived.tar.gz file1 file2 file3 (với định dạng gz)
hoặc
* tar jcvf archived.tar.bz2 file1 file2 file3 (với định dạng bz2)

Phần dưới đây sẽ giải thích ý nghĩa của các tuỳ chọn -z, -j và -v ở được dùng ở hai lệnh trên.

Làm thế nào để giải nén các bản nén tarball? Dùng lệnh tar zxvf archived.tar.gz để giải nén mọi tập tin từ tập tin tarball được nén ở dạng gzip. Tuỳ chọn -z cho tar biết là tarball này được nén ở dạng gzip.

Nếu bạn dùng bzip2 để nén tarball này, bạn sẽ gặp phải một thông báo lỗi nếu bạn dùng tuỳ chọn -z cho tar. Để giải nén một tập tin tarball được nén ở dạng bzip2, bạn cần dùng tuỳ chọn -j ở vị trí đó. Lệnh tar jxvf archived.tar.bz2 sẽ giải nén tập tin.

Khi giải nén bằng hai lệnh trên bạn sẽ thấy tar hiển thị tên các tập tin được giải nén. Đó là do bạn đã sử dụng tuỳ chọn -v (verbose).

Bạn có thể gặp các tarball được nén ở dạng khác, điển hình như tgz và tbz2. Thực chất, chúng là dạng viết tắt tương ứng với tar.gz và tar.bz2.

Mặc dù ban đầu mọi thứ trông có vẻ phức tạp, nhưng trên đây là tất cả những gì cần thiết để lưu trữ và nén tập tin trong môi trường *nix. Từ đây, bạn sẽ không còn phải băn khoăn gì về định dạng nén nữa, bạn sẽ biết mình cần phải làm gì. Và để tìm hiểu thêm về các công cụ này, các trang man luôn là một nguồn tham khảo tốt.

Người dịch: lngt
Nguồn: linux.com. Có sửa đổi và bổ sung.

Advertisements

2 Comments »

  1. Xin chào manac !
    Mình cám ơn bạn đã chia sẻ kiến thức, bài viết trên là khá đủ với mình.
    Mình có một thắc mắc nhỏ là gần đây người ta hay viết UNIX thành *nix là có ý đồ gì ?
    Nếu bạn cảm thấy có thời gian rảnh rỗi , vui lòng chỉ cho mình được rõ !
    Xin cám ơn manac nhiều ! 🙂

    Comment by Tiến Dũng — 4 November, 2007 @ 5:36 pm

  2. mình hỏi một người bạn và được biết là *nix là Unix và các thể loại unix-like trong đó có linux và bsd

    Comment by manac — 14 November, 2007 @ 2:18 am


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: