Definição do Comando which
Which é uma palavra do dicionário inglês que significa “qual” ou “o que” em português.
Which serve para exibir o caminho completo de comandos.
É um programa bem simples e com poucas opções.
Ao criar scripts é sempre recomendado usar o caminho completo dos programas e which é bem útil para isso.
Opções do Comando which
- -a ou all: Por padrão which para no primeiro caminho encontrado. Se existir mais de um e você queira que sejam exibidos basta adicionar -a.
- skip-alias: Ignora os alias. Alias são apelidos. o programa ls por exemplo é uma alias para ls color=auto.
[elder@centos65 Download]$ alias alias copiar='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto'
Quando digitamos ls automaticamente é adicionado color=auto.
Comando which Depende da Variável PATH
PATH quer dizer caminho pois contém uma lista de caminhos de pastas; cada caminho separado um do outro por sinal de dois pontos(:)
[elder@centos65 Download]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/elder/bin
Which usa a variável PATH para localizar o caminho dos comandos. Então, se um comando não for encontrado isso não quer dizer que ele não existe no sistema mas apenas que ele não está dentro de um dos diretórios contidos em PATH.
Usando which
- Encontrar o caminho completo do comando ls
[elder@centos65 Download]$ which ls alias ls='ls --color=auto' /bin/ls
Na primeira linha exibe o alias e na segunda o caminho completo do programa ls
- Encontrar o caminho completo do comando ls ignorando alias.
[elder@centos65 Download]$ which --skip-alias ls /bin/ls
- Criei o alias “copiar” para o comando “cp -i”
[elder@centos65 Download]$ which copiar alias copiar='cp -i' /bin/cp
- Como copiar é apenas um alias ao usar skip-alias nada é encontrado.
[elder@centos65 Download]$ which --skip-alias copiar /usr/bin/which: no copiar in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/elder/bin)
Laboratório parte 02
Obs.: ~/ é a mema coisa que /home/pasta_do_seu_usuário . No meu caso, /home/elder
which e comandos fora dos diretórios do PATH
- Crie a pasta “programas” dentro da sua home
[elder@centos65 Download]$ mkdir ~/programas
- Crie o script ~/programas/meuPrograminha adicionando as seguintes linhas de textos abaixo:#!/bin/bash
hostname
date
w[elder@centos65 Download]$ echo '#!/bin/bash' >> ~/programas/meuPrograminha [elder@centos65 Download]$ echo 'hostname' >> ~/programas/meuPrograminha [elder@centos65 Download]$ echo 'date' >> ~/programas/meuPrograminha [elder@centos65 Download]$ echo 'w' >> ~/programas/meuPrograminha
- Torne o meuPrograminha um executável(“x”) adicionado para todos(“a”) os usuários
[elder@centos65 Download]$ chmod a+x ~/programas/meuPrograminha
- Confirme que o arquivo se tornou executável
[elder@centos65 var]$ ls -gG ~/programas/ total 4 -rwxrwxr-x 1 28 Set 28 10:51 meuPrograminha
Acima marquei em vermelho o “x” de executável
- Suponhamos que não sabemos onde está esse aquivo, usamos which para encontrar seu o caminho completo.
[elder@centos65 var]$ which meuPrograminha /usr/bin/which: no meuPrograminha in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/elder/bin)
Com cor vermelha está escrito: “Nenhum meuPrograminha em….”
Não encontrou justamente porque meuPrograminha não está dentro de uma das pastas com caminho em PATH. - Mova meuPrograminha para /home/elder/bin
[elder@centos65 var]$ mv ~/programas/meuPrograminha ~/bin/ mv: não foi possível mover "/home/elder/programas/meuPrograminha" para "/home/elder/bin/": Não é um diretório
Recebi um erro acima. A pasta ~/bin não existe
Obs.: Ao mover sempre ter o cuidado de colocar a barra “/” ao final do caminho. Se colocar /home/elder/bin ao invés de /home/elder/bin/ o arquivo meuPrograminha será movido para dentro de /home/elder com o nome de bin.Criaremos a pasta bin
[elder@centos65 Download]$ mkdir ~/bin
Repetimos que tinha dado erro acima
[elder@centos65 var]$ mv ~/programas/meuPrograminha ~/bin/
listamos o conteúdo da pasta ~/bin
[elder@centos65 var]$ ls -gG ~/bin/ total 4 -rwxrwxr-x 1 28 Set 28 10:51 meuPrograminha
- Busque novamente pelo caminho completo de meuPrograminha usando which
[elder@centos65 var]$ which meuPrograminha ~/bin/meuPrograminha
🙂 agora foi encontrado. Isso por que /home/elder/bin está dentro da da variável PATH
Laboratório parte 03
Utilizando which para Buscar o Mesmo Programa que Está dentro de 3 Pastas
- Copie(cp) meuPrograminha para dentro de /usr/local/bin e /usr/bin preservando(p) as permissões
[elder@centos65 ~]$ sudo cp -p ~/bin/meuPrograminha /usr/local/bin/ [elder@centos65 ~]$ sudo cp -p ~/bin/meuPrograminha /usr/bin/
- Utiliza which para encontrar o caminho completo para meuPrograminha
[elder@centos65 ~]$ which meuPrograminha /usr/local/bin/meuPrograminha
- Acima, which para na primeira ocorrência. Para which continuar buscando utilize -a ou all
[elder@centos65 ~]$ which -a meuPrograminha /usr/local/bin/meuPrograminha /usr/bin/meuPrograminha ~/bin/meuPrograminha
Conclusão
Which é um comando simples mas ótimo para encontrarmos o caminho completo de algum programa. Muito útil em scripts, já que nestes é sempre recomendado utilizar o programa com seu caminho ao invés de apenas o nome.
Siga-nos em nossas redes:
Link Facebook: https://www.facebook.com/gnulinuxbr
Link WhatsApp: https://chat.whatsapp.com/G9xS3Ylzoou3TrN49DQso4
Link Telegram: https://t.me/gnulinux_brasil
YouTube: https://www.youtube.com/channel/UCwyFWDqE0v7SwpZenjmzxYQ
One Comment to “Linha de Comando em Linux: which”