背景

創新互聯-專業網站定制、快速模板網站建設、高性價比宜黃網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式宜黃網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋宜黃地區。費用合理售后完善,十多年實體公司更值得信賴。
在Linux系統環境的工作過程中,經常遇到需要對比文件差異的情況,此時,使用Linux提供的diff工具可以方便的發現文件不同版本之間差異,從而快速排除解決問題。
Windows端有強大文件對比工具BeyondCompare。
patch 命令可以將diff命令的輸出應用到原始的對比文件中,將新版本的更新應用到原始的文件中。
命令
diff [option] [file1] [file2]
patch [option] [file1] [file_differ]
測試環境
WSL: Linux PERSONALPC 4.4.0-19041-Microsoft #488-Microsoft Mon Sep 01 13:43:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux
測試過程
目前在各 Linux 發行版中, 比較著名的軟件包管理系統有如下兩種:
RPM: Red Hat/Fedora,Suse,Mandriva 使用的是這類管理系統。
DPKG: Debian,ubuntu使用的是這類管理系統。
UOS是基于Debian發行版本,因此UOS使用的是DPKG包管理機制。
Redhat的rpm軟件包管理相信大家都很熟悉,這里主要講UOS系統的軟件升級的源配置,在/etc/apt/sources.list。文件內容的格式如下:
deb [by-hash=force] eagle main contrib non-free
其中,第一列描述了文件類型,是deb類型還是deb-src類型,deb是已經編譯好的二進制軟件包,deb-src是源碼包,第二列是使用的鏡像地址,apt可以使用多種類型的鏡像地址,如:http、ftp、file等。其中,eagle 是系統的codename。 main non-free contrib是源下面不同的目錄,每個目錄放一類軟件,即不同的子倉庫。
在每次修改sources.list文件后,都需要運行apt-get update命令更新源列表系統中所有packages的信息都在 /var/lib/dpkg/目錄下, 其子目錄 /var/lib/dpkg/info 用于保存各個軟件包的配置文件列表,/var/lib/dpkg/available文件的內容是軟件包的描述信息, 該軟件包括當前系統所使用的深度安裝源中的所有軟件包,其中包括當前系統中已安裝的和未安裝的軟件包。/var/cache/apt/archives目錄是在用 apt-get install 安裝軟件包時,軟件包的臨時存放路徑,而/etc/apt/sources.list 存放的是軟件源站點, 當執行 apt-get install package-name 時,軟件包就去這些站點下載軟件包到本地并執行安裝。
紅帽系統與UOS的基本操作命令基本相同,屬于Linux基本操作命令。二者命令的主要區別在軟件包的管理上,下面就針對二者對軟件包的管理命令進行對比。
表1 rpm與dpkg軟件包管理常用命令對比
表2 yum與apt軟件包管理常用命令對比
注:yumdownloader命令需要安裝yum-utils*
在linux系統中有兩種方式可以實現兩個文件的對比
第一傳統的命令行方式 應用diff命令
diff的功能為逐行比較兩個文本文件,列出其不同之處。它對給出的文件進行系統的檢查,并顯示出兩個文件中所有不同的行,不要求事先對文件進行排序。
diff
語法
diff
[options]
file1
file2
命令字
參數
待對比文件1
待對比文件2
[options]的主要參數
-a:將所有文件當作文本文件來處理。
-b或–ignore-space-change
忽略空格造成的不同。
-B或–ignore-blank-lines
忽略空行造成的不同。
-c:使用綱要輸出格式。
-H:利用試探法加速對大文件的搜索。
-I:忽略大小寫的變化。
-n
–rcs:輸出RCS格式。
-N或–new-file
在比較目錄時,若文件A僅出現在某個目錄中,會顯示:Only
in目錄;文件A若使用-N參數,則diff會將文件A與一個空白的文件比較。
-r或–recursive
比較子目錄中的文件。
-u,-U列數或–unified=列數
以合并的方式來顯示文件內容的不同。
第二種方式是圖形界面交互方式
該方式要安裝第三方工具軟件比如Kompare軟件包,這個工具可以讓用戶可以查看文件之間的差異,并且合并文件。
如果想對兩個有序的文件進行比較,可以使用comm命令。
語法:comm [- 123 ] file1 file2
說明:該命令是對兩個已經排好序的文件進行比較。其中file1和file2是已排序的文件。comm讀取這兩個文件,然后生成三列輸出:僅在file1中出現的行;僅在file2中出現的行;在兩個文件中都存在的行。如果文件名用“- ”,則表示從標準輸入讀取。
comm -1 不顯示只出現在第一個文件的行。
comm -2 不顯示只出現在第二個文件的行。
comm -3 不顯示同時出現在兩個文件的行。
comm file1 file2 顯示三列,第一列代表只出現在file1的行,第二列代表只出現在file2的行,第三列代表倆個文件同時出現的行
comm -12 顯示兩個文件同時出現的行 也就是交集
comm -13 顯示只出現在第二個文件的行
comm -23 顯示只出現在第一個文件的行
例如:假設要對文件myfile1和myfile2進行比較
$ cat myfile1
main( )
{
float a,b, i, j ,z ;
a=i=10 ; b=j=5 ;
z= i + j ;
printf(“z=%d\\\\n”,z) ;
}
$ cat myfile2
#include stdio.h
main( )
{
float i, j ,z ;
i=10 ; j=5 ;
z= i + j ;
printf(“z=%f\\\\n”,z) ;
}
$ comm - 12 myfile1 myfile2
main( )
{
z= i + j ;
}
就只顯示文件myfile1和myfile2中共有的行。
可以用diff命令對比文檔內容。
[語法]: diff [參數] 文件1 文件2
[說明]: 本命令比較兩個文本文件,將不同的行列出來
-b 將一串空格或TAB 轉換成一個空格或TAB
-e 生成一個編輯角本,作為ex 或ed 的輸入可將文件1 轉換成文件2
[例子]:
diff file1 file2
diff -b file1 file2
diff -e file1 file2 edscript
diff 命令的常用參數
a 將所有文件當做文本文件來處理
b 忽略空格造成的不同
B 忽略空行造成的不同
q 只報告什么地方不同,不報告具體的不同信息
H 利用試探法加速對大文件的搜索
i 忽略大小寫的變化
l 用pr對輸出進行分頁
r 在比較目錄時比較所有的子目錄
s 兩個文件相同時才報告
v 在標準輸出上輸出版本信息并退出
實例:比較兩個文件
代碼如下:
[root@localhost 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行。
Y:diff命令
●簡介
★diff命令用于比較文件的差異。
★diff以逐行的方式,比較文本文件的異同處。如果指定要比較目錄,則diff會比較目錄中相同文件名的文件,但不會比較其中子目錄。
●語法
★命令格式:diff[參數][文件1或目錄1][文件2或目錄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 顯示版本信息。
☆-w或--ignore-all-space 忽略全部的空格字符。
☆-W寬度或--width寬度 在使用-y參數時,指定欄寬。
☆-x文件名或目錄或--exclude文件名或目錄 不比較選項中所指定的文件或目錄。
☆-X文件或--exclude-from文件 您可以將文件或目錄類型存成文本文件,然后在=文件中指定此文本文件。
☆-y或--side-by-side 以并列的方式顯示文件的異同之處。
☆--help 顯示幫助。
☆--left-column 在使用-y參數時,若兩個文件某一行內容相同,則僅在左側的欄位顯示該行內容。
☆--suppress-common-lines 在使用-y參數時,僅顯示不同之處。
●案例
★實例一:比較兩個文件
[root@localhost 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行。
★實例二:并排格式輸出
[root@localhost 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
[root@localhost 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行內容;
分享題目:linux命令對比文件,linux比較文件差異命令
網頁鏈接:http://www.js-pz168.com/article18/hoghdp.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、外貿網站建設、ChatGPT、網站策劃、網站營銷、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