總述
Linux diff命令用於比較文件的差異。diff以逐行的方式,比較文本文件的異同處。特別是比較兩個版本不同的文件,如果指定要比較目錄,則diff會比較目錄中相同文件名的文件,但不會比較其中子目錄。diff命令可以同時輸出成補丁文件,並且Linux中還有一個patch命令,可以依據diff生成的.patch補丁文件,將a.c與b.c兩個文件差異部分更新到需要修改的文件。此外diff在SVN 、GIT、CVS等版本控制工具中也是不可獲取的一部分。
下面我就詳細描述一下diff命令的使用:
作者:良知猶存
轉載授權以及圍觀:歡迎添加微信公眾號:Conscience_Remains
1 指令格式
在Linux 中,我們可以使用 diff --help 查看詳細指導(篇幅有限只截圖了一部分作為展示)
常用命令格式:
diff[參數][文件1或目錄1][文件2或目錄2]
常用命令展示:
1.Linux內核diff自定義的補丁
這個是我經常使用的命令,用來比較生成我修改后的代碼的補丁包,最后用patch命令打補丁到需要使用的內核源碼中去
2.在git中也會有diff可以查看兩次版本的差異
其中diff之后的版本號通過git log 打印出來進行比較
2 命令參數詳細解釋
-<行數>:指定要顯示多少行的文本。此參數必須與-c或-u參數一並使用;
-a或--text:diff預設只會逐行比較文本文件;
-b或--ignore-space-change:不檢查空格字符的不同;
-B或--ignore-blank-lines:不檢查空白行;
-c:顯示全部內容,並標出不同之處;
-C<行數>或--context<行數>:與執行“-c-<行數>”指令相同;
-d或——minimal:使用不同的演算法,以小的單位來做比較;
-D<巨集名稱>或ifdef<巨集名稱>:此參數的輸出格式可用於前置處理器巨集;
-e或——ed:此參數的輸出格式可用於ed的script文件;
-f或-forward-ed:輸出的格式類似ed的script文件,但按照原來文件的順序來顯示不同處;
-H或--speed-large-files:比較大文件時,可加快速度;
-l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若兩個文件在某幾行有所不同,而這幾行同時都包含了選項中指定的字符或字符串,則不顯示這兩個文件的差異;
-i或--ignore-case:不檢查大小寫的不同;
-l或——paginate:將結果交由pr程序來分頁;
-n或——rcs:將比較結果以RCS的格式來顯示;
-N或--new-file:在比較目錄時,若文件A僅出現在某個目錄中,預設會顯示:Only in目錄,文件A 若使用-N參數,則diff會將文件A 與一個空白的文件比較;
-p:若比較的文件為C語言的程序碼文件時,顯示差異所在的函數名稱;
-P或--unidirectional-new-file:與-N類似,但只有當第二個目錄包含了第一個目錄所沒有的文件時,才會將這個文件與空白的文件做比較;
-q或--brief:僅顯示有無差異,不顯示詳細的信息;
-r或——recursive:比較子目錄中的文件;
-s或--report-identical-files:若沒有發現任何差異,仍然顯示信息;
-S<文件>或--starting-file<文件>:在比較目錄時,從指定的文件開始比較;
-t或--expand-tabs:在輸出時,將tab字符展開;
-T或--initial-tab:在每行前面加上tab字符以便對齊;
-u,-U<列數>或--unified=<列數>:以合並的方式來顯示文件內容的不同;
-v或——version:顯示版本信息;
3 diff輸出的文件解釋
說完了diff命令的操作,我們再來看看diff命令輸出文件,因為有時候我們通過輸出信息自己比對文件的差異結論。
1.diff直接輸出到終端顯示
說明:
-
"<"表示后面文件比前面文件少了1行內容
-
">"表示后面文件比前面文件多了1行內容
2.diff直接輸出為patch文件查看
如圖所示,我打開了我對比內核代碼之后生成的.patch文件為例:
里面有每個文件都會標注
第一部分,也是文件的基本信息:
--- linux-4.19-rc3_lyn/arch/arm/boot/compressed/.ashldi3.o.cmd 1970-01-01 08:00:00.000000000 +0800
+++ linux-4.19-rc3/arch/arm/boot/compressed/.ashldi3.o.cmd 2020-08-21 10:54:52.774658500 +0800
"---"表示變動前的文件,"+++"表示變動后的文件。
第二部分,變動的位置用兩個@作為起首和結束。
@@ -0,0 +1,80 @@
前面的"-0,0"分成三個部分:減號表示第一個文件(即linux-4.19-rc3_lyn/arch/arm/boot/compressed/.ashldi3.o.cmd),"0"表示第0行,后一個"0"表示連續0行;同樣的,"+1,10",加號表示第二個文件,就表示下面是第二個文件從第1行開始的連續80行。
通過這些信息我們就可以看懂對比之后文件的差異處了,是不是很容易呢。
這就是我分享的linux下diff命令,如果大家有什么更好的思路,歡迎分享交流哈。
更多分享,掃碼關注我