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指令查看,能對系統的運作,有更深入的了解.