Linux使用lsof查看文件是否被占用或者端口被占用,bash 一行 if while

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如TCP和UDP等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

 

常见的使用方式:

 
  1. $lsof abc.txt //显示开启文件abc.txt的进程
  2. $lsof -c abc //显示abc进程现在打开的文件
  3. $lsof -c -p 1234 //列出进程号为1234的进程所打开的文件
  4. $lsof -g gid //显示归属gid的进程情况
  5. $lsof +d /usr/local/ //显示目录下被进程开启的文件
  6. $lsof +D /usr/local/ //同上,但是会搜索目录下的目录,时间较长
  7. $lsof -d 4 //显示使用fd为4的进程
  8. $lsof -i //用以显示符合条件的进程情况
  9. $lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
  10.  
  11. 46 --> IPv4 or IPv6
  12. protocol --> TCP or UDP
  13. hostname --> Internet host name
  14. hostaddr --> IPv4地址
  15. service --> /etc/service中的 service name (可以不止一个)
  16. 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

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