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

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

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

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

Вот сам скрипт (удобнее нажать кнопочку «extern«):

#!/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) вычисляем количество открытых файлов. Подробнее о таких циклах я уже писал в статье «Обработка строк циклом «for line in comand»«

# ./files2.sh 1000
Открытых файлов для pid 600: 6
Открытых файлов для pid 618: 6
Открытых файлов для pid 878: 2274
Открытых файлов для pid 1112: 3

* * *

Если есть замечания по улучшению этого скрипта, пишите в комментариях!

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *