Por que usamos o ./progname em sistemas * nix para executar um programa?

5

Eu tenho usado o Linux & Mac por algum tempo agora e eu sempre me pergunto - Por que temos que executar um programa como ./progname . Eu sei que o Unix trata cada coisa como um arquivo e armazena o nome do arquivo em uma tabela que aponta para o número de inode do arquivo.

Mas como abc.py é diferente de ./abc.py ?

    
por Utsav 13.04.2011 / 15:01

5 respostas

24

./abc.py significa "Execute o arquivo abc.py que está no diretório atual."

abc.py significa "Execute o arquivo abc.py que você encontrar primeiro no caminho de busca do diretório do shell."

    
por 13.04.2011 / 15:04
16

abc.py precisa estar no caminho de pesquisa do comando (isto é, em um dos diretórios especificados na variável de ambiente PATH ). ./abc.py é um caminho exato: executa abc.py do diretório atual ( . ).

No mundo Unix, é considerado uma prática ruim ter o diretório atual no caminho, pois ele permite ataques maliciosos extremamente simples, onde um executável bem colocado com o nome de um comando Unix comum (ou erros de ortografia comuns) seria inadvertidamente executado por um usuário desavisado.

Por exemplo um exemplo bastante improvável, mas mais ilustrativo, é que quando um invasor pode deixar um executável chamado rm in /tmp e esperar que um administrador do sistema tente esvaziar o diretório /tmp .

    
por 13.04.2011 / 15:04
5

O SO procura o programa para executar em todos os diretórios listados na variável $ PATH. O diretório local "./" geralmente não está no PATH. Você pode adicioná-lo, mas isso tem implicações de segurança.

Se você adicionar "./" ao seu PATH, alguém pode colocar um programa chamado "vi" em um diretório e esperar até que alguém tente editar algo neste diretório com o vi - e o programa seja executado com as permissões do usuário que acabou de ser enganado ... Em um sistema de usuário único, isso pode não ser um problema grave, mas ainda é uma prática ruim.

    
por 13.04.2011 / 15:05
0

Você precisa invocar como ./progname se o diretório de trabalho atual (CWD) não estiver em $ PATH; se o CWD estiver em $ PATH, a invocação do formulário 'progname' funcionará bem.

    
por 13.04.2011 / 15:02
-1

Você só precisa fazer ./abc.py se. não está no seu caminho $. $ path é a variável de ambiente que informa ao seu shell onde procurar por programas quando você os insere como comandos. Você poderia usar um shell diferente que tenha certos locais incorporados, se você quisesse.

    
por 13.04.2011 / 15:04