Linha de Comando em Linux: which

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

  1. 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

  2. Encontrar o caminho completo do comando ls ignorando alias.
    [elder@centos65 Download]$ which --skip-alias ls
    /bin/ls
    
  3. Criei o alias “copiar” para o comando “cp -i”
    [elder@centos65 Download]$ which copiar
    alias copiar='cp -i'
    	/bin/cp
    
  4.  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

  1. Crie a pasta “programas” dentro da sua home
    [elder@centos65 Download]$ mkdir ~/programas
  2.  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
  3. Torne o meuPrograminha um executável(“x”) adicionado para todos(“a”) os usuários
    [elder@centos65 Download]$ chmod a+x ~/programas/meuPrograminha
  4. 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

  5. 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.

  6. 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
  7.  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

 

  1. 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/
  2. Utiliza which para encontrar o caminho completo para meuPrograminha
    [elder@centos65 ~]$ which  meuPrograminha 
    /usr/local/bin/meuPrograminha
  3. 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

 

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

One thought on “Linha de Comando em Linux: which

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *