SCP를 통해 원격 시스템에서 파일의 일부를 전송하는 방법은 무엇입니까?

SCP를 통해 원격 시스템에서 파일의 일부를 전송하는 방법은 무엇입니까?

반복적으로 업데이트되는 로그 파일을 얻으려고 합니다. 파일을 업데이트하고 싶지만 SCP를 통해 원격 시스템에서 전체 파일을 계속해서 다운로드하고 싶지 않습니다.

최소한의 네트워크 사용으로 이를 달성하는 방법에 대한 아이디어가 있습니까?

답변1

SCP만으로는 해결책이 없습니다. 이 프로토콜은 부분 전송이 아닌 전체 파일 복사만 허용합니다.

SCP 이상의 것에 집중하고 싶다면 몇 가지 옵션이 있습니다:

  1. 다음 명령을 사용하여 로그 파일의 새 줄만 포함하는 파일을 생성하고 파일을 전송합니다.

    ssh user@host tail -n +`wc -l /local/file.log` /remote/file.log >> /local/file.log
    

    그러면 로컬 파일의 줄 수를 계산하고 SSH 연결을 통해 해당 줄 번호 뒤의 모든 줄을 인쇄한 다음 셸 리디렉션을 통해 로컬 파일에 추가하도록 원격 시스템에 지시합니다. 이 방법은 일부 셸에서는 약간 까다로울 수 있고 약간 빠를 수 있습니다(파일이 복사되는 동안 파일에 도착하는 쓰기는 결국 부분적으로만 전송되고 다음 호출에서는 완전히 전송되지 않을 수 있습니다).

  2. rsync옵션과 함께 사용됩니다 --checksum. 이를 통해 데이터의 증분 전송이 가능하며, 사용되는 롤링 해시 체크섬으로 인해 절대 최소량의 데이터가 전송되어야 합니다. 첫 번째 방법과 달리 이 방법은 전혀 빠르지는 않지만 양쪽 끝에 rsync가 있어야 합니다.

  3. 바이트 범위 요청을 지원하는 (보안) 웹 서버를 설정하십시오. 그런 다음 HTTP HEAD 요청을 사용하여 새 파일 크기를 가져오고(선택적으로 파일이 변경되지 않은 경우 If-Modified-Since 헤더를 사용하여 무작업으로 변환) 복사본이 끝나는 위치에서 확장되는 범위를 요청할 수 있습니다. HEAD 요청된 보고서의 전체 길이입니다. 여기에는 대부분의 설정이 포함되며 일부 회선을 전송할 수 있지만 데이터 손실이 없음을 보장합니다.

  4. 로그 파일을 생성하는 애플리케이션에 대한 원격 로깅을 설정하고 로컬 시스템을 로그 호스트로 설정하는 방법을 찾으십시오. 물론 이는 로컬 시스템이 항상 켜져 있는 경우에만 작동하지만, 업데이트하기 위해 수동으로 작업을 수행할 필요 없이 최신 버전의 로그를 보유하도록 보장합니다.

관련 정보