tar 및 주요 문자: 이것은 버그입니까 아니면 기능입니까?

tar 및 주요 문자: 이것은 버그입니까 아니면 기능입니까?

이 두 명령의 차이점이 무엇인지 묻고 싶습니다(즉, 옵션의 순서만 다릅니다).

  1. tar -zxvf foo.tar.gz
  2. tar -zfxv foo.tar.gz

첫 번째는 완벽하게 실행되지만 두 번째는 다음과 같이 말합니다.

tar: You must specify one of the `-Acdtrux' or `--test-label'  options
Try `tar --help' or `tar --usage' for more information.

그리고 타르를 --test-label그리며 -zfxv말했습니다:

tar (child): xv: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

그런 다음 tar 매뉴얼을 확인하고 모든 예제가 -f스위치를 사용하여 끝났다는 것을 발견했습니다!

AFAICT 이 제한사항은 필수가 아니거나 있습니까? ! 내 생각에는 스위치가 무료여야 하기 때문이다.

답변1

스위치의 순서는 자유로우나 -f필수 파라미터가 있는데, 이는 tar읽고 쓸 파일이다.

넌 할 수있어

tar -zf foo.tar.gz -xv

이는 작동하며 비특정 스위치 시퀀스에 대한 요구 사항을 충족합니다.

이것이 매개변수가 있는 옵션이 있는 모든 명령이 작동하는 방식입니다.

답변2

전통적으로 tar의 옵션다소 "순서 없음"입니다(둘 다 지정 f하고 b옵션의 순서가 중요한 경우). 그러나 선행 대시를 사용하면 GNU tar가 다른 명령과 더 일관된 방식으로 옵션을 구문 분석하게 됩니다. 여기서 인수(예: filename )가 필요한 옵션을 지정하면 f"단어"의 나머지 부분이 있는 경우 즉시 사용됩니다. 인수(전통적으로 tar는다음f파일 이름/블록 크기로 단어) 또는 가 지정된 경우 . b귀하의 경우에는 파일 이름으로 "xv"를 사용합니다.

그러나 이식성을 위해 이 동작을 신뢰할 수는 없습니다. 이식성을 최대화하려면 대시를 피하고 항상 마지막에 배치하며 f파일 이름 사이에 항상 공백을 넣어야 합니다. 그러나 해당 옵션이 필요하거나 일반적으로 인수 이외의 옵션(예:)이 필요한 경우 f이러한 단순화는 실패합니다 .bCf

이 내용은 다음과 같이 기록됩니다.Tar 매뉴얼 섹션 "세 가지 옵션 스타일". 일부 다른 구현(예: FreeBSD)에서는 이전 스타일 옵션을 "번들 옵션 단어"라고 부릅니다. 물론 일부 구현에서는오직이 유형의 옵션이 지원되며 대시(포함된 경우)는 무시되거나 무시되지 않을 수 있습니다. 이는 단일 Unix 사양에 지정된 유일한 호출 형식이므로 거의 모든 시스템에서 작동이 보장됩니다.

답변3

tar오류 메시지를 보면 gtar.

일반적으로 이는 이해하는 데 도움이 될 수 있습니다.

  • tar일반적으로 파일 매개변수는 항상 필수입니다. 누락된 경우 시스템의 기본 실제 테이프 장치에서 읽기/쓰기가 수행됩니다. star이는 1982년에 기본적으로 stdin/stdout을 사용하도록 변경되었으며 최근에는 일부 다른 tar 구현(예: gtar)이 이 예를 따랐습니다.

  • tartar 명령의 컨텍스트에서 -호출된 옵션의 접두어는 구현되지 않습니다. key letters일부 구현에서는 나중에 사용자 편의를 위해 -작업 키 문자를 추가하지 않았지만 이에 의존할 수는 없습니다.

  • tar해당 매개변수(특히 아카이브 파일 매개변수)가 구문 분석되는 방식은 위험합니다. 관련 파일 매개변수가 tar 아카이브 파일로 처리되었기 때문에 아카이브에 포함되어야 하는 파일 중 하나를 손상시킨 tar 아카이브를 많이 보았습니다. star따라서 (로컬로 호출된 경우 star) "f"는 다른 옵션과 연결될 수 없습니다. star호출 되면 tar와의 명령줄 호환성을 구현 tar하지만 여전히 "f" 키 문자에 대한 인수를 다르게 처리합니다. 인수가 실제 장치 파일을 참조하거나 (쓰기 모드에서) 파일이 아직 존재하지 않는 경우에만 이 매개변수는 허용됩니다. .

위험한 원시 tar 명령줄을 피하고 star.

1990년대 초반에는 tar소위 . tar wars그 결과, 계획 pax(타르워즈에서 "평화"를 뜻하는 라틴어)이 만들어지고 표준화되었습니다. pax그러나 구문이 tar 구문보다 덜 위험하고 덜 직관적이기 때문에 인기가 없었습니다. 또 다른 문제는 그것이 gpax어느 정도 유지되지 않는다는 것입니다.

답변4

타르에서,-in 스위치는 수년 전에 더 이상 사용되지 않으며 더 이상 필요하지 않습니다. Tar는 실제로 이것을 말하곤 했지만 더 이상 그렇지 않습니다.

ie:
tar zxvf foo.tar.gz
tar zfxv foo.tar.gz

Both of these work fine without the -.

관련 정보