lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。如TCP和UDP等,系統在後臺都爲該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符爲應用程序與基礎操作系統之間的交互提供了通用接口。因爲應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。
常見的使用方式:
-
$lsof abc.txt //顯示開啓文件abc.txt的進程
-
$lsof -c abc //顯示abc進程現在打開的文件
-
$lsof -c -p 1234 //列出進程號爲1234的進程所打開的文件
-
$lsof -g gid //顯示歸屬gid的進程情況
-
$lsof +d /usr/local/ //顯示目錄下被進程開啓的文件
-
$lsof +D /usr/local/ //同上,但是會搜索目錄下的目錄,時間較長
-
$lsof -d 4 //顯示使用fd爲4的進程
-
$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 --> 端口號 (可以不止一個)
#!/bin/sh
#example
#Find which process /dev/dri/card0 is occupied by
#./find_file.sh /dev/dri/card0
if [ $# -ne 1 ]
then
echo "Incorrect number of parameters, please add a parameter."
echo "example:Find which process /dev/dri/card0 is occupied by"
echo "./find_file.sh /dev/dri/card0"
exit 1
fi
for process in /proc/*
do
if [ ! -e ${process}/fd ]
then
continue
fi
str=`ls -l ${process}/fd | grep "$1"`
if [ -n "$str" ]
then
echo $process >> tt.log
echo $process
fi
done
find_file.sh 查看文件佔用 pid
while true; do if [ ! -f "/data/files/upstock_stat_SZ.txt" ]; then echo `date +%Y-%m-%d' '%H:%M:%S.%N`-file no ; fi ; sleep 0.1 ; done