Посчитать количество открытых каждым пользователем файлов
Необходимо посчитать количество открытых файлов по каждому пользователю.
и вывести в формате $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