INUX如何查看端口的占用情況?
有時候,一個服務器用了很長一段時間,一些程序占用了哪些端口,一時間會想不起來,在安裝一些新 軟件的時候,會造成端口被占用的情況。當然,有作記錄習慣的同鞋,可以無視這個文章,當然,如果也想了解一下,就繼續看下去吧。LINUX環境下,只要輸 入一個命令,就一目發然了。
這個命令就是lsof ,因為 lsof 需要訪問核心內存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能。
lsof [options] filename
如果提示沒有安裝lsof這個命令,CentOS可以執行:yum install lsof 安裝,Debian可以執行:apt-get install lsof 安裝。
lsof filename 顯示打開指定文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字符的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程打開的文件
lsof +D /DIR/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定文件描述符的進程
lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 –> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4地址
service –> /etc/service中的 service name (可以不只一個)
port –> 端口號 (可以不只一個)
例如: 查看22端口現在運行的情況
[root@ymhsky ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 1052 root 3u IPv6 2547 TCP *:ssh (LISTEN)
sshd 18884 root 3u IPv6 509471 TCP ymhsky:ssh->116.22.255.162:64630 (ESTABLISHED)
每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
TYPE:文件類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱
查看端口占用情況,只是他的其中一個功能,lsof 的功能還有很多,日后有時間,再為大家介紹一下,當然,大家也可以自己去查找一下。