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 oportuno para que você possa focar em entender por que o which retorna um caminho específico.
Entendendo o básico do 'which'
Ao se estabelecer em 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 compilação personalizada chamada techbuild. Vamos verificar se ela ainda está instalada:
which techbuild
Você pode não ver nenhuma saída (Bash Shell) ou pode ver uma mensagem de erro como techbuild not found (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 dizer 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:
- Um script de shell é um arquivo de texto que armazena comandos e os executa em ordem.
- O padrão
cat <<'EOF' ... EOFescreve 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/bashdiz ao Linux para executar o script com o Bash.which techbuildverifica se o comando pode ser encontrado no seuPATH.>/dev/null 2>&1oculta 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 personalizado prioritydemo 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 prioritydemo será executado por padrão:
which prioritydemo
Você deverá ver uma saída semelhante a esta:
/home/labex/custom_bin/prioritydemo
Para ver todos os comandos prioritydemo correspondentes no seu PATH, execute:
which -a prioritydemo
Você deverá ver seu comando personalizado primeiro, seguido pela cópia que já está disponível em /usr/local/bin:
/home/labex/custom_bin/prioritydemo
/usr/local/bin/prioritydemo
Isso demonstra claramente a prioridade do PATH: which prioritydemo retorna o primeiro executável correspondente, enquanto which -a prioritydemo mostra todos os executáveis correspondentes na ordem de pesquisa atual.
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:
- Encontrar a localização de programas instalados
- Lidar com comandos inexistentes
- Descobrir múltiplas instalações do mesmo comando
- Entender a prioridade do PATH
- 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.



