FreeBSD Jails: extending jls command

JLS is a very useful tool about getting information about jails, unfortunately, it delivers only parameters of the jails that were defined.

The jls utility lists all active jails, or the specified jail.  Each jail
     is represented by one row which contains space-separated values of the
     listed parameters, including the pseudo-parameter all which will show all
     available jail parameters.  A list of available parameters can be re-
     trieved via "sysctl -d security.jail.param".  See jail(8) for a descrip-
     tion of some core parameters.

I was looking for a tool that would provide real-time information about running jails. The basic command that provides information might be ‘ps -J <jailname>’ But I wanted to have this under one script.

#!/usr/local/bin/bash

printf "   %-4s %-15s %-28s  %-36s  %-10s  %-12s  %-10s\n"       "JID"  "IP Address" "Hostname" "Path" "Memory" "Virtual Mem" "Disk"
for JID in `jls | grep -v JID | awk '{print $1}'`
do
a=`jls -j $JID | sed 1d`
b=`ps -J $JID -o rss | awk '{rss += $1} END {print rss}'`
v=`ps -J $JID -o vsz | awk '{cpu += $1} END {print cpu}'`
m=`jls -j $JID | sed 1d | awk '{print $4}'`
d=`zfs list -H -o used $m`

printf "%-90s  %-10s  %-12s  %-10s\n" "$a" "$(( ${b%% *} / 1024)) MB" "$(( ${v%% *} / 1024)) MB" "$d"
done

Download from git https://github.com/spagu/jls2/blob/master/jls2.sh