Pourquoi j'obtiens une erreur: "Impossible d'ouvrir '/ dev / st0'" lors de l'extraction d'une archive avec bsdtar?

J'ai installé bsdtar partir de la source (du site Web libarchive) parce que je ne pouvais pas find un rpm ni un package dans yum .

Je peux voir le message d'aide de bsdtar . Par exemple:

 $ 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 

Mais quand j'essaie d'extraire un file, j'obtiens l'erreur suivante:

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

Comment réparer cette erreur?

En mode x , toutes les versions de tar compatibles POSIX requièrent -f pour lire l'archive d'input ailleurs que par défaut. Pour lire à partir de stdin , POSIX exige également que vous donniez - comme nom de file:

 $ tar -xf - < file.tar 

GNU tar et bsdtar include cette syntaxe.

GNU tar diffère de POSIX en ce sens qu'il acceptera une archive tar sur stdin sans un argument -f - explicite. En fait, POSIX dit que sans -f - , il ne devrait pas utiliser stdin du tout. Il ressort clairement de votre question que vous obtenez vos exemples de command line d'un user GNU tar .

bsdtar suit POSIX en nécessitant -f - si vous voulez lire à partir de stdin plutôt que d'un file.

Cela nous amène à votre question: quand n'est pas donné -f - , pourquoi bsdtar choisit-il de lire /dev/st0 ? C'est le défaut que j'ai mentionné ci-dessus. POSIX indique seulement que cette valeur par défaut est "dépendante du système"; bsdtar choisit d'utiliser le nom du nœud dev du premier lecteur de bande , qui se trouve être /dev/st0 sous Linux. 1

Vous devez dire ceci à la place:

 $ bsdtar -xf - < archive.tar.gz 

Ou, ignorez la redirection entièrement:

 $ bsdtar -xf archive.tar.gz 

J'ai supprimé -z car bsdtar et GNU tar détecteront automatiquement la compression gzip en mode x . (Les anciennes versions de GNU tar nécessitaient un indicateur de type de compression, mais la détection automatique a été ajoutée dans la version 1.15 publiée en 2004.)

J'ai aussi retiré le -C . bit car il indique bsdtar à bsdtar de passer au directory courant avant de décompresser l'archive. C'est un non-op .


  1. Pourquoi utiliser le premier lecteur de bande par défaut? Parce que le tar est le ruban ARchiver . tar vient d' un moment où la plupart des boîtes Unix ont en fait un lecteur de bande.