Por que alguns comandos "não existem"?

0

Sou um usuário Linux relativamente novo e notei que alguns comandos estão disponíveis apenas para o superusuário - o desligamento, por exemplo. Muitas vezes me confundo quando sei que há um comando, tento executá-lo, mas sou informado de que ele nem existe - mas tudo o que eu precisava era ser root para executá-lo.

Minha pergunta é: por que esses comandos não dizem que você não tem privilégios suficientes para executá-lo ou dizem que precisa ser root? Existe alguma razão técnica para isso ou é apenas do jeito que é?

    
por Ross 16.07.2009 / 12:57

4 respostas

4

A resposta que você provavelmente está vendo indica que os comandos não existem, mas que "não são encontrados":

telemachus ~ $ ifconfig -a
bash: ifconfig: command not found

Algumas mensagens de erro são inúteis, mas esta é relativamente útil. As palavras "não encontradas" informam onde está o problema. Seu shell (no meu caso é Bash, claramente) procura comandos ao longo de sua variável $PATH . O PATH é um conjunto de valores separados por dois pontos. Cada valor é um diretório no qual os programas executáveis (binários) vão, e o shell procura por comandos da esquerda para a direita ao longo dessa cadeia de diretórios. Veja como ver qual é o seu PATH:

telemachus ~ $ echo $PATH
/home/telemachus/bin:/usr/local/bin:/usr/bin:/bin:/usr/games

(Note que maiúsculas e minúsculas, PATH é tudo superior. Também o $ importa.) Então, meu shell procura por comandos no diretório bin em minha pasta pessoal, depois em /usr/local/bin e, em seguida, em /usr/bin A ordem é importante, porque às vezes você terá duas versões de um programa, e você quer ter certeza de encontrar um específico primeiro. (Eu tenho uma versão diferente do Ruby no meu diretório $HOME/bin do que a do sistema, e quero que seja encontrado primeiro.)

Para adicionar um diretório ao seu PATH, normalmente você pode editar o perfil do seu shell. Dependendo da distribuição do Linux que você está usando, esse arquivo será chamado de .profile ou .bash_profile e estará no seu diretório pessoal. Os arquivos que começam com . (geralmente chamados de arquivos de pontos) são ocultos por padrão. Eles não aparecerão em um gerenciador de arquivos gui e o comando ls não os verá (sem ajuda). Para ver o que está presente em sua casa, abra um shell (você estará em seu diretório inicial por padrão em um novo shell) e digite ls -A . O sinalizador -A diz ao comando ls para mostrar arquivos ocultos. Você deve ver .profile ou .bash_profile , que você pode editar. Adicione dois pontos e o caminho completo do diretório desejado (um caminho completo deve começar com / para indicar sua posição a partir da raiz da sua unidade). Você não quer dois pontos após o último valor. Então, se você tem um PATH normal, você pode adicionar /sbin desta maneira:

PATH=$PATH:/sbin

No entanto, tudo isso dito, você ainda não pode obter diretamente em /sbin/shutdown dessa maneira:

telemachus ~ $ /sbin/shutdown -h now
shutdown: you must be root to do that!

Ao dar o caminho completo do comando, eu "encontrei" o comando, mas ainda não consegui executá-lo. Alguns comandos, como shutdown , exigem privilégios especiais. Para obter permissão para emitir shutdown de um shell, você precisaria usar su ou sudo dependendo do tipo de sistema em que você está. Eu já escrevi um romance, então essa é uma história para outro dia.

    
por 16.07.2009 / 13:33
6

A razão pela qual eles são "inexistentes" é porque sua localização não está em nossa variável de ambiente PATH. Você pode ver os diretórios no seu PATH digitando:

echo $PATH

e você pode verificar a localização do seu comando, digitando

whereis shutdown

normalmente você verá que o diretório do comando que você está procurando não está no seu PATH. Você pode adicionar diretórios ao seu caminho adicionando as seguintes linhas em seu script de login (~ / .bash_profile).

PATH=$PATH:/my/new/directory
export PATH
    
por 16.07.2009 / 13:01
3

Eles são armazenados nos diretórios /usr/sbin ou /sbin que não estão incluídos na variável PATH do usuário (por padrão).

    
por 16.07.2009 / 13:00
1

Pense no Linux como um sistema multiusuário e isso fará sentido. Você não quer que a máquina em que você está trabalhando seja desligada por outro usuário . Se a raiz faz bem, talvez ele tenha algum bom motivo para desligá-lo.

Como usuário, você deve ser capaz de fazer coisas que afetam apenas o seu espaço. Se você roda o linux como desktop (e diz que é novato), provavelmente está executando algo como o Ubuntu ou algo similar. Nessas distribuições você pode usar o gui para usar quase tudo e o sistema perguntará a senha quando necessário.

No console, você pode obter acesso root usando o comando su (se souber a senha do root) ou sudo su se a sua distro usar o sudo. Depois disso, você terá todos os poderes e privilégios necessários para quebrar seu sistema: P

    
por 16.07.2009 / 13:12