Diferença entre a.out e ./a.out

5

Minha confusão

a.out é a saída dos programas que eu executo no meu Ubuntu 12.10. No sistema Red Hat quando executo a.out no terminal que ele executa. Enquanto no Ubuntu eu tenho que executar ./a.out para obter a saída. 'a.out' não funciona.

Alguém pode explicar qual é a diferença entre os comandos?

    
por Munai Das Udasin 04.08.2013 / 18:48

1 resposta

15

O comportamento que você enfrenta provavelmente depende de diferenças na variável de ambiente $PATH . O $PATH é essencialmente uma lista de diretórios separados por dois-pontos, que são pesquisados em ordem para um executável específico quando um programa é invocado usando uma chamada do sistema operacional exec . O $PATH pode conter componentes de caminho relativos, normalmente . ou uma cadeia vazia, que se referem ao diretório de trabalho atual. Se o diretório atual for parte de $PATH , os arquivos no diretório de trabalho atual poderão ser executados apenas pelo nome, por exemplo, %código%. Se o diretório atual não estiver em a.out , deve-se especificar um caminho relativo ou absoluto para o executável, por exemplo, $PATH .

Ter componentes relativos do caminho em ./a.out tem possíveis implicações de segurança, pois os executáveis nos diretórios anteriores em $PATH executam os diretórios em diretórios posteriormente na lista. Considere, por exemplo, um ataque a um sistema em que o caminho atual do diretório de trabalho $PATH precede . em /bin . Se um invasor conseguir colocar um script mal-intencionado compartilhando um nome com um utilitário de sistema comumente usado, por exemplo $PATH , no diretório atual (que geralmente é muito mais fácil substituir binários em ls de propriedade da raiz), o usuário inadvertidamente, invoca o script malicioso quando a intenção é invocar o sistema /bin . Mesmo se ls for anexado apenas no final de . , um usuário pode ser enganado para invocar inadvertidamente um executável no diretório atual que compartilhe um nome com um utilitário comum não encontrado nesse sistema específico. É por isso que é comum não ter componentes de caminho relativos como parte do padrão $PATH .

    
por 04.08.2013 / 18:52