임시 파일 없이 ssh에서 .tar 아카이브를 어떻게 보낼 수 있나요? tar의 "-f -" 옵션은 무엇입니까?

임시 파일 없이 ssh에서 .tar 아카이브를 어떻게 보낼 수 있나요? tar의 "-f -" 옵션은 무엇입니까?

임시 파일을 생성하지 않고 SSH를 통해 tar 명령을 사용하여 아카이브를 압축 및 압축 해제하려면 어떻게 해야 합니까?

예가 있습니다:

스크립트클라이언트.sh

#!/bin/bash
tar -cf - myFile.txt | ssh $IP_SERVER ./ScriptServer.sh 

스크립트서버.sh

#!/bin/bash
tar -x -C ~/backups/ -f -

이 코드 조각은 내 것이 아니며 tar 명령에서 이 코드가 어떻게 작동하는지 이해할 수 없으며 -f -매뉴얼 페이지는 쓸모가 없습니다.

답변1

를 사용하면 -f archive.tar아카이브 tar -c에 쓰고 tar -x아카이브에서 추출합니다. -f -"stdout에 쓰기"(생성하는 경우) 또는 "stdin에서 읽기"(추출하는 경우)를 의미하는 특수 구문입니다.

이를 통해 파이프에 사용할 수 있습니다 tar. 클라이언트 명령 tarssh. 원격 측에서 SSH 서버가 실행 ./ScriptServer.sh되고 들어오는 스트림을 표준 입력으로 푸시합니다. tar -f -스크립트 내부에서 이 스트림을 읽습니다.

(적어도 내가 읽은 매뉴얼에는) -f -문서화되어 있지 않은 것이 맞습니다 . 도구가 man 1 tar없으면 어쨌든 stdout이나 stdin을 사용해야 합니다. stdout이나 stdin을 명시적으로 가리키는 특별한 "파일 이름"을 -f지원하는 다른 도구는 거의 없습니다 . 나는 in -의 지원이 단지 이 준표준을 준수하는 것이라고 생각합니다.-f -tar

답변2

tar 명령이 어떻게 작동하는지 이해가 안 되고 -f -매뉴얼 페이지도 쓸모가 없습니다.

어느 man페이지를 보고 계시나요? 시스템의 명령줄에서 가져온 것입니까 man tar아니면 다른 것입니까?이 온라인 매뉴얼 페이지를 확인하는 중입니다.tar-또한이것처럼—다음을 보여줍니다.

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

따라서 는 -f특정 파일의 입력을 읽습니다… 그러면 ? 다음은 무엇 -입니까 -f? 확실히 파일이 아닙니다. 이는 기본적으로 명령 stdin(이 경우 표준 입력) 에서 데이터를 가져오도록 지시하는 특수 문자입니다 . 그리고 이는 SSH를 통해 파이프를 통해 대상의 수신 스크립트로 stdin출력을 파이프하는 첫 번째 스크립트에서 나옵니다 .|

답변3

다음은 수신자 측에서 스크립트를 생성하지 않은 예입니다. 압축되지 않은 흐름을 통해 로컬에서 원격 Unix로 파일을 전송하려면 다음을 수행하십시오.

LocalDir="./"
LocalFile="myFile.txt"
RemoteIP="192.168.1.1"
RemoteDir="~/backups/"

cd "$LocalDir"
tar -cf - "$LocalFile" | ssh $RemoteIP "cd '$RemoteDir'; tar -xf -"

POSIX Tar는 파일을 압축하지 않고 연결만 합니다. 또한 이런 방식으로 가벼운 압축을 추가할 수도 있습니다.

tar -cf - "$LocalFile" | gzip -1 | \
   ssh $RemoteIP "cd '$RemoteDir'; gzip -cd | tar -xf -"

전송 시간이 길어지므로 깊은 압축을 추가하지 않는 것이 좋습니다.

하나의 라이너를 원한다면 다음과 같습니다.

tar -cf - myFile.txt | gzip -1 | ssh 192.168.1.1 "cd backups; gzip -cd | tar -xf -"

RHEL6에서 Solaris11로, 그리고 역방향으로 Solaris에서 RHEL로 파일을 전송하는 테스트를 거쳤습니다.

답변4

첫 번째 명령 "tar -cf -"는 일반 파일 대신 표준 출력(stdout)으로 tar를 생성합니다.

이는 ssh를 통해 stdin으로 전송되며 서버 스크립트에서 그대로 사용됩니다.

또한보십시오 :https://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/그리고https://www.linuxjournal.com/content/working-stdin-and-stdout

관련 정보