Comando which no Linux: Localização de Comandos

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a usar o comando which para encontrar o arquivo executável que um shell executará para um determinado nome de comando. Você verificará comandos instalados, lidará com comandos indisponíveis, listará múltiplas correspondências e verá como a variável PATH afeta o resultado.

Para tornar o comportamento do which mais fácil de entender, este laboratório também utiliza alguns conceitos básicos de shell, como scripts simples, permissões de execução e alterações temporárias no PATH. Cada novo conceito é explicado no momento em que é utilizado, para que você possa focar em entender por que o which retorna um caminho específico.

Entendendo o básico do 'which'

Ao iniciar sua nova função na TechCorp, seu líder de equipe pede que você verifique a instalação de algumas ferramentas de desenvolvimento essenciais. O comando which será sua utilidade principal para esta tarefa.

O comando which é usado para localizar o arquivo executável associado a um determinado comando, pesquisando nos diretórios listados na variável de ambiente PATH.

Vamos começar localizando o compilador gcc:

which gcc

Você deverá ver uma saída semelhante a esta:

/usr/bin/gcc

Esta saída indica que o executável gcc está localizado no diretório /usr/bin. Isso significa que, ao digitar gcc no terminal, o sistema executará o arquivo localizado em /usr/bin/gcc.

Agora, vamos tentar localizar outra ferramenta essencial, o python:

which python

Você pode ver algo como:

/usr/local/bin/python

O comando which pesquisa nos diretórios listados na sua variável de ambiente PATH e retorna a primeira correspondência que encontrar. Se você vir um caminho diferente, não se preocupe - isso apenas significa que o Python está instalado em um local diferente no seu sistema.

Lidando com comandos inexistentes

Seu líder de equipe menciona que a TechCorp costumava usar uma ferramenta de build personalizada chamada techbuild. Vamos verificar se ela ainda está instalada:

which techbuild

Você pode não ver nenhuma saída (no Bash Shell), ou pode ver uma mensagem de erro como techbuild not found (no Zsh Shell).

Isso ocorre porque o which não retorna nada se não conseguir encontrar o comando no seu PATH. Não se assuste com a falta de saída - é a maneira do comando informar que o techbuild não foi encontrado em nenhum dos diretórios do seu PATH.

Para tornar esse comportamento mais explícito, podemos usar um script de shell simples. Introduziremos dois novos conceitos aqui:

  1. Um script de shell é um arquivo de texto que armazena comandos e os executa em ordem.
  2. O padrão cat <<'EOF' ... EOF escreve múltiplas linhas em um arquivo sem que você precise gerenciar várias aspas aninhadas.

Vamos criar um script para verificar o techbuild:

cat > ~/check_techbuild.sh <<'EOF'
#!/bin/bash
if which techbuild >/dev/null 2>&1; then
  echo "techbuild is installed"
else
  echo "techbuild is not installed"
fi
EOF

Este comando cria um arquivo chamado ~/check_techbuild.sh e o preenche com um pequeno script Bash.

Aqui está o significado das linhas importantes:

  • #!/bin/bash diz ao Linux para executar o script com o Bash.
  • which techbuild verifica se o comando pode ser encontrado no seu PATH.
  • >/dev/null 2>&1 oculta a saída normal e a saída de erro para que o script possa imprimir sua própria mensagem de resultado clara.

Agora, dê permissão de execução ao arquivo e execute-o:

chmod +x ~/check_techbuild.sh

O comando chmod +x adiciona permissão de execução, o que permite ao Linux rodar o arquivo como um comando.

~/check_techbuild.sh

Este script imprime techbuild is not installed porque o which não conseguiu encontrar esse comando.

Descobrindo múltiplas instalações

À medida que você continua configurando seu ambiente, percebe que a TechCorp usa múltiplas versões do Python para diferentes projetos. A opção -a do which pode ajudá-lo a descobrir todas as instalações de um comando:

which -a python

Você pode ver uma saída como esta:

/usr/local/bin/python
/usr/bin/python
/bin/python

Esta saída indica que existem múltiplas instalações do Python no sistema. A opção -a diz ao which para imprimir todos os executáveis correspondentes no PATH, não apenas o primeiro.

Entender isso é crucial, pois mostra todos os possíveis executáveis do Python que poderiam ser executados, dependendo da configuração do seu PATH. O primeiro listado é aquele que será executado quando você digitar python no terminal.

Entendendo a prioridade do PATH

Seu líder de equipe explica que a ordem dos diretórios na variável PATH determina qual versão de um comando é usada por padrão. Vamos examinar seu PATH:

echo $PATH

Você verá uma lista de diretórios separados por dois-pontos. Por exemplo:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

A ordem importa: os diretórios listados primeiro têm maior prioridade. Isso significa que, se houver dois executáveis com o mesmo nome em diretórios diferentes, aquele no diretório que aparece primeiro no PATH será usado.

A configuração do laboratório já criou um comando ls personalizado em ~/custom_bin. Adicione esse diretório ao início do seu PATH para que ele seja verificado antes dos diretórios do sistema:

export PATH=$HOME/custom_bin:$PATH

Agora verifique qual ls será executado por padrão:

which ls

Você deverá ver uma saída semelhante a esta:

/home/labex/custom_bin/ls

Para ver todos os comandos ls correspondentes no seu PATH, execute:

which -a ls

Você deverá ver seu comando personalizado primeiro, seguido pelas versões do sistema:

/home/labex/custom_bin/ls
/usr/bin/ls
/bin/ls

Isso demonstra claramente a prioridade do PATH: which ls retorna o primeiro executável correspondente, enquanto which -a ls mostra a lista completa de resultados da pesquisa.

Criando um comando personalizado

Seu líder de equipe sugere criar um comando personalizado simples para demonstrar como o which interage com o PATH. Vamos criar um script chamado hello no seu diretório home:

cat > ~/hello <<'EOF'
#!/bin/bash
echo "Hello from TechCorp!"
EOF
chmod +x ~/hello

Isso cria um novo arquivo chamado hello no seu diretório home e o torna executável. O script imprime Hello from TechCorp! quando executado.

Agora, tente executá-lo:

hello

Você receberá um erro de "command not found" porque seu diretório home não está no PATH. O PATH é uma lista de diretórios onde o shell procura por arquivos executáveis.

Vamos adicionar seu diretório home ao PATH temporariamente:

export PATH="$PATH:$HOME"

Este comando adiciona seu diretório home ao final do PATH para a sessão atual do terminal. O comando export torna o PATH atualizado disponível para os comandos que você executar posteriormente.

Agora você pode executar hello, e o which o encontrará:

hello
which hello

Você deverá ver "Hello from TechCorp!" e o caminho para o seu script. Isso demonstra como o which encontra executáveis em qualquer diretório listado no seu PATH.

Resumo

Neste laboratório, você aprendeu a usar o comando which para localizar arquivos executáveis no PATH do seu sistema. Você descobriu como:

  1. Encontrar a localização de programas instalados
  2. Lidar com comandos inexistentes
  3. Descobrir múltiplas instalações do mesmo comando
  4. Entender a prioridade do PATH
  5. Criar e localizar comandos personalizados

Você também praticou a escrita de scripts de shell simples, tornando arquivos executáveis com chmod +x e ajustando o PATH para controlar qual comando é executado.

Essas habilidades serão inestimáveis à medida que você continuar sua jornada como desenvolvedor na TechCorp e além.