Você pode descobrir qual executável será iniciado usando o comando
which <command>
Se você quiser determinar o caminho programaticamente, estará na troca de pilha errada.
Quando eu digito um nome de algum executável na linha de comando e ele inicia, como posso detectar o caminho onde esse executável está localizado?
which
command
localiza o arquivo executável de command
em $PATH
. Infelizmente isso não funcionará como esperado em todos os casos.
Quando command
é um alias ou uma função, você não obterá um resultado correto porque o executável real em execução pode ter um nome completamente diferente. Por exemplo, muitas distribuições do Linux têm o ll
alias definido por padrão. which ll
não encontra nada. Outro caso problemático é quando seu shell se comporta de maneira não padrão e não executa o primeiro command
encontrado no $PATH
.
No Linux, se você quer ter certeza absoluta do caminho do arquivo executável de um processo em execução, então você pode obtê-lo de seu PID (ID do processo; no exemplo abaixo, coloque o número de $PID
):
readlink /proc/$PID/exe
Como obter o número? PID do último processo executado no shell em background é $!
. Pequena demonstração:
sleep 20 &
readlink /proc/$!/exe
Você pode obter PIDs de outros processos, por exemplo, de uma lista de processos usando ps -ef
.
Explicação: /proc/$PID/exe
é um link simbólico para o arquivo executável do processo em execução . O comando readlink
mostra o alvo para o qual o link simbólico está apontando.
Infelizmente, o método readlink /proc/$PID/exe
não funciona como esperado com linguagens de script como bash, Perl, Python, etc. Nesses casos, você obterá o caminho para o interpretador do script (como /bin/bash
) em vez do caminho para o roteiro. Para se aproximar das informações que você pode usar:
cat /proc/$PID/cmdline # the commandline with the interpreter and script
readlink /proc/$PID/cwd # the current working directory
Infelizmente, o diretório de trabalho atual pode mudar desde o início do programa. Alguns intérpretes como o bash podem manter o arquivo de script aberto no descritor 255:
readlink /proc/$PID/fd/255
Qualquer processo pode chamar exec()
, que substitui suas /proc/$PID/exe
, /proc/$PID/cmdline
e outras informações.
Tags linux