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

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