Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Linux

Bash cкрипт получения числа открытых файлов пользователя : Linux

04.12.2024 11:34


20.11.2023 14:13
Bash cкрипт получения числа открытых файлов пользователя

Данный скрипт позволяет узнать сколько открытых файлов у определённого пользователя Linux. Это бывает необходимо для отладки службы, работающей под определённым пользователем.

В качестве параметра скрипту необходимо передать имя или uid пользователя.

Скрипт будем использовать следующими способами:

./openfiles.sh -h — показать справку;
./openfiles.sh <имя_или_uid> — показать число открытых файлов.

Вот сам скрипт:
Код:
#!/bin/bash

case "$1" in
-h)
echo -e "Скрипт покажет открытые файлы для выбранного пользователя.
Опции:
 -h показать эту справку.
Примеры выполнения:
./files2.sh <username>
./files2.sh <uid>"
;;

*)
if [[ "$#" -eq 1 ]];
then
   id "$1" >/dev/null 2>&1
   if [[ $? -ne 0 ]]; then
   echo 'Пользователь не найден!'
   exit 1
   fi

   for pid in `ps -u "$1" -o pid,comm | grep -v PID | awk '{print $1}'`
   do
      open_files=`ls -l /proc/$pid/fd | grep "anon_inode" | wc -l`
      echo "Открытых файлов для pid $pid: $open_files"
   done
else
   echo -e "Забыли указать имя или id пользователя!
Или ввели больше одного параметра.
Для справки выполните $0 -h"
fi
;;

esac
Если скрипт получит параметр -h, то с помощью echo просто выведет справку.

Если скрипт получит всего один любой другой параметр, то он будет считаться именем пользователя. В этом случае, если такого пользователя в системе не будет, то скрипт скажет об этом.

Если скрипт получит не 1, а больше или меньше параметров, то эта ситуация также будет обработана.

Весь код по получению открытых файлов заключен в этих строчках:

Код:
for pid in `ps -u "$1" -o pid,comm | grep -v PID | awk '{print $1}'`
do
   open_files=`ls -l /proc/$pid/fd | grep "anon_inode" | wc -l`
   echo "Открытых файлов для pid $pid: $open_files"
done
То есть мы пробегаемся по всем процессам данного пользователя, и для каждого процесса (pid) вычисляем количество открытых файлов.
Часовой пояс GMT +3, время: 11:34.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.