netstat命令和ps命令詳解——必須熟練使用

這篇文章寫的不錯:

http://www.cnblogs.com/CheeseZH/p/5169498.html

 

關注Linux的系統狀態,主要從兩個角度出發:

一個角度是系統正在運行什麼服務(ps命令);

另外一個就是有什麼連接或服務可用(netstat命令)。

netstat還可以顯示ps無法顯示的、從inetd或xinetd中運行的服務,比如telnet等。

 

一、ps -ef 命令和ps -aux命令

1.1、ps -ef | grep詳解

ps命令將某個進程顯示出來

grep命令是查找

中間的|是管道命令 是指ps命令與grep同時執行

PS是LINUX下最常用的也是非常強大的進程查看命令

ps -e 此參數的效果和指定"A"參數相同。

ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。 

grep命令是查找,是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。

以下這條命令是檢查java 進程是否存在:ps -ef |grep java

字段含義如下:
UID       PID       PPID      C     STIME    TTY       TIME         CMD

zzw      14124   13991      0     00:38      pts/0      00:00:00    grep --color=auto dae

 

UID      :程序被該 UID 所擁有

PID      :就是這個程序的 ID 

PPID    :則是其上級父程序的ID

C          :CPU使用的資源百分比

STIME :系統啓動時間

TTY     :登入者的終端機位置

TIME   :使用掉的CPU時間。

CMD   :所下達的是什麼指令

 

1.2 ps -aux | grep命令

ps是顯示當前狀態處於running的進程,grep表示在這些裏搜索,而ps aux是顯示所有進程和其狀態。

$ ps aux | grep amoeba        查到amoeba的進程

ps aux輸出格式:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

 

格式說明:

USER: 行程擁有者

PID: pid

%CPU: 佔用的 CPU 使用率

%MEM: 佔用的記憶體使用率

VSZ: 佔用的虛擬記憶體大小

RSS: 佔用的記憶體大小

TTY: 終端的次要裝置號碼 (minor device number of tty)

 

STAT: 該行程的狀態,linux的進程有5種狀態:

D 不可中斷 uninterruptible sleep (usually IO)

R 運行 runnable (on run queue)

S 中斷 sleeping

T 停止 traced or stopped

Z 僵死 a defunct (”zombie”) process

注: 其它狀態還包括W(無駐留頁), <(高優先級進程), N(低優先級進程), L(內存鎖頁).

START: 行程開始時間

TIME: 執行的時間

COMMAND:所執行的指令

1) ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。 
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。 
4)ps -e 此參數的效果和指定"A"參數相同。 
5)ps e 列出程序時,顯示每個程序所使用的環境變量。 
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。 
7)ps -H 顯示樹狀結構,表示程序間的相互關係。 
8)ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。 
9)ps s 採用程序信號的格式顯示程序狀況。 
10)ps S 列出程序時,包括已中斷的子程序資料。 
11)ps -t  指定終端機編號,並列出屬於該終端機的程序的狀況。 
12)ps u  以用戶爲主的格式來顯示程序狀況。 
13)ps x  顯示所有程序,不以終端機來區分。

二、netstat -apn命令

netstat -anp查看端口占用情況

-a,顯示所有

-n,不用別名顯示,只用數字顯示

-p,顯示進程號和進程名

 

三、問題解決

今天發現服務器上Tomcat 8080端口起不來,老提示端口已經被佔用。

使用命令:

ps -aux | grep tomcat

發現並沒有8080端口的Tomcat進程。

使用命令:netstat –apn

查看所有的進程和端口使用情況。發現下面的進程列表,其中最後一欄是PID/Program name 

clip_image002

發現8080端口被PID爲9658的Java進程佔用。

進一步使用命令:ps -aux | grep java,或者直接:ps -aux | grep pid 查看

clip_image004


就可以明確知道8080端口是被哪個程序佔用了!然後判斷是否使用KILL命令幹掉!

方法二:直接使用 netstat   -anp   |   grep  portno

即:netstat –apn | grep 8080

 

ps是顯示當前狀態處於running的進程,grep表示在這些裏搜索,而ps aux是顯示所有進程和其狀態。

$ ps aux | grep amoeba

查到amoeba的進程

 

參考資料:

https://www.cnblogs.com/findbetterme/p/10705133.html

https://www.cnblogs.com/freinds/p/8074651.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章