Mensagem de erro em ifconfig “command not found” no bash com Debian

Publicado: 02/05/2010 em Escritorio, Linux, Programação
Tags:, , ,

Quando um usuário regular (sem privilégios de root) digita comandos, alguns deles não são executados pelo sistema retornando a mensagem de erro “command not found”. Um exemplo disto no Debian é quanto ao comando “$ifconfig”, que retorna a mensagem de erro:

bash: ifconfig: command not found

Isto é normalmente devido ao fato que a localização do comando não está no PATH (caminho) do usuário regular. Verifiquemos este fato:
1) Através do comando “$ locate ifconfig”, devemos obter a resposta “/sbin/ifconfig”. Ou seja, o comando está na pasta /sbin.
2) Certifique-se qual o seu caminho através do comando “$ echo $PATH”, onde possivelmente devemos obter a resposta “/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/games”. Ou seja, realmente o caminho /sbin não está presente.

Ou seja, a mensagem de erro “bash: ifconfig: command not found” é devido ao fato que ifconfig está localizada na pasta /sbin, e esta não é colocado automaticamente no PATH de usuários regulares. Apenas no PATH do root.

Entretanto, qualquer usuário pode executar o comando ifconfig como um usuário regular se for acrescentado o caminho absoluto:

$ /sbin/ifconfig

Neste caso, o comando será executado normalmente informando as características das interfaces de rede existentes no sistema. Porém apenas para mostrar as configurações das interfaces ethernet, não sendo possível ao usuário regular modificá-las (para tal deve-se ter obrigatoriamente privilégios de root).

Acrescente, de forma permanente, o caminho /sbin para os usuários regulares:
1) edite com privilégios de root o arquivo /etc/profile
2) na linha PATH referente a usuários regulares, acrescente o caminho /sbin
3) para recarregar o arquivo /etc/profile sem ter que reiniciar a máquina, utilize o comando “source” a partir da área do usuário regular da seguinte forma:

$ source /etc/profile

Pronto, agora o usuário já poderá executar o comando “$ ifconfig” sem retornar erro.

Observações adicionais:
1- “PATH”: quando um usuário digita um comando, o shell procura em cada um dos diretórios especificados em PATH para tentar encontrá-lo. Se não encontrar o comando em qualquer um desses diretórios, o sistema retorna a mensagem “Command not found”.
2- “echo”: comando para exibir o conteúdo de uma variável ou de uma linha de texto entre aspas.
3- “source”: comando que executa o conteúdo de um arquivo. No exemplo deste post, no qual fizemos uma alteração no arquivo /etc/profile, o resultado é que o script dentro do arquivo profile será novamente executado no Shell corrente deixando neste, todo o novo ambiente criado. Isso torna desnecessário o usuário fazer logout/login no sistema para obter o novo ambiente.
4- arquivo “/etc/profile”: arquivo que é executado toda vez que um usuário faz login no sistema. Este arquivo atua para todos os usuários.
5- pasta “sbin”: pasta com os arquivos binários de comandos externos disponíveis para administrar o sistema. No Linux, os comandos podem ser internos ou externos. Os internos são aqueles que estão dentro de um shell interpretador de comandos. Quando o shell é carregado na memória, seus comandos ficam residentes nela. Exemplos: cd, logout e kill; comandos externos estão localizados em pastas específicas no HD, como /bin e /sbin. O Linux acessa o HD sempre que um desses comandos é solicitado. Exemplos: mkdir, ifconfig e ls.
6- “ifconfig”: comando que quando executado desta forma sem argumentos, mostra o “status” das interfaces atualmente ativas.

Anúncios
comentários
  1. Dark disse:

    me ajudou muito

  2. Muito bom.
    Agora tire-me uma dúvida se possível:

    No arquivo /etc/profile já consta o local /usr/local/sbin mas com uma condição que eu não entendi o parâmetro:

    #!/bin/bash
    # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
    # and Bourne compatible shells (bash(1), ksh(1), ash(1), …).

    if [ “`id -u`” -eq 0 ]; then
    PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”
    else
    PATH=”/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games”
    fi
    export PATH

    Mas quando eu executo “echo $PATH” o “sbin” não aparece na lista.

    output:

    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

  3. Wagner Loula disse:

    Muito bom bom me ajudou muito.

  4. vms disse:

    bacana foi muito útil :)

  5. anderson soza disse:

    Comento somente para agradecer, sou iniciante e este conteudo me ajudou muito.

  6. Luiz Felipe Chagas disse:

    Artigo muito bom, me ajudou bastante.

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s