1. 程式人生 > >每天一個linux命令:diff 命令

每天一個linux命令:diff 命令

diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每一個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 (patch),因為Linux系統中還有一個patch程式,可以根據diff的輸出將a.c的檔案內容更新為b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

1.命令格式:

diff[引數][檔案1或目錄1][檔案2或目錄2]

2.命令功能:

diff命令能比較單個檔案或者目錄內容。如果指定比較的是檔案,則只有當輸入為文字檔案時才有效。以逐行的方式,比較文字檔案的異同處。如果指定比較的是目錄的的時候,diff 命令會比較兩個目錄下名字相同的文字檔案。列出不同的二進位制檔案、公共子目錄和只在一個目錄出現的檔案。

3.命令引數:

指定要顯示多少行的文字。此引數必須與-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  顯示版本資訊。
  • -w或–ignore-all-space  忽略全部的空格字元。
  • -W或–width  在使用-y引數時,指定欄寬。
  • -x或–exclude  不比較選項中所指定的檔案或目錄。
  • -X或–exclude-from  您可以將檔案或目錄型別存成文字檔案,然後在=中指定此文字檔案。
  • -y或–side-by-side  以並列的方式顯示檔案的異同之處。
  • –help  顯示幫助。
  • –left-column  在使用-y引數時,若兩個檔案某一行內容相同,則僅在左側的欄位顯示該行內容。
  • –suppress-common-lines  在使用-y引數時,僅顯示不同之處。

4.使用例項:

例項1:比較兩個檔案
命令:

diff log2014.log log2013.log

輸出:

[[email protected] test3]# diff log2014.log log2013.log 
3c3
< 2014-03
---

> 2013-03
8c8
< 2013-07
---
> 2013-08
11,12d10
< 2013-11
< 2013-12

說明:

上面的“3c3”和“8c8”表示log2014.log和log20143log檔案在第3行和第8行內容有所不同;”11,12d10”表示第一個檔案比第二個檔案多了第11和12行。

diff 的normal 顯示格式有三種提示:
a - add
c - change
d - delete

例項2:並排格式輸出
命令:

diff log2013.log log2014.log  -y -W 50

輸出:

[[email protected] test3]# diff log2014.log log2013.log  -y -W 50
2013-01                 2013-01
2013-02                 2013-02
2014-03               | 2013-03
2013-04                 2013-04
2013-05                 2013-05
2013-06                 2013-06
2013-07                 2013-07
2013-07               | 2013-08
2013-09                 2013-09
2013-10                 2013-10
2013-11               <
2013-12               <
[[email protected] test3]# diff log2013.log log2014.log  -y -W 50
2013-01                 2013-01
2013-02                 2013-02
2013-03               | 2014-03
2013-04                 2013-04
2013-05                 2013-05
2013-06                 2013-06
2013-07                 2013-07
2013-08               | 2013-07
2013-09                 2013-09
2013-10                 2013-10
                      > 2013-11
                      > 2013-12

說明:

“|”表示前後2個檔案內容有不同
“<”表示後面檔案比前面檔案少了1行內容
“>”表示後面檔案比前面檔案多了1行內容

例項3:上下文輸出格式
命令:

diff log2013.log log2014.log  -c

輸出:

[[email protected] test3]# diff log2013.log log2014.log  -c
*** log2013.log 2012-12-07 16:36:26.000000000 +0800
--- log2014.log 2012-12-07 18:01:54.000000000 +0800
***************
*** 1,10 ****
  2013-01
  2013-02
! 2013-03
  2013-04
  2013-05
  2013-06
  2013-07
! 2013-08
  2013-09
  2013-10
--- 1,12 ----
  2013-01
  2013-02
! 2014-03
  2013-04
  2013-05
  2013-06
  2013-07
! 2013-07
  2013-09
  2013-10
+ 2013-11
+ 2013-12[[email protected] test3]# diff log2014.log log2013.log  -c
*** log2014.log 2012-12-07 18:01:54.000000000 +0800
--- log2013.log 2012-12-07 16:36:26.000000000 +0800
***************
*** 1,12 ****
  2013-01
  2013-02
! 2014-03
  2013-04
  2013-05
  2013-06
  2013-07
! 2013-07
  2013-09
  2013-10
- 2013-11
- 2013-12
--- 1,10 ----
  2013-01
  2013-02
! 2013-03
  2013-04
  2013-05
  2013-06
  2013-07
! 2013-08
  2013-09
  2013-10[[email protected] test3]#

說明:

這種方式在開頭兩行作了比較檔案的說明,這裡有三中特殊字元:
“+” 比較的檔案的後者比前著多一行
“-” 比較的檔案的後者比前著少一行
“!” 比較的檔案兩者有差別的行

