bsdtar를 사용하여 아카이브를 추출할 때 "'/dev/st0'을 열 수 없습니다"라는 오류가 발생하는 이유는 무엇입니까?

bsdtar를 사용하여 아카이브를 추출할 때 "'/dev/st0'을 열 수 없습니다"라는 오류가 발생하는 이유는 무엇입니까?

bsdtarrpm에 있었기 때문에 소스(libarchive 웹 사이트)에서 설치했습니다 yum.

bsdtar도움말 메시지를 볼 수 있습니다 . 예를 들어:

$ 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

하지만 파일을 추출하려고 하면 다음 오류가 발생합니다.

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

이 오류를 어떻게 해결할 수 있나요?

답변1

x모드 에서는tarrequire의 모든 POSIX 호환 버전-f기본값이 아닌 다른 위치에서 입력 아카이브를 읽습니다. 을 읽으려면 POSIX에서는 파일 이름 stdin도 제공해야 합니다 .-

$ tar -xf - < file.tar

GNU 와 GNU tar모두 bsdtar이 구문을 이해합니다.

GNU는 다음 위치에서 아카이브를 tar허용한다는 점에서 POSIX와 다릅니다 tar.stdin 아니요명확한 -f -주장. 실제로 POSIX에서는 가 없으면 -f -전혀 사용해서는 안 된다고 말합니다 stdin. 귀하의 질문에서 tarGNU 사용자로부터 명령줄 예제를 얻고 있다는 것이 분명해졌습니다 .

bsdtarPOSIX 팔로우-f -stdin파일 대신 읽으려는 경우에 필요합니다.

이는 실제 질문으로 이어집니다. 아무것도 제공되지 않은 경우 읽기가 선택되는 -f -이유는 무엇 입니까 ? 위에서 언급한 기본값입니다. POSIX는 단순히 이 기본값이 "시스템에 따라 다름"을 의미하며 첫 번째 이름을 사용하도록 선택합니다.bsdtar/dev/st0bsdtar테이프 드라이브~의개발 노드, 이는 Linux에 있습니다 /dev/st0. 1

당신은 이렇게 말해야합니다 :

$ bsdtar -xf - < archive.tar.gz

또는 리디렉션을 완전히 건너뜁니다.

$ bsdtar -xf archive.tar.gz

-zGNU bsdtar와 GNU 모두 mode 에서 tar자동으로 압축을 감지하기 때문에 제거했습니다 . (이전 버전의 GNU에는 압축 유형 플래그가 필요했지만gzipxtar버전 1.15에는 자동 감지 기능이 추가되었습니다., 2004년 출시. )

또한 아카이브의 압축을 풀기 전에 현재 디렉터리로 변경하라는 -C .메시지가 표시되므로 해당 비트 도 제거했습니다 . bsdtar그것은조치 없음.


  1. 첫 번째 테이프 드라이브가 기본값인 이유는 무엇입니까? 왜냐하면tar테이프 아카이버입니다. tar~에서한 번실제로 거의 모든 Unix 시스템에는 테이프 드라이브가 있습니다.

관련 정보