windows 與unix檔案格式之謎

2021-07-11 18:58:24 字數 1848 閱讀 9270

原文:

(1)問題提出

我們可能會遇到過這樣一些困惑:

a, 如何檢視乙個檔案或資料流的二進位制格式(以十六進製制格式顯示)?

b,為什麼在 windows下編輯的 shell 指令碼在 unix下不能執行?為什麼在 windows下編輯的 c 原始檔在有些 gcc 編譯器下不能編譯?

c,為什麼我在 vi 等編輯器下開啟乙個文字檔案會包含 ^m,如何把它去掉?為什麼我在 windows 上用記事本開啟 unix上的檔案,檔案都不換行?

(2)分析與方案

a,如何檢視乙個檔案的二進位制格式(以十六進製制格式顯示)?

方法一:在 utraedit 使用 ctrl + h 切換到十六進製制編輯模式。** 注意 ** :此方法一有缺陷,它會將行末的單個"換行符"顯示成 "回車" + "換行" 兩個字元。

方法二:使用檔案或流的二進位制檢視工具 fbin。

b,為什麼在 windows下編輯的 shell 指令碼在 unix下不能執行?為什麼在 windows下編輯的 c 原始檔在有些 gcc 編譯器下不能編譯?

原因分析:unix 的 shell 指令碼不能識別 "回車符" (即:cr,'\r'),windows 檔案格式換行時,總是以 "回車" + "換行" ,導致 unix 下的 shell 無法正常解釋。解決方法:就是把 windows 格式的中的 "回車" 符刪除。

方法一:使用 vi 開啟原始檔,把 '\r\n' 替換成 '\n' ;** 缺點 ** :不適合大量檔案的批量作業。

方法二:使用 utraedit 把 windows 格式的檔案轉換成 unix 格式。檔案-->轉換-->unix轉dos;** 缺點 ** :不適合大量檔案的批量作業。

方法三:unix 下的 dos2unix 命令,如 $ dos2unix -k xx.c;** 缺點 ** :此方法有一致命缺陷,它會改變原來的檔案屬性,如乙個可執行 shell 指令碼的可執行屬性及其它屬性,轉換後都將會丟掉;** 優點 ** :適合大量普通檔案本檔案的批量作業。

方法四: win2unix (windows,unix 均可使用),功能類似 dos2unix,如 win2unx xx.c;** 優點** :克服了 dos2unix 的所有缺點,它能保留原始檔的任何屬性。還適合大量檔案的批量作業。

c,為什麼我在vi 等編器下開啟乙個文字檔案會包含^m,如何把它去掉? 為什麼我在windows上用記事本開啟unix上的檔案,檔案都不換行?

原因分析:要解決這個問題,必先弄清 unix 與 windows 文字檔案的差異。如下:

1) 磁碟中 windows 文字檔案總是以 "回車" + "換行"的形式進行換行的。

2) 磁碟中 unix 格式的文字檔案,總是以"換行符"(即:lf,'\n') 換行,而非 "回車換行符"。(unix 規定:unix 文字檔案儲存到磁碟時,總是自動把 "回車換行符" 轉換成 "回車符" 儲存,輸出到終端時由終端自動將將 "回車符" 轉換成 "回車換行符" 輸出) 

** 結論 1 **:這樣在 windows 的記事本中開啟 unix 格式的檔案時,因為檔案中沒有 '\r',所以無法正常顯示換行,結果就會把所有的內容顯示在同一行中。

** 結論 2 **:utraedit 等工具會自動檢測檔案中是否包含'\r',當檢查行末缺少'\r'時,一般它會提示要求進行unix 到windows 格式的轉換(相信都遇到這個提示資訊)。

** 結論 3 **:utraedit 和 vi 等工具,在儲存檔案時會自動依照檔案原來的格式進行儲存。即:如開啟的如是 windows 格式它會把檔案依然按 windows 格式儲存(不進行自動轉換);如開啟的如是unix 格式它會把檔案依然按 unix 格式儲存(不進行自動轉換)。

UNIX目錄與檔案

檔案的相關資訊 檔案有哪些相關資訊呢?使用者關心的 檔案型別 檔名 檔案大小 檔案目錄 檔案所有者 檔案訪問修改日期。這些資訊儲存在struct stat結構中 sys stat.h 系統關心的 檔案狀態 檔案的儲存資訊。系統相關的資訊大部分在inode,vnode,檔案表中。獲取stat結構的ap...

Linux文字檔案與Windows下的格式轉換

常常有時候在linux下編寫的程式,拷貝到windows下,就會出現無法執行的狀況。明明在linux下成功編譯且沒任何問題的源 為什麼會到windows下就出現n多個編譯錯誤呢?其實很簡單,這個原因還是windows自己造成的。windows不遵守標準自搞一套標準的行為在業界已是無人不知的。在dos...

UNIX檔案安全與許可權

total 74434 表示該目錄中所有檔案所佔的空間 2 表示該檔案硬鏈結的數目 39921 表 示該檔案的長度,用位元組表示,不是k位元組 rwxrwxr x 代表該檔案或目錄 的讀寫執行許可權,第一位表示該檔案型別 7種 d 目錄 l 符號鏈結 指向另乙個檔案 s 套 接字檔案 b 塊裝置檔案...