Sei de fuser
, veja se está disponível no seu sistema.
Em muitos casos, o "lsof" não está instalado nas máquinas com as quais tenho que trabalhar, mas a "função" do lsof seria muito necessária (por exemplo, no AIX). : \
Existe algum "lsof" como aplicativos no mundo que não é o windows?
ATUALIZAÇÃO: por ex .: Eu preciso saber que processos usam o diretório "/ home / username"?
Sei de fuser
, veja se está disponível no seu sistema.
A Unix Rosetta Stone é um bom recurso para este tipo de perguntas. Ele menciona algumas alternativas para lsof (veja abaixo). No entanto, lsof não é o aplicativo padrão de fato para o que faz.
Se tudo o que você quer é encontrar o (s) ID (s) do processo que possuem um arquivo em particular aberto, então você pode usar fuser
em qualquer sistema compatível com POSIX.
Em sistemas operacionais com um diretório /proc
, é possível consultar os arquivos abertos por um processo (o inverso do modo de operação mais comum do lsof
) por meio de informações em /proc
. Alguns sistemas operacionais têm comandos para isso:
procfiles
é enviado com o sistema (desde o AIX 5.2). Consulte também Atualização das ferramentas de desempenho do AIX 5.2 e Usage e exemplos de comandos lsof, pfiles, procfiles . pfiles
(existente desde 2.5 ). Se acontecer de você executar o Solaris, uma alternativa para lsof
, que não é instalada por padrão e pode ser bloqueada no ZFS, é pfiles
.
por exemplo:
pfiles /proc/*
Isso deve fazer o truque. Ele fornecerá todos os mapeamentos de descritores de arquivos, exceto aqueles que:
( 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
Se você já sabe que só se importa com os mapeamentos de certos programas, você poderia usar algo mais como:
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
Minha versão, com apenas um pouco menos de utilitários:
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
Evidentemente, ele pode não lidar com todos os casos específicos, mas está funcionando no meu caso de uso.