今天用WinSCP修改了管理機linux系統下的一個檔案,結果重啟以後就連不上管理機了。。。無奈用DEBUG口進去,ifconfig一看,咋,我改好的網址都沒有了,重啟網路服務也沒有用。
於是cat下修改的interface檔案,沒問題啊,都改成功了啊,有圖為證:
沒辦法,要不我再把IP改回去試試?說幹就幹,直接vi編輯器開動~~~一開啟驚呆了,哪來的這麼多的^M啊。每行後面標配。
網上搜了一下,原來Window系統中用/r/n來表示換行,linux中用/n來表示換行,Windows的文字檔,直接拿到linux中使用可能會會出錯,因為多出了“/r”字元,這就是我們看到的^M。那要如何去掉呢,總不能一行行刪吧。
網上一搜,給出的是這五種解決方案:
方法1: 在命令模式下:輸入:%s/^M//g 然後,斷行符號即可替換 注,其中”^M”的輸入,分別是“Ctrl+v”、“Ctrl+M”鍵產生的
方法2: 使用vi開啟文字檔
vi dos.txt
命令模式下輸入
:set fileformat=unix
:w 方法3: 使用sed 工具
sed ’s/^M//’ filename > tmp_filename 方法4: 既然window下的斷行符號符多了‘\r’,那麼當然通過刪除‘\r’ ,也可以實現:
tr -d ‘\r’ 方法5:(最常用的方法)
在終端下敲命令:
$ dos2unix filename
直接轉換成unix格式,就OK了。~
好吧,一個個實踐看看。
首先是方法一,直接用Regex刪掉每行^M,先vi interface,再Esc,然後shift+:進入命令列模式,準備輸入%s/^M//g,人家強調了是用Ctrl+v,Ctrl+M產生^M,但是我咋就是按不出來呢。無奈直接輸入^M,果然刪不掉。然後不死心的我開啟了自己的linux系統,哎呦,果然Ctrl+v,Ctrl+M就能產生^M並順利刪除每行的^M。管理機是裁剪過的linux系統,不知道是不是因為這個原因才不行呢。
然後是方法二,在我自己linux系統中成功實施,但是在管理機中還是不行,pass!
方法三,pass;
方法四,pass;
直接實施方法五,傻乎乎的就直接在命令列模式下輸入$ dos2unix interface,納尼,為什麼說$ Command not found?
繼續換我自己linux系統也不行,為啥子,人家作者說了是他的最愛啊。後來我終於明白,我應該這樣輸dos2unix interface,去掉那該死的$
原因:
原文作者是以普通使用者登入,$就代表普通使用者,等待你輸入指令,就和你用root登入的#一樣一樣的。
啪啪打臉。以前以user登入後直接切換到root,真沒注意過這點區別,我流下了悔恨的淚水。
最後,由於經常需要改管理機IP,WinSCP使用又很方便,但總不能每次改完再輸一次dos2unix interface這個指令吧。鑒於每次改完IP都需要重啟,那就每次重啟後都自動執行一遍這個指令好了,於是在rc.local最末尾添加如下指令:dos2unix /etc/network/interface,這樣再也不怕修改管理機IP了。
總結:多看多思考多總結。