例項4:統一格式輸出
命令:

diff log2014.log log2013.log  -u

輸出:

[[email protected] test3]# diff log2014.log log2013.log  -u
--- log2014.log 2012-12-07 18:01:54.000000000 +0800
+++ log2013.log 2012-12-07 16:36:26.000000000 +0800
@@ -1,12 +1,10 @@
 2013-01
 2013-02
-2014-03
+2013-03
 2013-04
 2013-05
 2013-06
 2013-07
-2013-07
+2013-08
 2013-09
 2013-10
-2013-11
-2013-12

說明:

它的第一部分,也是檔案的基本資訊:
— log2014.log 2012-12-07 18:01:54.000000000 +0800
+++ log2013.log 2012-12-07 16:36:26.000000000 +0800
“—”表示變動前的檔案,”+++”表示變動後的檔案。
第二部分,變動的位置用兩個@作為起首和結束。
   @@ -1,12 +1,10 @@
前面的”-1,12”分成三個部分:減號表示第一個檔案(即log2014.log),”1”表示第1行,”12”表示連續12行。合在一起,就表示下面是第一個檔案從第1行開始的連續12行。同樣的,”+1,10”表示變動後,成為第二個檔案從第1行開始的連續10行。

例項5:比較資料夾不同
命令:

diff  test3 test6

輸出:

[[email protected] test]# diff test3 test6
Only in test6: linklog.log
Only in test6: log2012.log
diff test3/log2013.log test6/log2013.log
1,10c1,3
< 2013-01
< 2013-02
< 2013-03
< 2013-04
< 2013-05
< 2013-06
< 2013-07
< 2013-08
< 2013-09
< 2013-10
---
> hostnamebaidu=baidu.com
> hostnamesina=sina.com
> hostnames=true
diff test3/log2014.log test6/log2014.log
1,12d0
< 2013-01
< 2013-02
< 2014-03
< 2013-04
< 2013-05
< 2013-06
< 2013-07
< 2013-07
< 2013-09
< 2013-10
< 2013-11
< 2013-12
Only in test6: log2015.log
Only in test6: log2016.log
Only in test6: log2017.log
[[email protected] test]# 

說明:

例項6:比較兩個檔案不同,並生產補丁
命令:

diff -ruN log2013.log log2014.log >patch.log

輸出:

[[email protected] test3]# diff -ruN log2013.log log2014.log >patch.log
[[email protected] test3]# ll
總計 12
-rw-r--r-- 2 root root  80 12-07 16:36 log2013.log
-rw-r--r-- 1 root root  96 12-07 18:01 log2014.log
-rw-r--r-- 1 root root 248 12-07 21:33 patch.log
[[email protected] test3]# cat patc.log
cat: patc.log: 沒有那個檔案或目錄
[[email protected] test3]# cat patch.log 
--- log2013.log 2012-12-07 16:36:26.000000000 +0800
+++ log2014.log 2012-12-07 18:01:54.000000000 +0800
@@ -1,10 +1,12 @@
 2013-01
 2013-02
-2013-03
+2014-03
 2013-04
 2013-05
 2013-06
 2013-07
-2013-08
+2013-07
 2013-09
 2013-10
+2013-11
+2013-12[[email protected] test3]#

說明:

例項7:打補丁
命令:

輸出:

[root@localhost test3]# cat log2013.log
2013-01
2013-02
2013-03
2013-04
2013-05
2013-06
2013-07
2013-08
2013-09
2013-10[root@localhost test3]# patch log2013.log patch.log 
patching file log2013.log
[root@localhost test3]# 
[root@localhost test3]# cat log2013.log 
2013-01
2013-02
2014-03
2013-04
2013-05
2013-06
2013-07
2013-07
2013-09
2013-10
2013-11
2013-12[root@localhost test3]#

說明:

相關推薦

每天一個linux命令diff 命令

diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每一個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 (patch),因為Linux系統中還有一個

每天一個linux命令(36)diff 命令

      diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每一個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 (patch),因為Linux系

每天一個linux命令(16)tail命令

nvi 系統 strong 維基百科 ron .com linux tro 聯系 版權聲明更新:2017-05-20博主:LuckyAlan聯系:[email protected]/* */聲明:吃水不忘挖井人,轉載請註明出處! 1 文章介紹 本文介紹了Linu

每天一個linux命令(11)cat命令

部分 ron linu mv命令 平臺 linux下 一個 介紹 inux 版權聲明更新:2017-05-15博主:LuckyAlan聯系:[email protected]/* */聲明:吃水不忘挖井人,轉載請註明出處! 1 文章介紹 本文介紹了Linux下面

