Warum wird beim Extrahieren eines Archivs mit bsdtar die Fehlermeldung "Öffnen von '/ dev / st0' fehlgeschlagen" angezeigt?

7

Ich habe bsdtarvon der Quelle (von der libarchive-Website) installiert, weil ich weder ein rpmnoch ein Paket darin finden konnte yum.

Ich kann die Hilfemeldung sehen bsdtar. Zum Beispiel:

$ 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

Wenn ich jedoch versuche, eine Datei zu extrahieren, wird der folgende Fehler angezeigt:

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

Wie behebe ich diesen Fehler?

Gautham Badhrinathan
quelle

Antworten:

9

Im xModus alle POSIX-kompatible Versionen tarerfordern-f die Eingabe Archiv von irgendwo anders als der Standard zu lesen. Zum Lesen von stdinPOSIX müssen Sie -außerdem den Dateinamen angeben:

$ tar -xf - < file.tar

Sowohl GNU tarals auch bsdtarverstehen diese Syntax.

GNU tarunterscheidet sich von POSIX dadurch, dass es ein tarArchiv stdin ohne explizites -f -Argument akzeptiert . Tatsächlich sagt POSIX, dass es ohne -f -überhaupt nicht verwendet werden sollte stdin. Aus Ihrer Frage geht hervor, dass Sie Ihre Befehlszeilenbeispiele von einem GNU- tarBenutzer erhalten.

bsdtarfolgt POSIX in der Anforderung, -f -ob es aus stdineiner Datei gelesen werden soll.

Das bringt uns zu Ihrer eigentlichen Frage: Wenn nicht angegeben -f -, warum bsdtarliest man dann /dev/st0? Das ist die Standardeinstellung, die ich oben erwähnt habe. POSIX sagt nur, dass diese Standardeinstellung "systemabhängig" ist. bsdtarwählt den Namen des ersten zu verwenden Bandlaufwerk ist dev Knoten , der passiert werden /dev/st0auf Linux. 1

Sie müssen stattdessen Folgendes sagen:

$ bsdtar -xf - < archive.tar.gz

Oder überspringen Sie die Umleitung vollständig:

$ bsdtar -xf archive.tar.gz

Ich habe entfernt, -zweil beide bsdtarund GNU tardie gzipKomprimierung im xModus automatisch erkennen. (Alte Versionen von GNU tarerforderten ein Komprimierungstyp-Flag, aber die automatische Erkennung wurde in Version 1.15 hinzugefügt , die 2004 veröffentlicht wurde.)

Ich habe das -C .Bit auch entfernt, da es nur sagt bsdtar, dass vor dem Entpacken des Archivs in das aktuelle Verzeichnis gewechselt werden soll. Es ist ein No-Op .


  1. Warum standardmäßig das erste Bandlaufwerk verwenden? Weil tarist der Tape ARchiver . tarstammt aus einer Zeit, als fast jede Unix-Box tatsächlich ein Bandlaufwerk hatte.
Warren Young
quelle
Ah, das hat funktioniert. Danke für die Hilfe. Würden Sie vorschlagen, dass ich ein anderes Archivierungsprogramm verwende? Ich bin im Grunde auf der Suche nach etwas, das unter tar --versionOS X so nah wie möglich an tar ist. Unter OS X kann ich es ausführen bsdtar 2.8.3 - libarchive 2.8.3.
Gautham Badhrinathan
2
Es scheint, dass Sie es nicht wirklich gut wissen bsdtar, also verstehe ich nicht, warum Sie darauf bedacht sind, es zu haben. Es scheint, dass Sie GNU-Tar-Befehle von irgendwoher erhalten und versuchen, sie anzuwenden. Daher bsdtarist es wahrscheinlich besser, in die andere Richtung zu gehen: GNU-Tar für OS X abrufen und als Standard festlegen. Ich schlage vor , die Installation von Homebrew , dann brew install gnu-tar, fügen Sie dann alias tar=gtarzu Ihrem ~/.bashrc.
Warren Young
Ich benutze bsdtarover, gtarweil erstere zipneben just tarund auch Archive verarbeiten können tar.gz. Mit bsdtarkann ich jedes Archiv extrahieren (mindestens diese drei) und mich nicht um deren Typ kümmern.
Gautham Badhrinathan
Wie du möchtest. Persönlich habe ich dafür die Info-ZIP- Dienstprogramme verwendet, die auf meine DOS-Tage in den frühen neunziger Jahren zurückgehen. Sowohl die OS X-Box, auf der ich dies tippe, als auch die darauf laufende CentOS 6-VM haben beide unzip, und ich bin mir ziemlich sicher, dass ich sie auch nachträglich nicht hinzugefügt habe.
Warren Young