Search code examples
linuxunixcommandsolarisequivalent

Equivalent lsof -i in Solaris


I have a fast question. I want to know what is the losf -i equivalent command in a Solaris system.

I only want to show the files with network connection.

Thank you!!


Solution

  • Here is a shell script that list all processes having open TCP or UDP ports on Solaris, you can limit it to a given port number by passing it as an argument:

    pfiles /proc/* 2>/dev/null | nawk -v port=$1 '
        /^[0-9]/ { cmd=$2; type="unknown"; continue }
        $1 == "SOCK_STREAM" { type="tcp" }
        $1 == "SOCK_DGRAM" { type="udp" }
        $2 ~ "AF_INET" { if((port!="")&&($5!=port)) continue;
                          if(cmd!="") { printf("%s\n",cmd); cmd="" }
                          printf("    %s:%s/%s\n",$3,$5,type); }'
    

    Note: As documented in the warning section of the pfiles manual page, it is not recommended to run this command on a heavily loaded production system with a time sensitive process running as deadlocks or crashes might happen.

    Note #2: The previous warning doesn't apply to the last update of Solaris (Oracle Solaris 11.4) because pfiles no more suspend the monitored process(es). It now just uses ad hoc /proc pseudo files.