<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bash on Sysadminium</title><link>https://blog.sysadminium.ru/tags/bash/</link><description>Recent content in Bash on Sysadminium</description><generator>Hugo</generator><language>ru-ru</language><lastBuildDate>Fri, 12 Mar 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.sysadminium.ru/tags/bash/index.xml" rel="self" type="application/rss+xml"/><item><title>Bash скрипт получения числа открытых файлов пользователя</title><link>https://blog.sysadminium.ru/docs/linux/cli_bash/bash-script-openfiles/</link><pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate><guid>https://blog.sysadminium.ru/docs/linux/cli_bash/bash-script-openfiles/</guid><description>&lt;h2 id="введение"&gt;Введение&lt;/h2&gt;
&lt;p&gt;Узнать сколько открытых файлов у определённого пользователя бывает необходимо для отладки службы, работающей под определённым пользователем.&lt;/p&gt;
&lt;p&gt;В качестве параметра скрипту необходимо передать &lt;strong&gt;имя&lt;/strong&gt; или &lt;strong&gt;uid&lt;/strong&gt; пользователя. Скрипт будем использовать следующими способами:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;./openfiles.sh -h&lt;/code&gt; — показать справку;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./openfiles.sh &amp;lt;имя_или_uid&amp;gt;&lt;/code&gt; — показать число открытых файлов linux.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="текст-скрипта"&gt;Текст скрипта&lt;/h2&gt;
&lt;p&gt;Вот сам скрипт:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/bin/bash

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

*)
if [[ &amp;#34;$#&amp;#34; -eq 1 ]];
then
 id &amp;#34;$1&amp;#34; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1
 if [[ $? -ne 0 ]]; then
 echo &amp;#39;Пользователь не найден!&amp;#39;
 exit 1
 fi
 for pid in `ps -u &amp;#34;$1&amp;#34; -o pid,comm | grep -v PID | awk &amp;#39;{print $1}&amp;#39;`
 do
 open_files=`ls -l /proc/$pid/fd | grep &amp;#34;anon_inode&amp;#34; | wc -l`
 echo &amp;#34;Открытых файлов для pid $pid: $open_files&amp;#34;
 done
else
 echo -e &amp;#34;Забыли указать имя или id пользователя!
Или ввели больше одного параметра.
Для справки выполните $0 -h&amp;#34;
fi
;;

esac
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если скрипт получит параметр &lt;code&gt;-h&lt;/code&gt;, то с помощью &lt;code&gt;echo&lt;/code&gt; просто выведет справку.&lt;/p&gt;</description></item></channel></rss>