寫在前面: 博主是一名投身教培事業的標準八零後,叛逆而且追求自由,暱稱取自於蘇軾的《水調歌頭》中的“高處不勝寒”,時刻提醒自己要耐得住寂寞,受的了孤獨,在技術的道路上,不畏艱難,勇往直前。 我已經將全部的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基礎命令,最好的方法就是根據一個命令去聯想類似的命令的使用方法,你會發現很多參數,雖然命令不同,但表示的意思基本相同。
計算機行業,無論是編程還是運維,都需要多練習,熟能生巧。