iT邦幫忙

DAY 24
2

蠻可愛的指令與程式系列 第 24

好用的lsof指令

lsof是列出關於檔案的訊息.
在UNIX中,檔案佔有很重要地位.
設備也好,網路也好,其實都是當作檔案來處理的.
所以雖然是關於檔案的指令,實際上也可以運用在網路方面.
我們來看一下lsof吧.

最簡單的方式當然就是 lsof,不帶參數,會列出一堆目前
運作中的檔案,及其相關的訊息.

接著來看一下一些運用方式.

切換至root身份,查到的資訊較為完整.

看目前的網路連線,有點類似netstat

lsof -i

只看 TCP連線

lsof -iTCP

查看 指定的port,及其daemon

lsof -i:22

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2126 root    3u  IPv4  14372      0t0  TCP *:ssh (LISTEN)
sshd    2126 root    4u  IPv6  14374      0t0  TCP *:ssh (LISTEN)

可以看到 port 22, 是sshd在聽的.而且會顯示IPv4與IPv6

看一下 port 3306

lsof -i:3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2690 mysql   12u  IPv4  14831      0t0  TCP *:mysql (LISTEN)

是MySQL Daemon,而且只聽Ipv4的.

查看目前系統中有在聽的port,及其對應的Daemon

lsof -i -sTCP:LISTEN

查看目前系統中在通訊中(ESTABLISHED)的port,及其對應的process,不一定是Daemon

lsof -i -sTCP:ESTABLISHED

列出其中一項,可以觀察到正在使用skype
skype     3914    asami   95u  IPv4 908529      0t0  TCP asami:38749->111-240-198-20.dynamic.hinet.net:43156 (ESTABLISHED)

列出使用者打開的檔案

我們以mysql做例子,這樣就可以查看到有開啟哪些檔案了.

lsof -u mysql

會列出很多檔案,這對我們了解MySQL運作情況,很有幫助.

同樣的 

lsof -u postgres 
lsof -u cassandra

也都能提供開啟檔案的情況,有助於深入了解.


列出檔案相關的訊息

我們以系統log為例 

lsof +D /var/log/
COMMAND     PID      USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
rsyslogd   1668      root    1w   REG  253,0   548447 1706843 /var/log/messages
rsyslogd   1668      root    2w   REG  253,0    24548 1712000 /var/log/secure
rsyslogd   1668      root    4w   REG  253,0   105708 1704125 /var/log/cron
rsyslogd   1668      root    5w   REG  253,0     5582 1706804 /var/log/maillog
java       1817 cassandra   45w   REG  253,0   157836 2107301 /var/log/cassandra/system.log
以下還有,省略.

可以看到/var/log/目錄下,哪些daemon及其對應的log檔.

也可以查看哪個process目前開啟的檔案.

以 rsyslogd 為例,可以看到上面的PID是 1668

lsof -p 1668

結果不列出.

由上面的例子可以看到,不管是網路,檔案,process,及其之間的關係,
我們善用lsof指令查看,能對系統的運作,有更深入的了解.


上一篇
效能監看工具nmon介紹2
下一篇
與DNS相關的指令
系列文
蠻可愛的指令與程式30

尚未有邦友留言

立即登入留言