ps -ef | grep java (先查java進程ID)java
kill -9 java進程ID(生產環境謹慎使用)程序員
tail -n 10 test.log 查詢日誌尾部最後10行的日誌;正則表達式
tail -n +10 test.log 查詢10行以後的全部日誌;less
head: tcp
跟tail是相反的,tail是看後多少行日誌;例子以下:工具
head -n 10 test.log 查詢日誌文件中的頭10行日誌;ui
head -n -10 test.log 查詢日誌文件除了最後10行的其餘全部日誌;spa
cat: debug
tac是倒序查看,是cat單詞反寫;例子以下:日誌
cat -n test.log |grep "debug" 查詢關鍵字的日誌
2. 應用場景一:按行號查看---過濾出關鍵字附近的日誌
1)cat -n test.log |grep "debug" 獲得關鍵日誌的行號
2)一般查找出錯誤日誌 cat error.log | grep 'nick' , 這時候咱們還有個需求就是輸出當前這個日誌的先後幾行:
cat error.log | grep -B 5 'nick' 顯示nick及前5行
cat error.log | grep -A 5 'nick' 顯示nick及後5行
cat error.log | grep -C 5 'nick' 顯示file文件裏匹配nick字串那行以及上下5行
cat error.log | grep -n -B10 -A10 5 'nick' 顯示file文件裏匹配nick字串先後10行
3. 應用場景二:選取日誌中特定範圍進行分析
1)cat -n test.log |tail -n +1000|head -n 20 從第1000行開始,顯示20行
tail -n +1000表示查詢1000行以後的日誌
head -n 20 則表示在前面的查詢結果裏再查前20條記錄
2)cat catalina.out | head -n 1400| tail -n +1350 顯示1350行到1400行 (實現原理都差很少,就是經過語法糖)
(1)按日期截取 :通常在日誌系統中都會記錄打印日誌的時間,一般咱們很是須要查找指定時間端的日誌:
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特別說明:該命令中的兩個日期值必須是日誌文件中包含的值,不然該命令無效.; 先 grep '2014-12-17 16:17:20' test.log 來肯定日誌中是否有該 時間點
(2)按行數截取
sed -n ‘10000,20000p’ test.log
sed -i '/關鍵詞/d' catalina.out 刪除包含關鍵詞的行
4.應用場景三:日誌內容特別多,打印在屏幕上不方便查看(1)使用more和less命令,
如: cat -n test.log |grep "debug" |more 這樣就分頁打印了,經過點擊空格鍵翻頁
(2)使用 >xxx.txt 將其保存到文件中,到時能夠拉下這個文件分析
如:cat -n test.log |grep "debug" >debug.txt
5:使用管道進行and or條件處理
and 使用管道實現 例如: grep -n '日誌排查' test.log | grep '日誌'
or 用-E 例如:grep -n -E '日誌排查|hello' test.log 知足兩個關鍵字的均可以找出來
6:如何看查佔用cpu最多的進程?
方法一
核心指令:ps
實際命令:
ps H -eo pid,pcpu | sort -nk2 | tail
執行效果以下:
[work@test01 ~]$ ps H -eo pid,pcpu | sort -nk2 | tail
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
30904 1.0
30914 1.0
結果:
瞧見了吧,最耗cpu的pid=30914。
畫外音:其實是31396。
方法二
核心指令:top
實際命令:
top
Shift + t
7:找到了最耗CPU的進程ID,對應的服務名是什麼呢?
方法一
核心指令:ps
實際命令:
ps aux | fgrep pid
執行效果以下:
[work@test01 ~]$ ps aux | fgrep 30914
work 30914 1.0 0.8 309568 71668 ? Sl Feb02 124:44 ./router2 –conf=rs.conf
結果:
瞧見了吧,進程是./router2
畫外音: grep 和fgrep的區別?
二者都是搜索工具,但功能上有區別。
1,首先,grep支持的是標準正則表達式。
2,fgrep,不支持正則表達式,只用於匹配固定字符串。
因此後者要比前者速度快,固然同時後者的搜索功能要弱於前者。
方法二
直接查proc便可。
實際命令:
ll /proc/pid
執行效果以下:
[work@test01 ~]$ ll /proc/30914
lrwxrwxrwx 1 work work 0 Feb 10 13:27 cwd -> /home/work/im-env/router2
lrwxrwxrwx 1 work work 0 Feb 10 13:27 exe -> /home/work/im-env/router2/router2
畫外音:這個好,全路徑都出來了。
8:如何查看某個端口的鏈接狀況?
方法一
核心指令:netstat
實際命令:
netstat -lap | fgrep port
執行效果以下:
[work@test01 ~]$ netstat -lap | fgrep 22022
tcp 0 0 10.58.xxx.29:22022 *:* LISTEN 31396/imui
tcp 0 0 10.58.xxx.29:22022 10.58.xxx.29:46642 ESTABLISHED 31396/imui
tcp 0 0 10.58.xxx.29:22022 10.58.xxx.29:46640 ESTABLISHED 31396/imui
方法二
核心指令:lsof
實際命令:
lsof -i :port
執行效果以下:
[work@test01 ~]$ /usr/sbin/lsof -i :22022
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
router 30904 work 50u IPv4 69065770 TCP 10.58.xxx.29:46638->10.58.xxx.29:22022 (ESTABLISHED)
router 30904 work 51u IPv4 69065772 TCP 10.58.xxx.29:46639->10.58.xxx.29:22022 (ESTABLISHED)
router 30904 work 52u IPv4 69065774 TCP 10.58.xxx.29:46640->10.58.xxx.29:22022 (ESTABLISHED)