초보자처럼 들리셨다면 죄송합니다. 파이프가 스로틀과 어떻게 연동되는지 알아보기 위해 스로틀 매뉴얼 페이지를 확인하고 있었습니다. 그래서 매뉴얼 페이지 예제를 확인하면서 아래 명령에 "-"를 남겨 두었습니다. 예제 섹션의 매뉴얼 페이지에서 첫 번째 예제는 다음과 같습니다.
To limit the bandwidth of a tar back-up to a remote server to 1 Mbit/s, type:
$ tar czf - . | throttle -m 1 | ssh host 'tar xzf - -C /bak'
이제 여기서는 czf 뒤의 "-"와 xzf 뒤의 "-"를 이해하고 싶습니다. 질문이 명확하다면 전체 명령을 기꺼이 이해해 드리겠습니다.
미리 감사드립니다.
답변1
명령을 여러 부분으로 나누어 하나씩 설명하겠습니다.
tar czf - .
이 명령은 tar
현재 디렉터리에서 아카이브를 생성하고 -f
인수로 지정된 파일에 출력을 저장하도록 지시합니다. 여기서 파일은 -
표준 출력을 의미합니다.
역할 |
은 왼쪽 명령의 표준 출력을 가져와 오른쪽 명령에 표준 입력으로 전달합니다.
이 경우 출력은 tar
입력으로 전달된 throttle -m 1
다음 마지막 명령에 출력이 제공됩니다.
ssh host 'tar xzf - -C /bak'
출력은 SSH를 통해 파이프로 SSH를 사용하여 tar
에서 실행되는 명령 으로 전송됩니다 . host
이 매개변수는 표준 입력에서 아카이브를 읽고 추출하는 것을 xzf -
의미합니다 . tar
추출하기 전에 디렉토리를 tar
변경하십시오 /bak
.
요약하자면, 아카이브를 생성할 때 -f -
tar는 결과를 표준 출력(stdout)으로 출력한다는 의미입니다.
아카이브를 추출할 때 -f -
tar는 표준 입력(stdin)에서 입력 아카이브를 읽는 것을 의미합니다.
답변2
살펴볼 관련 부분은 실제로입니다 -f -
( -
질문의 인수는 -f
파일 이름을 지정하는 옵션의 인수입니다)
이는 파일 읽기/쓰기를 의미하며 -
, 이는 파일 이름에 대한 일반적인 특수 사례입니다. -
이 경우 일반적으로 stdin(읽기 시) 또는 stdout(쓰기 시)을 나타냅니다.
즉, 첫 번째 tar
프로세스는 아카이브를 stdout에 쓰고 이를 로 파이프한 throttle
다음 tar
stdin에서 아카이브를 읽는 두 번째 프로세스로 파이프합니다.