альтернативы для команды "lsof"?

<p>во многих случаях "lsof" не установлен на машинах, с которыми мне приходится работать, но "функция" lsof будет очень нужна (например, в aix). : \</p><p>есть ли какие-либо "lsof" подобные приложения в мире не-windows?</p><p>обновление: например: мне нужно знать, какие процессы используют каталог "/ home/username"?</p>

<p>я знаю о <a href="http://en.wikipedia.org/wiki/fuser\_%28unix%29"><code>fuser</code></a> , посмотрите, доступно ли в вашей системе.</p>

<p> <a href="http://bhami.com/rosetta.html">nix rosetta stone</a> - хороший ресурс для вопросов такого рода. в нем упоминается несколько альтернатив для <a href="http://people.freebsd.org/~abe/">lsof</a> (см. ниже). однако обратите внимание, что lsof является де-факто стандартным приложением для того, что он делает.</p><p>если все, что вам нужно, это найти идентификаторы процессов, в которых открыт определенный файл, то вы можете использовать <a href="http://pubs.opengroup.org/onlinepubs/009695399/utilities/fuser.html"><code>fuser</code></a> в любой posix-совместимой системе.</p><p>в операционных системах с <code>/proc</code>, вы можете запрашивать файлы, открытые процессом (в противоположность наиболее распространенному режиму работы <code>lsof</code>), через информацию в <code>/proc</code>. некоторые операционные системы имеют команды для этого:</p><ul> <li>aix: <a href="http://publib.boulder.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.cmds/doc/aixcmds4/procfiles.htm"><code>procfiles</code></a> поставляется с системой (начиная с aix 5.2). см. также <a href="http://www.ibm.com/developerworks/systems/articles/aix5.2perftools.html#pfs">обновление инструментов производительности aix 5.2</a> и <a href="https://www-304.ibm.com/support/docview.wss?uid=swg21306599">использование и примеры команд lsof, pfiles, procfiles</a> .</li> <li> <a href="http://www.oracle.com/technetwork/documentation/legacy-solaris-192993.html">solaris</a> : <code>pfiles</code> (существует <a href="http://download.oracle.com/docs/cd/e19641-01/802-1930-01/802-1930-01.pdf">с версии 2.5</a> ).</li> </ul>

<p>если вы запустили solaris, альтернативой <code>lsof</code>, которая по умолчанию не установлена и может подавиться в zfs, является <code>pfiles</code>.</p><p>например:</p><p><code>pfiles /proc/*</code></p>

<p>моя версия, с чуть меньшим количеством утилит:</p><pre><code>for proc\_pid in $(find /proc -maxdepth 1 -name "[0-9]"); do  ls -l ${proc\_pid}/fd 2>/dev/null \ | grep -q "$search_term"  && echo "${proc\_pid#/proc/}"; \ done </code></pre><p>по общему признанию, это может не обработать все угловые случаи, но работает в моем случае использования.</p>

<p>это должно сделать свое дело. это даст все сопоставления дескриптора файла, кроме тех, которые:</p><ul> <li>у вас нет разрешения на просмотр, или</li> <li>для файлов, которые содержат строку "отказано в доступе"</li> </ul><pre class="lang-bsh prettyprint-override"><code>( find /proc -mindepth 1 -maxdepth 1 \ | grep -e [0-9]+ | xargs -n 1 -i% find %/fd \ | xargs ls -l \ | grep -v "permission denied" ) 2>/dev/null \ | cut -d' ' -f12- | less </code></pre><p>если вы уже знаете, что заботитесь только о сопоставлениях для определенных программ, вместо этого вы можете использовать что-то более похожее на:</p><pre><code>exec=sshd pgrep "$exec" | xargs -n 1 ps -p pgrep "$exec" | xargs -n 1 -i% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less </code></pre>