Ubuntu

當通過 ssh 檢索二進製文件時,是什麼導致 r 在 n 之前插入,我該如何規避它?

  • September 13, 2021

我繼承了一個需要升級到 20.04 的 Ubuntu 14.04 生產伺服器,我希望首先嘗試一個沙盒版本,因此我想通過網路從 MacOS 或另一個 14.04 虛擬機實例中獲取文件系統dumprestore此問題的早期版本位於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無法使用它。我知道這可能是由於驅動程序將換行符轉換為列印所需的字元,但我看不出這是在哪裡觸發的。

我該怎麼做才能獲得正確的二進制轉儲文件?

正是ONLCR .c_oflagtermios 設置導致遠端機器上分配的偽終端將\n換行符 ( ) 轉換為輸入/換行符 ( ) (由於 ssh 的選項)。\r\n``ssh``-t

關閉它stty -onlcr

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

官方的 ASCII 行結尾是CR LF(即,返回行開頭並轉到下一行,\r\n用 C-ish 語言)。為了為每一行減少一個字節(當您的記憶體以 KiB 為單位並且磁碟為幾百 MiB 時非常重要),Unix 僅用於\n標記行結束。某些系統(尤其是 Microsoft)確實遵循該標準,因此在系統之間移動文本文件時,您有時手頭有翻譯任務。

引用自:https://unix.stackexchange.com/questions/633543