Como faço pra executar meu programa compilado no terminal só pelo nome (sem usar "./")? [RESOLVIDO]

1. Como faço pra executar meu programa compilado no terminal só pelo nome (sem usar "./")? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/11/2016 - 21:59h

Pode parecer uma pergunta tola pra alguns, mas queria saber como eu faço pra que o meu programa seja executado como qualquer outro que instalei no meu linux, apenas pelo nome. Imagino que seja preciso colocar o executável em um certo diretório. Enfim, qual a maneira mais usual de fazer isso?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/11/2016 - 06:21h

listeiro_037 escreveu:

Isto não é seguro.

Você tem de colocar o caminho do diretório do programa no $PATH

Algo como digitar no terminal


PATH=$PATH:$HOME

ou

PATH=$PATH:/home/user


O perigo é que possa haver algum arquivo com o mesmo nome de um comando no mesmo diretório sendo possível executá-lo por engano.


Respeitosamente discordo em parte do que disse o listeiro_037.

O que é realmente inseguro é colocar como parte da definição da variável PATH o diretório corrente (“.”), especialmente se ele vier antes dos diretórios de sistema na ordem de busca.

Curiosamente, é justamente assim, desse modo inseguro, que o DOS/Windows funciona: sempre busca as coisas primeiro no diretório corrente, e depois começa a varrer os diretórios que compõem a variável PATH. Esse comportamento duvidoso pode ser conseguido no mundo UNIX, usando o seguinte valor de PATH.

# NÃO USE ISSO, POIS É INSEGURO.  ESTÁ AQUI APENAS COMO EXEMPLO!
# O “.” no início da lista de busca orienta a procurar programas primeiro
# no diretório corrente.
PATH=.:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/games/bin
export PATH


Para diminuir a insegurança, mas manter a conveniência, algumas pessoas optam por colocar o diretório corrente no final da lista. Apesar de concordar que melhora o problema um pouco, acho que é muito pouco que se ganha de comodidade, e muito pouco que se reduz o risco.

Bom, mas qual é o risco?

Suponha que você resolva examinar o conteúdo de algum diretório (os casos mais comuns são diretórios públicos, como o /tmp ou home areas de outros usuários, mas pode acontecer em qualquer lugar). Você entra no diretório e, já dentro dele, digita o comando ls. O que aconteceria se alguém deixasse um script ou programa compilado dentro daquele diretório, chamado justamente ls? Você executaria esse comando em lugar do ls do sistema, e esse programa poderia fazer qualquer coisa usando as suas credenciais. Ele poderia, por exemplo, apagar o conteúdo de algum diretório ao qual você tivesse acesso, vasculhar ou modificar arquivos de configuração na sua home area, ou mesmo copiar uma chave de ssh para dentro do seu diretório de configuração, para poder se logar num momento futuro com suas credenciais e sem necessidade de senha.

Agora imagine o tamanho do problema se a mesma coisa acontecer quando você estiver usando uma conta de administrador (e.g. root).

Colocar o diretório corrente no final da lista de PATH ajudaria a minimizar o problema descrito acima, mas não evitaria outros acidentes. Por exemplo, alguém poderia encher o mesmo diretório com scripts cujos nomes seriam variações dos nomes de comandos do sistema, refletindo erros típicos de digitação. Algo como vom ou vmi em lugar de vim, sl ou la em lugar de ls, ou mesmo eixt em lugar de exit.

Por isso, o diretório . nunca deve fazer parte do PATH. Aliás, nenhum diretório que não seja um caminho absoluto deveria jamais ser especificado como parte do PATH.

Por outro lado, caminhos absolutos de diretórios que não sejam abertos para escrita para todo mundo geralmente são considerados seguros. Mas a boa prática sugere que você coloque tais diretórios como parte do valor de PATH da seguinte maneira: primeiro os diretórios do sistema, seguidos pelos diretórios com aplicações especializadas da máquina (por exemplo, se a máquina for um servidor de aplicações, os caminhos referentes à instalação do Java), e por fim os seus diretórios pessoais de programas e scripts.

3. Re: Como faço pra executar meu programa compilado no terminal só pelo nome (sem usar

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/11/2016 - 22:26h

Isto não é seguro.

Você tem de colocar o caminho do diretório do programa no $PATH

Algo como digitar no terminal


PATH=$PATH:$HOME

ou

PATH=$PATH:/home/user


O perigo é que possa haver algum arquivo com o mesmo nome de um comando no mesmo diretório sendo possível executá-lo por engano.

Linux é mais seguro. Não foi feito para se fazer as mesmas coisas que se faz em ambiente DOS.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: Como faço pra executar meu programa compilado no terminal só pelo nome (sem usar "./")? [RESOLVIDO]

Paulo Jr
Pebis

(usa Debian)

Enviado em 15/11/2016 - 22:44h

basta colocar o executável nos diretórios do usuário...

digita no terminal:

echo $PATH

e terá os caminho a serem escaneados para buscar o programa...

algo como /usr/local/bin, mova seu programa para essa pasta "como root" e conseguirá executá-lo somente pelo nome.



5. Re: Como faço pra executar meu programa compilado no terminal só pelo nome (sem usar "./")? [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 16/11/2016 - 08:19h

Bom dia.

Eu tenho uma pasta $HOME/bin, e meu $HOME/.bashrc tem no início:


[ -d $HOME/bin ] && PATH=$HOME/bin:$PATH


Eu coloco o meu diretório bin antes da PATH porque tenho alguns wrappers em comandos do sistema, como cat, ls, find, mkdir, etc (fazem parte de um experimento pessoal de organização integrada - e também porque sou doido). Como já foi dito, a "melhor prática" é coloca-lo depois da PATH:


[ -d $HOME/bin ] && PATH=$PATH:$HOME/bin


Você também pode usar uma funcionalidade do bash para executar uma função caso não encontre o comando:


function command_not_found_handle()
{
echo "This command was not found: $@"
[ -f $@ ] && vim $@
}


command_not_found_handle é um gancho interno do bash, e ele executa essa função se a mesma estiver definida toda vez que um comando não for encontrado.
No meu caso, testo se o arquivo é um arquivo regular, caso seja, abro com o vim (98% do meu tempo é passado no terminal editando arquivos com o vim, então faz sentido não ter que digitar vim toda hora... as vezes abro um binário, mas isso é um pequeno preço a se pagar). Se quiser olhar mais a fundo, nos fontes do bash essa funcionalidade é definida em execute_cmd.c.

Existem diversas formas de configurar o bash (muitas mesmo). Da mesma forma que abro o arquivo, você pode executar um, ou melhor ainda, criar um pequeno script para perguntar ao usuário o que fazer em uma lista de opções (editar, excluir, executar, etc).

Como o paulo1205 já disse, alterar o funcionamento do shell (especialmente o caminho de procura) é perigoso e deveria ser feito apenas depois de cuidadosa análise!

Enzo Ferber
[]'s



$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right."
- linux/Documentation/CodingStyle - TORVALDS, Linus.



6. Re: Como faço pra executar meu programa compilado no terminal só pelo nome (sem usar "./")? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/11/2016 - 21:02h

Pronto, era exatamente o que eu queria, compreender bem como isso funciona no linux. Valeu pessoal!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts