Linux下查看日志用到的常用命令
ps -ef | grep java (先查java進程ID)
kill -9 PID(生產環境謹慎使用)
kill、killall、pkill命令的區別
kill:通過pid來殺死進程
killall (killall [參數] [進程名]):Linux系統中的killall命令用於殺死指定名字的進程(kill processes by name)。我們可以使用kill命令殺死指定進程PID的進程,如果要找到我們需要殺死的進程,我們還需要在之前使用ps等命令再配合grep來查找進程,而killall把這兩個過程合二為一,是一個很好用的命令。
pkill:pkill 和killall 應用方法差不多,也是直接殺死運行中的程式;如果你想殺掉單個進程,請用kill 來殺掉。例子: pkill -9 firefox
tail -n 10 test.log 查詢日志尾部最后10行的日志;
tail -n +10 test.log 查詢10行之后的所有日志;
head:
跟tail是相反的,tail是看后多少行日志;例子如下:
head -n 10 test.log 查詢日志文件中的頭10行日志;
head -n -10 test.log 查詢日志文件除了最后10行的其他所有日志;
cat:
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
top 命令類似於 Windows 的任務管理器,能夠顯示 Linux 系統中運行的進程的動態實時視圖。
默認情況下,top 輸出結果是按 CPU 占用進行排序,每 5s 更新一次結果。我們可以使用 top-b|head-50
顯示排前 50 的占用 CPU 最高的進程( Linux 中如何找出 CPU 占用高的進程
)。

上面的命令解釋如下:
-
-b:批次檔模式
-
head -50:顯示輸出結果的前 50 個
-
PID:進程的 ID
-
USER:進程的歸屬者
-
PR:進程的等級
-
NI:進程的 NICE 值
-
VIRT:進程使用的虛擬內存
-
RES:進程使用的物理內存
-
SHR:進程使用的共享內存
-
S:這個值表示進程的狀態: S = 睡眠,R = 運行,Z = 僵屍進程
-
%CPU:進程占用的 CPU 比例
-
%MEM:進程使用的 RAM 比例
-
TIME+:進程運行了多長時間
-
COMMAND:進程名字
如果想看進程的完整信息,可以加 -c 參數,如 top-b-c|head-50
使用 ps
ps 就是進程狀態的縮寫,可以顯示當前運行進程的詳細信息,如用戶名、用戶 ID、CPU 使用率、內存使用、進程啟動日期時間、命令名等等。
使用 ps-eo pid,ppid,%mem,%cpu,cmd--sort=-%cpu|head
可以顯示占用 CPU 較高的進程信息(注意 --sort=-%cpu
)。如下:
# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head PID PPID %MEM %CPU CMD 18527 1714 4.2 40.3 /usr/lib/firefox/firefox -contentproc -childID 18 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab 1714 1152 5.6 8.0 /usr/lib/firefox/firefox --new-window 18324 1714 4.9 6.3 /usr/lib/firefox/firefox -contentproc -childID 16 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab 3286 1714 2.0 5.1 /usr/lib/firefox/firefox -contentproc -childID 14 -isForBrowser -prefsLen 8078 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab 1783 1714 3.0 4.5 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab 1227 1152 2.3 2.5 /usr/bin/gnome-shell 1170 1168 3.5 2.2 /usr/lib/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3 16865 1714 2.5 2.1 /usr/lib/firefox/firefox -contentproc -childID 15 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab 2179 1714 2.7 1.8 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 7821 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab
上命令的解釋如下:
-
-e:選擇所有進程
-
-o:自定義輸出格式
-
–sort=-%cpu:基於 CPU 使用率對輸出結果排序
-
head:顯示結果的前 10 行
-
PID:進程的 ID
-
PPID:父進程的 ID
-
%MEM:進程使用的 RAM 比例
-
%CPU:進程占用的 CPU 比例
-
Command:進程名字
如果想看命令名字而不是命令的絕對路徑,可以:
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)
9:歸檔壓縮文件導出指定內容到文件
命令: zcat 壓縮文件 |grep '關鍵詞' > 111.txt