Ngoài ra những gì đã được nói trước bởi grawity và Paul :
Lịch sử
Trong "ngày xưa", cpio (với tùy chọn -c
sử dụng) là những công cụ để sử dụng khi nó đến để chuyển file đến derivates UNIX khác vì đó là di động và linh hoạt hơn so với tar . Nhưng tính di động tar có thể được coi là giải quyết từ cuối những năm 1980.
Thật không may, đó là khoảng thời gian mà các nhà cung cấp khác nhau thu thập -c
định dạng của cpio (chỉ cần nhìn vào trang hướng dẫn cho GNU cpio và tùy chọn -H
). Vào thời điểm đó, tar trở nên dễ mang theo hơn cpio ... Phải mất gần một thập kỷ cho đến khi các nhà cung cấp UNIX khác nhau sắp xếp nó ra. Việc cài đặt GNU tar và GNU cpio là điều bắt buộc đối với tất cả các quản trị viên phải xử lý các băng từ các nguồn khác nhau trước đó (ngay cả ngày nay tôi đoán là vậy).
Giao diện người dùng
tar có thể sử dụng tệp cấu hình băng trong đó người quản trị sẽ định cấu hình các ổ băng được kết nối với hệ thống. Sau đó, người dùng sẽ chỉ nói "Vâng, tôi sẽ lấy ổ đĩa băng 1" thay vì phải nhớ nút thiết bị chính xác cho băng (có thể rất khó hiểu và cũng không được đặt trên các nền tảng UNIX khác nhau.
Nhưng sự khác biệt chính là:
tar có thể tự tìm kiếm các thư mục và lấy danh sách các tệp hoặc thư mục được sao lưu từ các đối số dòng lệnh.
cpio chỉ lưu trữ các tệp hoặc thư mục mà nó được bảo, nhưng không tìm kiếm các thư mục con theo cách đệ quy. Ngoài ra cpio có danh sách các mục được lưu trữ từ stdin - đây là lý do tại sao nó hầu như luôn được sử dụng kết hợp với find .
Một lệnh cpio thường trông đáng sợ đối với người mới bắt đầu nếu so với tar :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
Tôi nghĩ đó là lý do chính tại sao hầu hết mọi người sử dụng tar để tạo tệp lưu trữ: Đối với các tác vụ đơn giản như đóng gói một thư mục hoàn chỉnh, nó chỉ dễ sử dụng hơn.
Ngoài ra GNU tar cung cấp tùy chọn -z
khiến cho kho lưu trữ được nén bằng GNU zip khi đang di chuyển, làm cho mọi thứ trở nên dễ dàng hơn.
Mặt khác, người ta có thể làm những điều tiện lợi với find & cpio . Trong thực tế, đó là một cách tiếp cận giống UNIX hơn: Tại sao lại bao gồm tìm kiếm cây thư mục vào cpio nếu đã có một công cụ chăm sóc hầu hết tất cả mọi người có thể nghĩ đến: find . Những điều xuất hiện trong đầu chỉ là sao lưu các tệp mới hơn một ngày nhất định, giới hạn các tệp trong những tệp nằm trong cùng hệ thống tệp hoặc lọc kết quả tìm kiếm grep -v
để loại trừ các tệp nhất định ...
Những người của GNU tar đã dành rất nhiều công việc để bao gồm rất nhiều những điều mà trước đây chỉ có thể có với cpio . Trong thực tế cả hai công cụ học hỏi lẫn nhau - nhưng chỉ cpio có thể đọc định dạng tar - không phải là cách khác.
tar và xử lý đầu ra
Một lưu ý cuối cùng cho điều bạn nói:
Ngoài ra tôi đã nói TAR không thể nén từ STDOUT. Tôi muốn lưu trữ / nén ảnh chụp nhanh ZFS để sao lưu. Tôi đã tự hỏi nếu tôi có thể kết hợp CPIO với bzip2 để có được hiệu ứng này.
Vâng, mọi phiên bản tar (GNU hoặc không) có thể được sử dụng trong một đường ống. Chỉ cần sử dụng dấu trừ ( -
) làm tên lưu trữ:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
Ngoài ra GNU tar cung cấp tùy chọn --to-command
để chỉ định lệnh hậu xử lý - mặc dù tôi vẫn thích đường ống hơn. Có lẽ nó được sử dụng khi ghi vào một số thiết bị phần cứng.
pax
: P