cat命令用於查看純文本文件(內容較少的)。因爲cat命令查看文檔時會將文檔內容所有顯示,當文檔內容過多時,使用cat命令就會很不方便瀏覽了,這時可使用less,more,head,tail命令。cat還能夠查看多個文件,中間使用空格分隔便可。html
cat的做用不侷限於查看文檔。node
1)一次查看完整文檔linux
2)從鍵盤建立文件(只能建立新文件,不能編輯已有的文件,編輯已有的文件會清空文件的內容)git
3)將幾個文件合併爲一個文件算法
[root@VM_0_10_centos ~]# cat hello lo >> test.sh [root@VM_0_10_centos ~]# cat test.sh cjsnc;avnaovnj hello lolol
格式:shell
-A, --show-all 等價於 -vET -b, --number-nonblank 顯示行號,但不顯示換行或空行的行號 -e 等價於 -vE -E, --show-ends 在每一行的末尾加上$符號 -n, --number 顯示全部行號包括換行和空行的行號 -s, --squeeze-blank 若是有兩行及以上空白行,替換爲一行 -t 等價於-vT -T, --show-tabs 將有使用tab字符的位置換成^I -u 忽略 -v, --show-nonprinting 使用 ^ and M- 註釋, 除了 LFD and TAB
補充:vim
cat還能夠和EOF連用,表示建立,鏈接文件。這裏能夠參考個人另外一篇博客文章:http://www.javashuo.com/article/p-ogheuhaz-s.htmlcentos
PS:須要注意的是輸入輸出符,">"表示建立,若是是已有的文件使用該輸出符須要注意是否想清空這個文件的內容,若是不想清空,請使用">>"追加的方式。bash
more命令用於查看純文本文件(針對內容較多的文檔)。使用more命令查看文檔底部會顯示閱讀的百分比,可使用空格鍵或回車鍵向下翻頁。數據結構
格式:
more [選項] 文件名
選項:
+NUM 從笫n行開始顯示 -NUM 定義屏幕大小爲n行 +/pattern 在每一個檔案顯示前搜尋該字串(pattern),而後從該字串前兩行以後開始顯示 -c 從頂部清屏,而後顯示 -d 提示「Press space to continue,’q’ to quit(按空格鍵繼續,按q鍵退出)」,禁用響鈴功能 -l 忽略Ctrl+l(換頁)字符 -p 經過清除窗口而不是滾屏來對文件進行換頁,與-c選項類似 -s 把連續多個空行顯示爲一行 -u 把文件內容中的下畫線去掉
經常使用操做命令:
Enter 向下n行,須要定義。默認爲1行 Ctrl+F 向下滾動一屏 空格鍵 向下滾動一屏 Ctrl+B 返回上一屏 = 輸出當前行的行號 :f 輸出文件名和當前行的行號 V 調用vi編輯器 !命令 調用Shell,並執行命令 q 退出more
實例:
1)顯示文件從第5行開始
[root@VM_0_10_centos ~]# more +5 /etc/passwd
2)定義屏幕大小爲每5行爲一屏
[root@VM_0_10_centos ~]# more -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
3)從文件中查看var字符串,並從該行前兩行輸出顯示
[root@VM_0_10_centos ~]# more +/var /etc/passwd
...skipping
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
less命令比more命令功能更強大,能向前向後翻頁(PgUp,PgDn鍵),more只能向後翻頁。
格式:
less [參數] 文件名
參數:
-b <緩衝區大小> 設置緩衝區的大小 -e 當文件顯示結束後,自動離開 -f 強迫打開特殊文件,例如外圍設備代號、目錄和二進制文件 -g 只標誌最後搜索的關鍵詞 -i 忽略搜索時的大小寫 -m 顯示相似more命令的百分比 -N 顯示每行的行號 -o <文件名> 將less 輸出的內容在指定文件中保存起來 -Q 不使用警告音 -s 顯示連續空行爲一行 -S 行過長時間將超出部分捨棄 -x <數字> 將「tab」鍵顯示爲規定的數字空格
-V 進入vim模式,能夠編輯當前文檔
&pattern 匹配模式的行,而不是整個文件
經常使用操做:
/字符串:向下搜索「字符串」的功能 ?字符串:向上搜索「字符串」的功能 n:重複前一個搜索(與 / 或 ? 有關) N:反向重複前一個搜索(與 / 或 ? 有關) b 向後翻一頁 d 向後翻半頁
j 向前移動
k 向後移動
G 移動到最後一行
g 移動到第一行 h 顯示幫助界面 Q或q或ZZ 退出less 命令 u 向前滾動半頁 y 向前滾動一行 空格鍵 滾動一行 回車鍵 滾動一頁 [pagedown]: 向下翻動一頁 [pageup]: 向上翻動一頁
ctrl + F 向前移動一屏
ctrl + B 向後移動一屏
ctrl + D 向前移動半屏
ctrl + U 向後移動半屏
實例:
1)瀏覽多個文件
[root@VM_0_10_centos ~]# less hello lo
PS:輸入:n 切換到下一個文件lo;輸入:p 切換到前面一個文件hello;輸入:e 文件名 再打開一個文件
head命令用於查詢文檔的前N行,默認顯示前10行。查詢多個文件,在每一段輸出前會給出文件名做爲文件頭。若是不指定文件,或者文件爲"-",則從標準輸入讀取數據。
格式:
head [參數] 文件名
參數:
-c, --bytes=[-]K 顯示每一個文件的前K 字節內容;若是附加"-"參數,則除了每一個文件的最後K字節數據外 顯示剩餘所有內容 -n, --lines=[-]K 顯示每一個文件的前K 行內容;若是附加"-"參數,則除了每一個文件的最後K行外 顯示剩餘所有內容 -q, --quiet, --silent 不顯示包含給定文件名的文件頭 -v, --verbose 老是顯示包含給定文件名的文件頭
1)顯示文件前3行
[root@VM_0_10_centos ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2)輸出文件,顯示除了最後33行的所有內容
[root@VM_0_10_centos ~]# head -n -33 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
3)顯示文件前5個字節
[root@VM_0_10_centos ~]# head -c 5 /etc/passwd
root:
4)顯示除了最後3個字節之外的內容
[root@VM_0_10_centos ~]# head -c -3 hello
hel
tail命令用於查看純文本文檔最後N行或持續刷新的內容。
格式:
tail [選項] [文件]
選項:
-f 循環讀取,實時刷新 -q 不顯示處理信息 -v 顯示詳細的處理信息 -c<數目> 顯示的字節數 -n<行數> 顯示文件的尾部 n 行內容 --pid=PID 與-f合用,表示在進程ID,PID死掉以後結束 -q, --quiet, --silent 從不輸出給出文件名的首部 -s, --sleep-interval=S 與-f合用,表示在每次反覆的間隔休眠S秒
PS:和head命令使用同樣
tr(translate)命令用於替換或刪除文檔中的字符。tr主要用於刪除文件中控制字符或進行字符轉換。使用tr時要轉換兩個字符串:字符串1用於查詢,字符串2用於處理各類轉換。tr剛執行時,字符串1中的字符被映射到字符串2中的字符,而後轉換操做開始。
格式:
tr [選項] [原始字符] [目標字符]
或
Usage: tr [OPTION]... SET1 [SET2]
選項:
-c, -C, –complement 用SET1的字符串替換,要求字符集爲ASCII。 -d, –delete 刪除SET1中的字符而不是轉換 -s, –squeeze-repeats 刪除全部重複出現字符序列,只保留第一個;即將重複出現字符串壓縮爲一個字符串。 -t, –truncate-set1 先刪除第一字符集較第二字符集多出的字符
字符集合範圍:
\NNN 八進制值的字符 NNN (1 to 3 爲八進制值的字符) \\ 反斜槓 \a Ctrl-G 鈴聲 \b Ctrl-H 退格符 \f Ctrl-L 走行換頁 \n Ctrl-J 新行 \r Ctrl-M 回車(^M) \t Ctrl-I tab鍵 \v Ctrl-X 水平製表符(\011) CHAR1-CHAR2 :字符範圍從 CHAR1 到 CHAR2 的指定,範圍的指定以 ASCII 碼的次序爲基礎,只能由小到大,不能由大到小。 [CHAR*] :這是 SET2 專用的設定,功能是重複指定的字符到與 SET1 相同長度爲止 [CHAR*REPEAT] :這也是 SET2 專用的設定,功能是重複指定的字符到設定的 REPEAT 次數爲止(REPEAT 的數字採 8 進位制計算,以 0 爲開始) [:alnum:] :全部字母字符與數字 [:alpha:] :全部字母字符 [:blank:] :全部水平空格 [:cntrl:] :全部控制字符 [:digit:] :全部數字 [:graph:] :全部可打印的字符(不包含空格符) [:lower:] :全部小寫字母 [:print:] :全部可打印的字符(包含空格符) [:punct:] :全部標點字符 [:space:] :全部水平與垂直空格符 [:upper:] :全部大寫字母 [:xdigit:] :全部 16 進位制的數字 [=CHAR=] :全部符合指定的字符(等號裏的 CHAR,表明你可自訂的字符)
實例:
1)實現文件中字符的大小寫轉換(其中grep -v 「^$」去除空白行)
[root@VM_0_10_centos tmp]# head -n 5 passwd | grep -v "^$" |tr a-z A-Z
LIBSTORAGEMGMT:X:998:997:DAEMON ACCOUNT FOR LIBSTORAGEMGMT:/VAR/RUN/LSM:/SBIN/NOLOGIN
RPC:X:32:32:RPCBIND DAEMON:/VAR/LIB/RPCBIND:/SBIN/NOLOGIN
或
[root@VM_0_10_centos tmp]# head -n 5 passwd | grep -v "^$" |tr [:lower:] [:upper:]
LIBSTORAGEMGMT:X:998:997:DAEMON ACCOUNT FOR LIBSTORAGEMGMT:/VAR/RUN/LSM:/SBIN/NOLOGIN
RPC:X:32:32:RPCBIND DAEMON:/VAR/LIB/RPCBIND:/SBIN/NOLOGIN
PS:數字轉換也是一樣,如 [0-9] [a-z]
2)將file1文件中的「wsxrfv」替換爲「change」
[root@VM_0_10_centos tmp]# cat file1 | tr "wsxrfv" "qazedc"
qazedc
PS:在file1文件中出現的"w"字母,都替換成"c"字母,"s"字母替換爲"h"字母,"x"字母替換爲"a"字母。而不是將字符串"wsxrfv"替換爲字符串"change"。這裏的替換不修改源文件
3)刪除文件中出現的字符「wx」。(和上面同樣,不僅僅是刪除字符串,而是包含了w和x和字符)
[root@VM_0_10_centos tmp]# cat file1 | tr -d "wx"
srfv
PS:若是要刪除空格和換行,須要用轉義字符。如:-d "\n\t"
4)刪除Windows文件形成的"^M"字符
[root@VM_0_10_centos tmp]# cat file1 | tr -d "\r"
或
[root@VM_0_10_centos tmp]# cat file1 | tr -s "\r" "\n"
5)加密解密
[root@VM_0_10_centos tmp]# echo 110002222 | tr [0-9] [123456]
221113333
[root@VM_0_10_centos tmp]# echo 221113333 | tr [123456] [0-9]
110002222
6)古羅馬時期發明的凱撒加密的一種變體ROT13(ROT13是它本身自己的逆反;也就是說,要還原ROT13,套用加密一樣的算法便可得,故一樣的操做可用再加密與解密。很是神奇!)
[root@VM_0_10_centos tmp]# echo "hi,this is amosli" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVW
XYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'uv,guvf vf nzbfyv
[root@VM_0_10_centos tmp]# echo "uv,guvf vf nzbfyv" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVW
XYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'hi,this is amosli
7)字符集補集(set1的補集意味着從這個集合中包含set1中沒有的全部字符。最典型的用法就是從輸入文本中將不在補集中的全部字符所有刪除。例如:)
[root@VM_0_10_centos tmp]# echo "hello 123 world " | tr -d -c '0-9 \n'
123
PS:在這裏,補集中包含了除數字、空格字符和換行符以外的全部字符,由於指定了-d,因此這些字符所有都會被刪除。
8)只刪除空白行(好比一個文檔中有多處不連續的空白行,咱們須要作的就是將這些空白行刪除或替換掉)(5種方法實現)
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | tr -s '\n' # -s刪除重複出現的指定符號,合併爲一個
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | grep -v "^$" # -v取反,^$以空白行開頭
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | sed '/^$/d' # d參數表示刪除
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | awk '{if($0 != "")print}' #$0取出文件中全部內容,將不等於空的內容打印出來
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | awk '{if(length != 0)print}' # 將長度不等於0的打印處理。及空白行不打印
參考網址:http://www.javashuo.com/article/p-urjryavw-be.html
9)將/etc/passd中的第三個字段設置最大的後10個用戶的信息所有改成大寫保存至/tmp/maxuser.txt文件中(-k 指定取的列)
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | sort -t ':' -k 3 -n | tail -n 10 | tr '[a-z]' '[A-Z]' > /tmp/maxuser.txt
或取出/etc/group第三個字段數值最小的10個組的名字
[root@VM_0_10_centos shellScript]# cat /tmp/group | sort -t ":" -k 3 -n | head -n 10 | cut -d ":" -f 1
10)取出當前主機的IP地址
[root@VM_0_10_centos shellScript]# ifconfig eth0 | sed -n '2p' | sed 's/.*inet//g' | sed 's/netmask.*//g'
172.16.0.10
或(一下這些方法都可實現)
11)列出/etc目錄下全部已.conf結尾的文件的文件名,並將其名字轉換爲大寫後保存至/tmp/etc.conf文件中
wc命令用於文本行數統計。
格式:
Usage: wc [OPTION]... [FILE]...
選項:
-c 統計字節數。 -l 統計行數。 -m 統計字符數。這個標誌不能與 -c 標誌一塊兒使用。 -w 統計字數(字符串)。一個字被定義爲由空白、跳格或換行字符分隔的字符串。 -L 打印最長行的長度。
實例:
1)統計當前系統中有多少個用戶
[root@VM_0_10_centos shellScript]# wc -l /etc/passwd
35 /etc/passwd
stat命令英語查看文件的具體存儲和時間等信息。會顯示出三種狀態(Access、Modify、Change)分別對應atime、mtime、ctime
借網友一張圖
格式:
stat 文件名稱
參數:
-f 不顯示文件自己的信息,顯示文件所在文件系統的信息 -L 顯示符號連接 -C 文件權限 -t 簡潔模式,只顯示摘要信息 事實上,stat命令顯示的是文件的I節點信息。Linux文件系統以塊爲單位存儲信息,爲了找到某一個文件所在存儲空間的位置,用I節點對每一個文件進行索引。 所謂的I節點,是文件系統管理的一個數據結構,是一個64字節長的表,包含了描述文件所必要的所有信息,其中包含了文件的大小,類型,存取權限,文件的全部者
實例:
1)查看文件的信息
[root@VM_0_10_centos shellScript]# stat users.txt
File: ‘users.txt’
Size: 68 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 794494 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-10-10 09:44:56.660101721 +0800
Modify: 2019-10-10 09:44:56.660101721 +0800
Change: 2019-10-14 09:16:33.175799491 +0800
Birth: -
PS:使用ls也能夠達到上面的效果
[root@VM_0_10_centos shellScript]# ls -l users.txt ==》mtime最後修改時間(偏向文件內容改變)
-rwxr-xr-x 1 root root 68 Oct 10 09:44 users.txt
[root@VM_0_10_centos shellScript]# ls -lc users.txt ==》ctime最後更改時間(偏向修改屬性。如用戶,組,權限,屬性,內容)
-rwxr-xr-x 1 root root 68 Oct 14 09:16 users.txt
[root@VM_0_10_centos shellScript]# ls -lu users.txt ==》atime最後訪問時間
-rwxr-xr-x 1 root root 68 Oct 10 09:44 users.txt
好比,vi 修改文件保存退出,mtime、atime、ctime都會修改,可是經過chown、chmod修改文件,ctime會改變。mtime不會改變。
修改屬性以前:
修改屬性以後:
[root@VM_0_10_centos shellScript]# chmod +x name.txt
IO Block:邏輯塊的大小爲4096個字節
Blocks:物理最小塊是512,而IO Block爲4096,因此這裏就佔用了8個物理塊的意思
補充:
1)stat除了查看文件,還能查看硬盤,文件系統的信息
2)touch命令能更改atime、ctime、mtime(時間戳)
用法:
-a 或--time=atime或--time=access或--time=use 只更改訪問時間。
-m 或--time=mtime或--time=modify 只更改修改時間
-d、-t 指定的日期時間,如今的時間
修改訪問時間atime:(ctime時間也改變了,這是因爲文件的狀態發生了變化,因此ctime自動也更新了時間)
修改時間:
經過-m選項改了文件的修改時間,ctime依然更新了。touch指令依然只是修改了修改時間,而狀態時間是系統本身更新的。
cut命令按「列」提取文本字符。常常與awk連用
格式:
cut [參數] 文件
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
參數:
-b :以字節爲單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標誌。 -c :以字符爲單位進行分割。 -d :自定義分隔符,默認爲製表符。 -f :與-d一塊兒使用,指定顯示哪一個區域。 -n :取消分割多字節字符。僅和 -b 標誌一塊兒使用。若是字符的最後一個字節落在由 -b 標誌的 List 參數指示的 範圍以內,該字符將被寫出;不然,該字符將被排除
PS:"-":在index前,表示從字串頭開始;放在index後,表示從index開始到字串末尾;在兩個index之間,表示從index1到index2。還有這個「,」能夠選擇的不連續的域。
實例:
如今咱們就來嘗試一下cut這個命令吧。文件內容爲「abc:def:hij」
1)截取第三個字符
[root@VM_0_10_centos shellScript]# cut -c 3 cut.txt
c
2)截取第3到第6之間的字符
[root@VM_0_10_centos shellScript]# cut -c 3-6 cut.txt
c:de
3)截取從第3個字符開始到最後一個字符
[root@VM_0_10_centos shellScript]# cut -c 3- cut.txt
c:def:hij
4)截取前3個字符
[root@VM_0_10_centos shellScript]# cut -c -3 cut.txt
abc
5)連續截取指定字符
[root@VM_0_10_centos shellScript]# cut -c 3-5,8-9 cut.txt
c:d:h
PS:這裏我嘗試使用-3-5,會出現報錯狀況,猜測是格式不支持。
6)使用cut命令提取passwd中的用戶名信息(-d指定分隔符,-f指定提取第幾列的內容)
[root@VM_0_10_centos shellScript]# head -n 5 /tmp/passwd | grep -v "^$" | cut -d : -f 1
libstoragemgmt
rpc
7)取出當前系統上被用戶當作其默認shell最多的那個shell(sort -n 按數值大小排序,uniq -c 統計不重複的匹配字符)
[root@VM_0_10_centos shellScript]# cut -d ':' -f 7 /tmp/passwd | uniq -c | sort -n | tail -n 1 | cut -d ' ' -f 7
/sbin/nologin
或
[root@VM_0_10_centos shellScript]# cat /tmp/passwd | awk -F : '{print $7}' | uniq -c | sort -n | tail -n 1 | awk -F " " '{pr
int $2}'/sbin/nologin
diff目錄名用於比較多個文本文件的差別(一行一行的比較)。若是指定要比較目錄,則diff會比較目錄中相同文件名的文件,但不會比較其中子目錄。在使用diff命令時,可使用--brief參數來確認兩個文件是否不通,還可使用-c參數來詳細比較多個文件之間的差別。
diff工具標記出來的不一樣之處並不會以顏色區分開來,這時可使用colordiff命令,系統默認是沒有安裝的。直接安裝便可(yum -y install colordiff)
格式:
Usage: diff [OPTION]... FILES
選項:
-<行數> 指定要顯示多少行的文本。此參數必須與-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 以並列的方式顯示文件的異同之處。 --left-column 在使用-y參數時,若兩個文件某一行內容相同,則僅在左側的欄位顯示該行內容。 --suppress-common-lines 在使用-y參數時,僅顯示不一樣之處。
比較結果說明:
"|"表示先後2個文件內容有不一樣
"<"表示後面文件比前面文件少了1行內容
">"表示後面文件比前面文件多了1行內容
實例:
先準備好兩個文件
[root@VM_0_10_centos shellScript]# more file1.txt file2.txt :::::::::::::: file1.txt :::::::::::::: 1234567890
1234567890 qwertyuiop 1234567890 asdfghjkl; :::::::::::::: file2.txt :::::::::::::: 1234567890 qwertyuiop 1234567890 asdfghjkl 1234567890
1)首先比較他們的不一樣(等價於--normal參數)
[root@VM_0_10_centos shellScript]# diff file1.txt file2.txt 2d1 < 1234567890 5c4,5
< asdfghjkl; ---
> asdfghjkl > 1234567890
PS:5c4,5中的5表明第一個文件中的行,字母c表示須要在第一個文件上作的操做(a=add,c=change,d=delete),後面的4,5表示第二個文件中的行。
2d1含義:須要將第一個文件中第二行「1234567890」刪除掉才能和第二個文件的內容匹配
5c4,5含義:須要將第一個文件中第五行「asdfghjkl;」內容修改才能和第二個文件的內容匹配
---含義:兩個文件的分隔符
>含義:表示後面的文件(第二個文件)
<含義:表示前面的文件(第一個文件)
2)diff -c方式
3) 使用diff –u 比較的結果:
4)比較目錄(比較兩個目錄的時候無非是有的文件僅僅存在於某個目錄中而在另外一個目錄中沒有,若是存在同名的文件,則比較這兩個文件的不一樣)
5)參數 -e 將比較的結果保存成一個ed腳本,以後ed程序能夠執行該腳本文件,從而將file1修改爲與file2的內容相同,這通常在patch的時候有用。
diff -e 1.txt 2.txt > script.txt
這樣就是生成了一個ed能夠執行的腳本文件script.txt,生成腳本文件以後咱們還須要作一個操做, 在腳本文件末尾添加ed的write指令,只須要執行 echo "w" >>script.txt 將w指令附加到腳本文件的最後一行便可。
那麼如何應用該腳本文件呢,能夠這樣使用:
ed - 1.txt < script.txt
注意中間的 – 符號表示從標準輸入中讀取,而 < script.txt 則重定向script.txt的內容到標準輸入。這樣執行以後1.txt的內容將與2.txt徹底相同。
6)使用--berief參數比較兩個文件是否相等
[root@VM_0_10_centos shellScript]# diff --brief file1.txt file2.txt