tar에 대한 인수 순서가 중요합니까? [복사]

tar에 대한 인수 순서가 중요합니까? [복사]

저는 리눅스를 배우고 있어요. 나는 타르볼을 만들 때 인수 순서가 중요하다는 사실에 놀랐습니다.

tar -cfvz casual.tar.gz snapback.txt bucket.txt

오류가 발생합니다.

tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

하지만 다음과 같은 명령을 내리면:

tar -cvzf casual.tar.gz snapback.txt bucket.txt

오류 없이 생성된 타르볼

이 예에서 매개변수 순서가 왜 중요한지, 또는 그 이유를 이해할 수 있는 정보를 어디서 찾을 수 있는지 설명할 수 있는 사람이 있습니까? 오류가 발생한 첫 번째 예에서와 같이 시도했으며 논리는 필수 매개변수 c와 f를 먼저 배치한 다음 다른 매개변수를 배치하는 것이었습니다.

나는 이런 일이 일어나는 이유를 이해하는 것을 포함하여 Linux를 완전히 흡수하고 싶습니다. 미리 감사드립니다!

답변1

순서가 중요한지 여부는 옵션이 빼기 기호로 시작하는지 여부에 따라 다릅니다.

$ tar -cfvz casual.tar.gz snapback.txt bucket.txt
tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

$ tar cfvz casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt

이 비정상적인 동작은 다음 문서에 문서화되어 있습니다.매뉴얼 페이지

 Options to GNU tar can be given in three different styles.
 In traditional style
 ...
 Any command line words that remain after all options has
 been processed are treated as non-optional arguments: file or archive
 member names.
 ...
 tar cfv a.tar /etc
 ...
 In UNIX or short-option style, each option letter is prefixed with a
 single dash, as in other command line utilities.  If an option takes
 argument, the argument follows it, either as a separate command line
 word, or immediately following the option.
 ...
 tar -cvf a.tar /etc
 ...
 In GNU or long-option style, each option begins with two dashes and
 has a meaningful name
 ...
 tar --create --file a.tar --verbose /etc

tar, "테이프 아카이브"의 약어는 현재 규칙이 확정되기 전에 존재했으므로 다른 호환성 모드를 유지합니다.

따라서 "Linux를 흡수"하려면 몇 가지 입문 과정을 권장합니다.

  • 항상 매뉴얼 페이지를 읽으십시오
  • 때로는 구문의 작은 차이가 중요합니다.
    • 항목의 위치 - 대부분의 명령에는 옵션이 명령 이름 다음으로 먼저 와야 합니다.
    • 빼기 기호가 필요한지 여부(예: 시작 부분에 빼기 기호가 있는지 여부에 따라 다르게 tar작동함 )ps
    • 공백이 선택 사항인지, 필수인지, 아니면 없어야 하는지 여부( xargs -ifoo와 다름 xargs -i foo)
  • 어떤 일들은 당신이 기대한 대로 흘러가지 않는다

일반적인 방법으로 원하는 동작을 얻으려면 또는 바로 뒤에 출력 파일 이름을 입력 하십시오 f.-f

$ tar -cvzf casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt

또는:

$ tar -c -f casual.tar.gz -z -v snapback.txt bucket.txt

또는 덜 일반적이지만 읽기 쉬운 GNU 긴 스타일을 사용할 수 있습니다.

$ tar --create --verbose -gzip --file casual.tar.gz snapback.txt bucket.txt

답변2

-ftar 매뉴얼 페이지의 옵션을 살펴보면 다음과 같은 정보를 얻을 수 있습니다.

 -f, --file ARCHIVE
       use archive file or device ARCHIVE

이는 -f옵션 뒤의 다음 단어가 파일 이름이 됨을 의미합니다. 귀하의 예에서는 파일 이름으로 사용될 -f문자가 뒤에옵니다 .vz

그 후 가 호출될 때까지 각 인수를 압축할 입력으로 구문 분석합니다 vz. 이를 시도하면 압축할 이름의 파일이 tar없음을 확인한 다음 오류가 발생합니다.casual.tar.gz

따라서 나중에는 -f항상 생성하려는 파일 이름을 따라야 합니다.

관련 정보