今天不小心。

在 Windows 上過 samba 編輯 Linux/Un*x 上檔案的時候真要注意著。Windows/Dos 下文字檔案是用 CR LF 兩個字元 (ASCII 13 的 \r, 和 ASCII 10 的 \n) 代表分行;程式看到這兩個字元連在一起,就該知道要換行。在 Un*x 下,分行則只用 LF 來代表;程式只需要看到這一個字元就知道要換行。

當然,這兩個「字元」都是控制碼,也就是說一般的編輯器不會把它們顯示出來。

就因為編輯器一般不顯示它們,所以粗心沒注意的話,就會用到不正確的格式。在 Linux 開機的時候,各種系統工具程式會去讀組態檔案 (精確地說,我用的是 Debian 4.0r2)。這些系統工具的工作很單純,所以並不會去檢查組態檔的格式。如果遇到了用 CR LF 的 DOS 格式文字檔,系統的表現就會不正常。舉 /etc/hostname 為例,格式錯誤會影響 terminal 中等待登入的畫面,也可能會另外造成一些問題 (某些從 /etc/hostname 取得主機名稱的程式,不會去檢查文字檔案格式)。

在 vim 裡,用 set ff=unix 可以把文字檔改成 Un*x 用的格式 (set ff=dos 則改成 DOS 格式),執行後儲存就好了。

/etc 下的檔案其實很少有機會過 samba 從 Windows 來編輯。不過,若你剛好和我一樣 Windows Linux 雙修,又在搞一些像是 diskless workstation 的東西,那最好要小心這個問題啦。

鼠年快樂。

Posted by yungyuc at 07:25, 2 comments, 0 trackback.
Navigate
Add a trackback
Comments
Re: dos/unix
比較常見的應該是一些 script
如果包含 CRLF 的話就沒辦法正確執行

我會用 file 指令判斷一下是不是包含 CRLF
找到需要轉換的檔案後再用 dox2unix 轉換一下就可以了
letoh at 2008-02-07 16:27.
Re: dos/unix
我也是常遇到跑不動的 python script,不過沒注意到 /etc/hostname 也會出問題;平常真的不會在 Windows 下改 /etc 下面的檔案。其實這是很合理地。/etc/hostname 會出現 CR 應該是 marginal case,bootstrap 沒必要去檢查這件事情的。
yungyuc at 2008-02-09 00:42.
Add a comment

Your name. (required)

Your personal website. (optional)

Your email address. Will not show in page. (suggested, but optional)

Text format is "Plain Text".

Enter "sWAHN"
© hover year to navigate month: powered by django