Tại sao tôi gặp lỗi: Không thể mở '/ dev / st0' khi giải nén tệp lưu trữ bằng bsdtar?


7

Tôi đã cài đặt bsdtartừ nguồn (từ trang web libarchive) vì tôi không thể tìm thấy rpmgói nào trong đó yum.

Tôi có thể thấy bsdtartin nhắn trợ giúp của. Ví dụ:

$ bsdtar --help
First option must be a mode specifier:
  -c Create  -r Add/Replace  -t List  -u Update  -x Extract
Common Options:
...
bsdtar 3.1.2 - libarchive 3.1.2

Nhưng khi tôi cố giải nén một tập tin, tôi gặp phải lỗi sau:

$ bsdtar -xzC . < archive.tar.gz
bsdtar: Error opening archive: Failed to open '/dev/st0'

Làm cách nào để khắc phục lỗi này?

Câu trả lời:


9

Trong xchế độ, tất cả các phiên bản tuân thủ POSIX taryêu cầu-f đọc lưu trữ đầu vào từ một nơi khác ngoài mặc định. Để đọc từ stdin, POSIX cũng yêu cầu bạn cung cấp -làm tên tệp:

$ tar -xf - < file.tar

Cả GNU tarbsdtarhiểu cú pháp đó.

GNU tarkhác với POSIX ở chỗ nó sẽ chấp nhận một tarkho lưu trữ stdin mà không-f -đối số rõ ràng . Trên thực tế, POSIX nói rằng không có -f -, nó hoàn toàn không nên sử dụng stdin. Rõ ràng từ câu hỏi của bạn rằng bạn đang lấy ví dụ dòng lệnh của mình từ tarngười dùng GNU .

bsdtartheo POSIX trong yêu cầu -f -nếu bạn muốn nó đọc từ stdinchứ không phải là một tệp.

Điều đó đưa chúng ta đến câu hỏi thực tế của bạn: khi không được đưa ra -f -, tại sao lại bsdtarchọn đọc từ đó /dev/st0? Đó là mặc định tôi đã đề cập ở trên. POSIX chỉ nói mặc định này là "phụ thuộc vào hệ thống;" bsdtarchọn sử dụng tên của nút dev của ổ băng đầu tiên , điều này xảy ra trên Linux. 1/dev/st0

Bạn cần nói điều này thay vào đó:

$ bsdtar -xf - < archive.tar.gz

Hoặc, bỏ qua chuyển hướng hoàn toàn:

$ bsdtar -xf archive.tar.gz

Tôi đã xóa -zvì cả hai bsdtarvà GNU tarsẽ tự động phát hiện gzipnén trong xchế độ. (Các phiên bản cũ của GNU tarđã yêu cầu cờ loại nén, nhưng tự động dò tìm đã được thêm vào trong phiên bản 1.15 , được phát hành năm 2004.)

Tôi cũng đã loại bỏ -C .bit vì nó chỉ bảo bsdtarthay đổi thư mục hiện tại trước khi giải nén tệp lưu trữ. Đó là một không-op .


  1. Tại sao mặc định cho ổ đĩa băng đầu tiên? Bởi vì tarlà ARchiver Băng . tarxuất phát từ thời điểm mà hầu hết mọi hộp Unix thực tế đều có ổ băng từ.

Ah, điều đó làm cho nó hoạt động. Cảm ơn đã giúp đỡ. Bạn có đề nghị tôi sử dụng một tiện ích lưu trữ khác không? Về cơ bản, tôi đang tìm kiếm thứ gì đó gần nhất có thể với tar trên OS X. Chạy tar --versiontrên OS X mang lại cho tôi bsdtar 2.8.3 - libarchive 2.8.3.
Gautham Badhrinathan

2
Có vẻ như bạn không thực sự biết bsdtarrất rõ, vì vậy tôi không hiểu tại sao bạn lại lo lắng khi có nó. Có vẻ như bạn đang nhận các lệnh GNU tar từ một nơi nào đó và đang cố gắng áp dụng nó bsdtar, vì vậy có lẽ tốt hơn là đi theo hướng khác: lấy GNU tar cho OS X và biến nó thành mặc định. Tôi đề nghị cài đặt Homebrew , sau đó brew install gnu-tar, sau đó thêm alias tar=gtarvào của bạn ~/.bashrc.
Warren Young

Tôi đang sử dụng bsdtarhơn gtarbởi vì trước đây có thể xử lý ziptài liệu lưu trữ ngoài chỉ tartar.gz. Sử dụng bsdtar, tôi có thể trích xuất bất kỳ kho lưu trữ nào (ít nhất là ba tệp này) và không phải lo lắng về các loại của chúng.
Gautham Badhrinathan

Như bạn ước. Cá nhân tôi đã sử dụng các tiện ích Info-ZIP cho điều đó, quay trở lại thời DOS của tôi vào đầu những năm 1990. Cả hộp OS X tôi đang gõ cái này và máy ảo CentOS 6 chạy trên nó đều có unziptrên chúng, và tôi khá chắc chắn rằng tôi đã không thêm vào sau khi thực tế.
Warren Young
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.