SSH를 통해 바이너리 파일을 검색할 때 \n 앞에 \r이 삽입되는 이유는 무엇이며 이를 우회하는 방법은 무엇입니까?

SSH를 통해 바이너리 파일을 검색할 때 \n 앞에 \r이 삽입되는 이유는 무엇이며 이를 우회하는 방법은 무엇입니까?

Ubuntu 14.04 프로덕션 서버를 상속받았고 20.04로 업그레이드해야 하며 먼저 샌드박스 버전을 실험해 보고 싶기 때문에 MacOS 또는 다른 14.04 virtualbox 인스턴스에서 네트워크를 dump통해 파일 시스템을 연결하려고 합니다. restore이 질문의 이전 버전은 다음 위치에 있습니다.https://askubuntu.com/q/1314747/963.

서버는 내 컴퓨터를 "볼" 수 없으므로 쉽게 덤프를 실행하고 결과를 내 컴퓨터에 원격으로 푸시할 수 없지만 덤프를 실행하려면 내 컴퓨터에서 ssh를 호출해야 합니다.

ssh -t me@there "echo MYPASSWORD | sudo -S dump -y -f - /boot 2>/dev/null " > boot.dump 

\r문제는 이 명령을 실행하면 문자 앞에 많은 문자가 삽입되어 \n덤프 파일이 손상되어 restore사용할 수 없게 된다는 점입니다. 나는 이것이 아마도 드라이버가 줄 바꿈을 인쇄에 필요한 문자로 변환하기 때문이라는 것을 알고 있지만 이것이 어디서 발생하는지 모르겠습니다.

올바른 바이너리 덤프 파일을 얻으려면 어떻게 해야 합니까?

답변1

ONLCR .c_oflag이는 원격 시스템에 할당된 의사 터미널 \n(ssh 옵션으로 인해) 에 의해 줄 바꿈()이 캐리지 리턴/줄 바꿈()으로 변환되도록 하는 termios 설정 입니다 .\r\nssh-t

끄려면 다음 명령을 사용하십시오 stty -onlcr.

ssh -t me@there 'stty -onlcr; ...' > output

답변2

공식적인 ASCII 줄 끝은 다음과 같습니다 (즉, C에서는 CR LF줄의 시작 부분으로 돌아가서 다음 줄로 이동 ). \r\n각 줄을 1바이트로 줄이기 위해(메모리가 KiB로 측정되고 디스크가 수백 MiB인 경우 매우 중요함) Unix는 \n줄의 끝만 표시합니다. 일부 시스템(특히 Microsoft)했다표준을 따르므로 시스템 간에 텍스트 파일을 이동할 때 때로는 번역 작업을 수행해야 하는 경우가 있습니다.

관련 정보