Você pode usar pgrep sudo
para obter todos os processos sudo e, em seguida, ps h --ppid $THEPID -o pid
para obter seus processos filhos e, finalmente, pwdx $SUBPID
para obter o diretório de trabalho desses subprocessos.
Você pode resumir em dois loops forçados, que podem ter a seguinte aparência:
for sudo in 'pgrep sudo'; do
sudo pwdx $sudo;
for subsudo in 'ps h --ppid $sudo -o pid'; do
sudo pwdx $subsudo
done
done
Como você obtém apenas uma geração de processos filhos com cada chamada de ps
, os números de processos de processos filhos devem ser obtidos recursivamente.
O script a seguir faz isso:
#!/bin/bash
function getchildren()
{
echo $1
children='ps h --ppid $1 -o pid'
if [[ -n $children ]]; then
for child in $children; do
getchildren $child
done
fi
}
for sudo in 'pgrep sudo'; do
for subsudo in 'getchildren $sudo'; do
sudo pwdx $subsudo
done
done | sort | uniq
A saída é classificada e linhas duplas são removidas no caso de alguém executar um processo sudo
dentro de uma sessão sudo su
.