最近在做后端的項目,除了數據庫的相關知識外還常常需要在linux系統中的log文件里尋找相關的log用于定位及發現問題,之前對linux命令的理解還停留在和DOS命令類似的階段,現在特地學習總結一番,以備后用。
cat
cat命令是最簡單的顯示文件的命令,一次性顯示文件的全部內容,查看小文件的時候可以使用。可以一次性傳入多個文件連接顯示
more&less
這兩個命令是類似的,類似vi編輯器的顯示效果:
more:不支持后退,但幾乎不需要加參數,空格鍵是向下翻頁,Enter鍵是向下翻一行,在不需要后退的情況下比較方便。
less:支持前后翻滾,既可以向上翻頁(pageup按鍵),也可以向下翻頁(pagedown按鍵)。
head&tail
這兩個命令也是一組,望文生義一個是查看文件頭的命令一個是查看尾巴的。
公用的參數-n <行數>可以指定顯示文件的頭多少行或者尾多少行
tail還有個專用的參數-f可以用于log的持續顯示,后續log的新增部分也會持續的顯示在終端上,是實時查看log的重要工具之一
grep,egrep,fgrep
先看傳統的 grep 程序, 在沒有參數的情況下, 只輸出符合 RE 字符串之句子. 常見參數如下:
- -a :在二進制文件中,以文本文件的方式搜索數據
fg:在/etc/inittab內搜索包含rc字符串的行 grep -a 'rc' /etc/inittab - -c :計算找到'搜索字符串'的次數
- -i :忽略大小寫
- -v :反向查找,即顯示沒有'搜索字符串'內容的那行
- -o :只顯示被模式匹配的字符串
- -n :輸出行號
- --colour(color):顏色顯示
- -A:顯示匹配到字符那行的后面n行
- -B:顯示匹配到字符那行的前面n行
- -C:顯示匹配到字符那行的前后n行
從參數列表中我們可以看到egrep和fgrep實際是grep的兩種拓展,其中egrep作為 grep 的擴充版本, 改良了許多傳統 grep 不能或不便的操作. 比方說:
- grep 之下不支持 ? 與 + 這兩種 modifier, 但 egrep 則可.
- grep 不支持 a|b 或 (abc|xyz) 這類"或一"比對, 但 egrep 則可.
- grep 在處理 {n,m} 時, 需用 { 與 } 處理, 但 egrep 則不需.
所以要熟練度掌握egrep還需要爐火純青的正則表達式的技藝,正則表達式相關的內容以后的文章再總結把。
fgrep命令等同于grep -F,它利用固定的字符串來對文本進行搜索,但不支持正則表達式的引用,所以此命令的執行速度也最快。
管道符號 |
Linux系統中的命令可以將標準輸入讀取數據,還能將這些數據送到標準輸出中去,這種功能被系統進一步的利用,從而產生出一種新的特性,稱之為管道符“|”,這個符號可以將一個命令的標準輸出管道為另外一個命令的標準輸入。
需要注意的是管道符的使用有兩個條件:
- 管道命令只能處理前一個命令的標準輸出,而不能處理標準錯誤;
- 管道命令右邊命令必須能夠接收標準輸入。
管道符號|最常用的地方就是結合grep命令搜索log中的指定內容了,如下的命令可以持續查看sample.log文件中出現了Hello World的行:
tail -f /var/log/sample.log |grep "Hello World"
sort
sort命令可以幫我們針對文本文件,以行為單位來排序,默認使用升序輸出,參數列表如下:
- -b 忽略每行前面開始出的空格字符。
- -c 檢查文件是否已經按照順序排序。
- -f 排序時,忽略大小寫字母。
- -M 將前面3個字母依照月份的縮寫進行排序。
- -n 依照數值的大小排序。
- -o<輸出文件> 將排序后的結果存入指定的文件。
- -r 以相反的順序來排序。
- -t<分隔字符> 指定排序時所用的欄位分隔字符。
- -k 選擇以哪個區間進行排序。
特別提一下-t和-k,他們是一對,具體用法如下:
如果有一個文件的內容是這樣:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
這個文件有三列,列與列之間用冒號隔開了,第一列表示水果類型,第二列表示水果數量,第三列表示水果價格。那么我想以水果數量來排序,也就是以第二列來排序,如何利用sort實現?幸好,sort提供了-t選項,后面可以設定間隔符。指定了間隔符之后,就可以用-k來指定列數了。
[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的簡稱,通常用于統計作用,在默認的情況下,wc將計算指定文件的行數、字數,以及字節數。使用的命令為:
wc testfile
先查看testfile文件的內容,可以看到:
$ 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統計,結果如下
$ wc testfile # testfile文件的統計信息
3 92 598 testfile # testfile文件的行數為3、單詞數92、字節數598
wc命令還支持3個參數:
- -c 只顯示Bytes數。
- -l 只顯示列數。
- -w 只顯示字數。
uniq
uniq命令用于統計和去重連續的重復行,參數列表如下: