Qual é a diferença entre locate / whereis / which

13

Qual é a diferença básica entre o comando locate whereis e which .

A diferença básica que observei é que locate localiza todos os nomes de arquivos relacionados em todo o sistema de arquivos, enquanto os comandos whereis e which fornecem apenas o local (sistema / endereço local do arquivo) do aplicativo instalado. Quão exata é a minha observação?

Como esses comandos são implementados internamente. Por que locate funciona tão rápido quando comparado à pesquisa de traços, enquanto locate precisa pesquisar um nome de arquivo específico que corresponda à string de destino em toda a hierarquia do sistema de arquivos?

    
por Chinmaya B 17.07.2016 / 18:03

2 respostas

16

which encontra o executável binário do programa (se estiver em seu PATH). man which explica mais claramente:

  

que retorna os nomes de caminho dos arquivos (ou links) que seriam   executado no ambiente atual, seus argumentos foram dados como comandos em um shell estritamente compatível com POSIX. Ele faz isso procurando no PATH por arquivos executáveis que correspondem aos nomes dos argumentos. Não segue links simbólicos.

whereis localiza os arquivos binários, de origem e man pages de um programa. Por exemplo

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Você pode obter detalhes adicionais transmitindo a saída desses comandos como argumentos para ls -l ou file

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locate de fato encontra todos os arquivos que possuem o padrão especificado em qualquer lugar em seus caminhos. Você pode dizer que apenas encontre arquivos e diretórios cujos nomes (em vez de caminhos completos) incluam o padrão com a opção -b , que geralmente é o que você quer, e fornece uma lista menos difícil. / p>

locate é rápido porque usa um banco de dados binário que é atualizado periodicamente (uma vez por dia, por cron ). Você mesmo pode atualizá-lo para garantir que arquivos adicionados recentemente sejam encontrados executando sudo updatedb

Mais uma coisa sobre locate - não importa se os arquivos ainda existem ou não, portanto, para evitar encontrar arquivos excluídos recentemente, use -e . Muitas vezes eu também pipe para less como a lista pode ser longa. Normalmente eu faço:

sudo updatedb && locate -b -e gimp | less

Como funciona o traço do Unity, aqui - usa o Zeitgeist para indexar arquivos do sistema e aprender com padrões de uso, e permite que outros aplicativos façam uso desses dados, então está fazendo muito mais trabalho do que locate .

    
por Zanna 17.07.2016 / 18:08
0

Simplesmente

$ which samba

qual comando pesquisa a lista de programas listados nas configurações do PATH

$ whereis samba
O comando

whereis também procura programas que não estão presentes na configuração PATH

$locate samba

Também localiza arquivos por nome de arquivo, mas não pesquisa a estrutura de diretórios em si, mas apenas um banco de dados preparado pelo updatedb. Por causa disso, a localização é mais rápida do que a encontrada, mas menos precisa. Exemplos:

    
por Nullpointer 27.07.2016 / 10:54