É possível executar um binário sem especificar o caminho completo ou o precedente './'?

1

Fora de um shell, como executar algum outro processo, o que significa o termo current directory e é possível executar um binário sem especificar o caminho completo ou o './' precedente, supondo que o current directory contém o executável?

    
por vfclists 21.05.2015 / 15:05

4 respostas

2

Sim, é possível configurar o caminho de pesquisa adequadamente (seja contendo o diretório de trabalho explicitamente ou contendo "./"), mas é uma boa prática ter o "./" na frente do nome do programa. O motivo é a segurança: um malware pode gravar um arquivo executável com o nome de um programa comumente usado (por exemplo, ls ) e a próxima chamada para ls executará a cópia local em vez de /bin/ls . Portanto, as configurações padrão do PATH no UNIX não contêm "./".

    
por 21.05.2015 / 16:21
2

Você deve definir melhor o que é o "outro processo" e o método usado para iniciar um programa.

Em qualquer caso, o diretório de trabalho atual é uma propriedade de cada processo em execução, portanto, ele pode ser usado para localizar um programa a ser executado. Se é seguro implementá-lo dessa maneira é questionável.

    
por 21.05.2015 / 15:08
1

Bem, uma solução rápida seria criar um alias. Essa criação pode ser adicionada ao .bashrc para que seja adicionada durante a inicialização.

    
por 21.05.2015 / 15:16
1

O kernel Unix / Linux / * BSD sempre acompanhou o diretório de trabalho. As chamadas do sistema chdir() e fchdir() estão disponíveis desde que a linguagem C existe.

Se você escrever um programa em linguagem C e usar execve() , cabe ao seu programa especificar o argumento filename de execve() . O kernel encontrará executáveis no diretório de trabalho atual, ou em relação a ele, se você der um argumento de nome de arquivo como "algum_executável" ou "subdir / algum_executável", o kernel encontrará o executável (se existir e for executável).

Eu percebo que os shells modernos (pelo menos zsh) borram um pouco o diretório de trabalho atual para poder cd em um link simbólico e cd .. para o diretório que contém o link simbólico, mas o rastreamento baseado em kernel do diretório de trabalho atual ainda está presente. Em máquinas linux você pode ls -l /proc/$$/cwd para ver exatamente o que o kernel acha que o diretório é chamado.

    
por 21.05.2015 / 18:15