Посчитать количество открытых каждым пользователем файлов

Необходимо посчитать количество открытых файлов по каждому пользователю. и вывести в формате $user: $openfiles' '$zombies

для всех пользователей считал

#!/bin/bash    
openfiles=$(/usr/sbin/lsof | wc -l)
zombies=$(/usr/sbin/lsof | grep 'deleted' | wc -l)
cho $openfiles';'$zombies 

попробовал

#!/bin/bash
for var in $(compgen -u)
do
openfiles=$(lsof -u $var  | wc -l)
zombies=$(lsof -u $var | grep 'deleted' | wc -l)
echo $var $openfiles';'$zombies
done

Но выводятся явно не все, если первый выводит 3,8kk, то по пользователем и если просуммировать где то 35k, не могу понять в чем ошибка, compgen выводит не всех пользователей?


Ответы (1 шт):

Автор решения: Андрей Котов

Оказалось lsof -u выводит не все типы файлов *насколько я понял. Решил так:

#!/bin/bash
lsof > /tmp/lsof_output
for var in $(compgen -u)
do
openfiles=$(cat /tmp/lsof_output | grep $var | wc -l)
zombies=$(cat /tmp/lsof_output | grep $var | grep 'deleted' | wc -l)
echo $var $openfiles':'$zombies
done
rm -f /tmp/lsof_output
→ Ссылка