[linux]循序漸進學運維-基礎命令篇-diff

寫在前面: 博主是一名投身教培事業的標準八零後,叛逆而且追求自由,暱稱取自於蘇軾的《水調歌頭》中的“高處不勝寒”,時刻提醒自己要耐得住寂寞,受的了孤獨,在技術的道路上,不畏艱難,勇往直前。 我已經將全部的linux運維體系發到了gitee上,https://gitee.com/gaosh08/LinuxFamily 歡迎star,投稿,交流。

小手一抖,點贊走起

diff的基本語法及參數

diff的用法,diff後面直接加選項,主要用來逐行對比文件
參數:

  • -<行數>  指定要顯示多少行的文本。此參數必須與-c或-u參數一併使用。
  • -a或–text  diff預設只會逐行比較文本文件。
  • -b或–ignore-space-change  不檢查空格字符的不同。
  • -B或–ignore-blank-lines  不檢查空白行
  • -c  顯示全部內文,並標出不同之處。
  • -H或–speed-large-files  比較大文件時,可加快速度。
  • -i或–ignore-case  不檢查大小寫的不同。
  • -u,-U<列數>或–unified=<列數>  以合併的方式來顯示文件內容的不同。
  • -v或–version  顯示版本信息。
  • -w或–ignore-all-space  忽略全部的空格字符。
  • –help  顯示幫助。

舉栗子:

1. 比較兩個文件

[root@zmgaosh ~]# diff passwd passwd1
2a3
> aaa
[root@zmgaosh ~]# 

在這裏插入圖片描述

2. 並排格式輸出

[root@zmgaosh ~]# diff passwd passwd1 -y -W 10
tc      tc
my      my
    >   aa
[root@zmgaosh ~]# 

在這裏插入圖片描述
注: 這裏的
-y表示並排顯示
-W 指定行寬

"<"表示後面文件比前面文件少了1行內容
">"表示後面文件比前面文件多了1行內容

3. -u 以合併文件的方式顯示不同

[root@zmgaosh ~]# diff -u passwd passwd1
--- passwd      2020-06-19 20:17:37.535217346 +0800
+++ passwd1     2020-06-19 20:17:57.605397654 +0800
@@ -1,2 +1,3 @@
 tcpdump:x:72:72::/:/sbin/nologin
 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
+aaa

注:
—開頭的是原始文件

+++開頭的是目標文件

以-開頭的是隻出現在原始文件中的

以+開頭的是隻出現在目標文件中的

以空格 開始的行是在目標文件和原始文件中都出現的行

補充: 三個文本比較命令:

comm , diff, patch

comm: 比較相同的文本,特點是: 如果文本中有空格就無法識別


[root@zmgaosh ~]# cat a.txt 
aaa
   bbb
[root@zmgaosh ~]# cat b.txt
aaa
bbb
[root@zmgaosh ~]# comm a.txt b.txt
                aaa   (輸出形同的文本)
        bbb(輸出不同的文本)
   bbb
[root@zmgaosh ~]# 

其實bbb是相同的,只是一個有空格,一個沒有空格,會被當成不同來顯示。

patch 補丁:

通常在更新幾百萬行的項目時,如果只有幾行有變化,全部打包過來根本是不可能的,因爲它太大了,而且全部拷過來也沒有意義,最大的問題是人力難以對比。 這個時候我們可以用到patch

patch主要用於修補文件

舉例:

創建兩個文件

[root@zmgaosh ~]# cat a.txt
11111
11111
11111
11111

[root@zmgaosh ~]# cat b.txt
22222
11111
22222
11111

使用diff 創建補丁 b.txt.patch


[root@zmgaosh ~]# diff -uN a.txt b.txt > b.txt.patch
[root@zmgaosh ~]# cat b.txt.patch
--- a.txt       2020-06-19 20:54:54.115330192 +0800
+++ b.txt       2020-06-19 20:55:34.924697772 +0800
@@ -1,4 +1,5 @@
+22222
 11111
+22222
 11111
-11111
-11111
+

備註:
補丁頭是分別由—/+++開頭的兩行,用來表示要打補丁的文件。—開頭表示舊文件,+++開頭表示新文件。
*diff命令會在補丁文件中記錄這兩個文件的首次創建時間,如下
— a.txt 2020-06-19 20:54:54.115330192 +0800
+++ b.txt 2020-06-19 20:55:34.924697772 +0800

接下來開始打補丁:

[root@zmgaosh ~]# patch -p0 < b.txt.patch 
patching file a.txt
[root@zmgaosh ~]# cat a.txt 
22222
11111
22222
11111

可以看到a.txt變得和b.txt一樣了

我們也可以去除補丁

[root@zmgaosh ~]# patch -RE -p0 < b.txt.patch 
patching file a.txt
[root@zmgaosh ~]# cat a.txt
11111
11111
11111
11111
[root@zmgaosh ~]# 

可以看到又恢復到了原版本的a.txt

後記

學習Linux基礎命令,最好的方法就是根據一個命令去聯想類似的命令的使用方法,你會發現很多參數,雖然命令不同,但表示的意思基本相同。

計算機行業,無論是編程還是運維,都需要多練習,熟能生巧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章