每天一個linux命令(9)cp命令

系統 lin 維基 介紹 參考 vip 聲明 com 開發平臺 版權聲明更新:2017-05-13博主:LuckyAlan聯系:[email protected]/* */聲明:吃水不忘挖井人,轉載請註明出處! 1 文章介紹 本文介紹了Linux下面的cp命令。

每天一個linux命令(4)mkdir命令

指定位置 cnblogs 同名 parent --help pos uri 不存在 必須 linux mkdir 命令用來創建指定的名稱的目錄,要求創建目錄的用戶在當前目錄中具有寫權限,並且指定的目錄名不能是當前目錄中已有的目錄。 1.命令格式: mkdir [選

每天一個linux命令(5)rm 命令

每天 幫助信息 rbo 總計 com 刪除 強行 高度 linux中 昨天學習了創建文件和目錄的命令mkdir ,今天學習一下linux中刪除文件和目錄的命令: rm命令。rm是常用的命令,該命令的功能為刪除一個目錄中的一個或多個文件或目錄,它也可以將某個目錄及其下的所有文

每天一個linux命令(13)less 命令

文件中 參數 使用 ech height 查看進程 str idt 目錄 less 工具也是對文件或其它輸出進行分頁顯示的工具,應該說是linux正統查看文件內容的工具,功能極其強大。less 的用法比起 more 更加的有彈性。在 more 的時候,我們並沒有辦法向前面翻

每天一個linux命令(18)locate 命令

一次 clu ado 模式 pda -o gic style art locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立一個包括系統內所有檔案名稱及路徑的數據庫,之後當尋找時就只需查詢這個數據庫,而不必實際深入檔案系統之中了。在一般的 dis

每天一個linux命令(1)scp 命令

filename use des 本地文件 lin oca www tro 服務器 scp命令主要用於兩個服務器之間文件的傳輸。 1、從服務器下載文件 scp [email protected]:/path/filename /tmp/local_destin

(轉)每天一個linux命令(9)touch 命令

cal log bsp 參考 一個 ati linux命令 包括 ces linux的touch命令不常用,一般在使用make的時候可能會用到,用來修改文件時間戳,或者新建一個不存在的文件。 1 基本使用 1.命令格式: touch [選項]... 文件... 2.

每天一個linux命令(50)crontab命令

指定 檢查 var 編輯 特殊字符 post rip 標準輸入 運行時間 前一天學習了 at 命令是針對僅運行一次的任務,循環運行的例行性計劃任務,linux系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作

每天一個linux命令(文件操作)【轉載】find命令之xargs

溢出 系統性能 問題 ameba pri 幾分鐘 body 只有一個 獲取參數   在使用 find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之

每天一個linux命令(文件上傳下載文件操作)【轉載】tar命令

設備 mil second compress bsp 新的 body 創建 命令格式   通過SSH訪問服務器,難免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。   tar

每天一個linux命令(文件上傳下載文件操作)【轉載】gzip命令

明顯 相關信息 users 版本信息 通過 inux 備份 示例 strong   減少文件大小有兩個明顯的好處,一是可以減少存儲空間,二是通過網絡傳輸文件時,可以減少傳輸的時間。gzip是在Linux系統中經常使用的一個對文件進行壓縮和解壓縮的命令,既方便又好用。gzip

每天一個linux命令(17)whereis 命令

數據 幫助 參數 執行 localhost root 一個數據庫 usr 位置 whereis命令只能用於程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。 和find相比,whereis查找的

每天一個linux命令(16)which命令

哪裏 使用實例 找文件 為什麽 ID 文件 use image sbin 我們經常在linux要查找某個文件,但不知道放在哪裏了,可以使用下面的一些命令來搜索: which 查看可執行文件的位置。 whereis 查看文件的位置。

每天一個linux命令(19)find 命令概覽

PE 根據 根目錄 配置 它的 UC sta deploy sort Linux下find命令在目錄結構中搜索文件,並執行指定的操作。Linux下find命令提供了相當多的查找條件,功能很強大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來

每天一個linux命令(21)chgrp,chown,chmod

chgrp group 分別是 文件 累加 Owner 改變 最簡 mod 這三個命令都是改變文件屬性與權限的,就放一起寫了 charp:改變文件所屬用戶組 chown:改變文件所屬者 chmod:改變文件的權限 一個文件對於owner,group ,others有不同的權

每天一個linux命令(22)tar命令

soft 小文件 sof linu gunzip 算法 rect 過程 提取文件 通過SSH訪問服務器,難免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。 tar命令可以為l