最近在做后端的項(xiàng)目心剥,除了數(shù)據(jù)庫(kù)的相關(guān)知識(shí)外還常常需要在linux系統(tǒng)中的log文件里尋找相關(guān)的log用于定位及發(fā)現(xiàn)問(wèn)題更胖,之前對(duì)linux命令的理解還停留在和DOS命令類似的階段漏隐,現(xiàn)在特地學(xué)習(xí)總結(jié)一番剪个,以備后用滋迈。
cat
cat命令是最簡(jiǎn)單的顯示文件的命令闸准,一次性顯示文件的全部?jī)?nèi)容益愈,查看小文件的時(shí)候可以使用∫募遥可以一次性傳入多個(gè)文件連接顯示
more&less
這兩個(gè)命令是類似的蒸其,類似vi編輯器的顯示效果:
more:不支持后退,但幾乎不需要加參數(shù)库快,空格鍵是向下翻頁(yè)摸袁,Enter鍵是向下翻一行,在不需要后退的情況下比較方便义屏。
less:支持前后翻滾靠汁,既可以向上翻頁(yè)(pageup按鍵)蜂大,也可以向下翻頁(yè)(pagedown按鍵)。
head&tail
這兩個(gè)命令也是一組蝶怔,望文生義一個(gè)是查看文件頭的命令一個(gè)是查看尾巴的奶浦。
公用的參數(shù)-n <行數(shù)>可以指定顯示文件的頭多少行或者尾多少行
tail還有個(gè)專用的參數(shù)-f可以用于log的持續(xù)顯示,后續(xù)log的新增部分也會(huì)持續(xù)的顯示在終端上踢星,是實(shí)時(shí)查看log的重要工具之一
grep,egrep,fgrep
先看傳統(tǒng)的 grep 程序, 在沒有參數(shù)的情況下, 只輸出符合 RE 字符串之句子. 常見參數(shù)如下:
- -a :在二進(jìn)制文件中澳叉,以文本文件的方式搜索數(shù)據(jù)
fg:在/etc/inittab內(nèi)搜索包含rc字符串的行 grep -a 'rc' /etc/inittab - -c :計(jì)算找到'搜索字符串'的次數(shù)
- -i :忽略大小寫
- -v :反向查找,即顯示沒有'搜索字符串'內(nèi)容的那行
- -o :只顯示被模式匹配的字符串
- -n :輸出行號(hào)
- --colour(color):顏色顯示
- -A:顯示匹配到字符那行的后面n行
- -B:顯示匹配到字符那行的前面n行
- -C:顯示匹配到字符那行的前后n行
從參數(shù)列表中我們可以看到egrep和fgrep實(shí)際是grep的兩種拓展斩狱,其中egrep作為 grep 的擴(kuò)充版本, 改良了許多傳統(tǒng) grep 不能或不便的操作. 比方說(shuō):
- grep 之下不支持 ? 與 + 這兩種 modifier, 但 egrep 則可.
- grep 不支持 a|b 或 (abc|xyz) 這類"或一"比對(duì), 但 egrep 則可.
- grep 在處理 {n,m} 時(shí), 需用 { 與 } 處理, 但 egrep 則不需.
所以要熟練度掌握egrep還需要爐火純青的正則表達(dá)式的技藝耳高,正則表達(dá)式相關(guān)的內(nèi)容以后的文章再總結(jié)把。
fgrep命令等同于grep -F所踊,它利用固定的字符串來(lái)對(duì)文本進(jìn)行搜索,但不支持正則表達(dá)式的引用概荷,所以此命令的執(zhí)行速度也最快秕岛。
管道符號(hào) |
Linux系統(tǒng)中的命令可以將標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),還能將這些數(shù)據(jù)送到標(biāo)準(zhǔn)輸出中去误证,這種功能被系統(tǒng)進(jìn)一步的利用继薛,從而產(chǎn)生出一種新的特性,稱之為管道符“|”愈捅,這個(gè)符號(hào)可以將一個(gè)命令的標(biāo)準(zhǔn)輸出管道為另外一個(gè)命令的標(biāo)準(zhǔn)輸入遏考。
需要注意的是管道符的使用有兩個(gè)條件:
- 管道命令只能處理前一個(gè)命令的標(biāo)準(zhǔn)輸出,而不能處理標(biāo)準(zhǔn)錯(cuò)誤蓝谨;
- 管道命令右邊命令必須能夠接收標(biāo)準(zhǔn)輸入灌具。
管道符號(hào)|最常用的地方就是結(jié)合grep命令搜索log中的指定內(nèi)容了,如下的命令可以持續(xù)查看sample.log文件中出現(xiàn)了Hello World的行:
tail -f /var/log/sample.log |grep "Hello World"
sort
sort命令可以幫我們針對(duì)文本文件譬巫,以行為單位來(lái)排序咖楣,默認(rèn)使用升序輸出,參數(shù)列表如下:
- -b 忽略每行前面開始出的空格字符芦昔。
- -c 檢查文件是否已經(jīng)按照順序排序诱贿。
- -f 排序時(shí),忽略大小寫字母咕缎。
- -M 將前面3個(gè)字母依照月份的縮寫進(jìn)行排序珠十。
- -n 依照數(shù)值的大小排序。
- -o<輸出文件> 將排序后的結(jié)果存入指定的文件凭豪。
- -r 以相反的順序來(lái)排序焙蹭。
- -t<分隔字符> 指定排序時(shí)所用的欄位分隔字符。
- -k 選擇以哪個(gè)區(qū)間進(jìn)行排序墅诡。
特別提一下-t和-k壳嚎,他們是一對(duì)桐智,具體用法如下:
如果有一個(gè)文件的內(nèi)容是這樣:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
這個(gè)文件有三列,列與列之間用冒號(hào)隔開了烟馅,第一列表示水果類型说庭,第二列表示水果數(shù)量,第三列表示水果價(jià)格郑趁。那么我想以水果數(shù)量來(lái)排序刊驴,也就是以第二列來(lái)排序,如何利用sort實(shí)現(xiàn)寡润?幸好捆憎,sort提供了-t選項(xiàng),后面可以設(shè)定間隔符梭纹。指定了間隔符之后躲惰,就可以用-k來(lái)指定列數(shù)了。
[rocrocket@rocrocket programming]$ sort -n -k 2 -t ‘:’ facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
wc
wc命令并不是去上廁所了变抽,而是word count的簡(jiǎn)稱础拨,通常用于統(tǒng)計(jì)作用,在默認(rèn)的情況下绍载,wc將計(jì)算指定文件的行數(shù)诡宗、字?jǐn)?shù),以及字節(jié)數(shù)击儡。使用的命令為:
wc testfile
先查看testfile文件的內(nèi)容塔沃,可以看到:
$ cat testfile
Linux networks are becoming more and more common, but scurity is often an overlooked issue. Unfortunately, in today’s environment all networks are potential hacker targets, fro0m tp-secret military research networks to small home LANs. Linux Network Securty focuses on securing Linux in a networked environment, where the security of the entire network needs to be considered rather than just isolated machines. It uses a mix of theory and practicl techniques to teach administrators how to install and use security applications, as well as how the applcations work and why they are necesary.
使用wc統(tǒng)計(jì),結(jié)果如下
$ wc testfile # testfile文件的統(tǒng)計(jì)信息
3 92 598 testfile # testfile文件的行數(shù)為3阳谍、單詞數(shù)92蛀柴、字節(jié)數(shù)598
wc命令還支持3個(gè)參數(shù):
- -c 只顯示Bytes數(shù)。
- -l 只顯示列數(shù)边坤。
- -w 只顯示字?jǐn)?shù)名扛。
uniq
uniq命令用于統(tǒng)計(jì)和去重連續(xù)的重復(fù)行,參數(shù)列表如下: