Ubuntu
當通過 ssh 檢索二進製文件時,是什麼導致 r 在 n 之前插入,我該如何規避它?
我繼承了一個需要升級到 20.04 的 Ubuntu 14.04 生產伺服器,我希望首先嘗試一個沙盒版本,因此我想通過網路從 MacOS 或另一個 14.04 虛擬機實例中獲取文件系統
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
無法使用它。我知道這可能是由於驅動程序將換行符轉換為列印所需的字元,但我看不出這是在哪裡觸發的。我該怎麼做才能獲得正確的二進制轉儲文件?
正是
ONLCR
.c_oflag
termios 設置導致遠端機器上分配的偽終端將\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)確實遵循該標準,因此在系統之間移動文本文件時,您有時手頭有翻譯任務。