Socket Statistics ss Command
This is a small collection of useful ss (written by Alexey Kuznetsov of the Russian Nuclear Research Institute) syntax examples that go beyond the basics covered by other sources. Here’s one I use often: it shows established connections to destinations beyond the localhost and its local subnet:
ss --numeric --resolve --options state established \
not dst $(ip -o -f inet addr show | awk '/scope global/ {print $4}') \
and not dst 127.0.0.1 | sed -e "s/[[:space:]]\+/ /g" -e 's/::ffff://g' | \
awk '{print $3,$4}' | grep -v ^Local | column -tSample output:
ncc1701.jedi.local:80 rigby04.embed.ly:41239 ncc1701.jedi.local:80 crawl-66-249-64-147.googlebot.com:54942 ncc1701.jedi.local:80 rigby03.embed.ly:57198 ncc1701.jedi.local:80 rigby05.embed.ly:36197 ncc1701.jedi.local:80 rigby02.embed.ly:36481
A similar example showing process name, PID, and file descriptor. This can be useful if you need to
strace the PID or just kill it.ss --processes --numeric --resolve --options state established \
not dst $(ip -o -f inet addr show | awk '/scope global/ {print $4}') \
and not dst 127.0.0.1 | sed -re "s/[[:space:]]\+/ /g" -e 's/::ffff://g' \
-e 's/timer:\([0-9a-z,]{1,}\)//g' | awk '{print $3,$4,$5}' | grep -v ^Local | \
column -tAnother variation of the above showing output of
ps -ef for each PID:ss --processes --numeric --resolve --options state established \
not dst $(ip -o -f inet addr show | awk '/scope global/ {print $4}') \
and not dst 127.0.0.1 | sed -re "s/[[:space:]]\+/ /g" -e 's/::ffff://g' \
-e 's/timer:\([0-9a-z,]{1,}\)//g' | awk '{print $3,$4,$5}' | \
grep -v ^Local | column -t | egrep -o ",[0-9]{1,}," | sed -e 's/,//g' | \
sort -u | while read pid ; do ps -ef | grep ${pid} | grep -v grep ; doneYou can use the PID information in conjunction with
nethogs and iftop to see who’s eating up your bandwidth.

