Qual é a diferença entre localizar / onde está / qual

13

Qual é a diferença básica entre locate whereise whichcomando.

A diferença básica que observei é que locatelocaliza todos os nomes de arquivos relacionados em todo o sistema de arquivos, enquanto os comandos whereise whichfornecem apenas o local (sistema / endereço local do arquivo) do aplicativo instalado. Qual é a precisão da minha observação?

Como esses comandos são implementados internamente. Por que locatefunciona tão rápido em comparação com a pesquisa de traço, enquanto locatetem que procurar um nome de arquivo específico que corresponda à cadeia de destino em toda a hierarquia do sistema de arquivos?

Chinmaya B
fonte
2
e sobre o quê type? : P
jamesmstone
@jamesmstone o que você quer dizer com type, por favor, descreva
Chinmaya B
2
Desculpe, eu estava apenas tentando adicionar à sua pergunta. typeé outro comando que parece (aos meus olhos) fazer algo semelhante ao que você mencionou.
Jamesmstone
@ Jamesmstone Eu não acho que exista algum tipo de comando que funcione no meu sistema. Não consigo encontrar nenhum manual ou página de informações para o typecomando. Eu tentei man typee info type.
precisa
Hmm, eu me pergunto por que ... Você está usando o bash?
Jamesmstone

Respostas:

17

whichlocaliza o executável binário do programa (se estiver no seu PATH). man whichexplica mais claramente:

que retorna os nomes de caminho dos arquivos (ou links) que seriam executados no ambiente atual, se seus argumentos fossem dados como comandos em um shell estritamente compatível com POSIX. Isso é feito pesquisando no PATH arquivos executáveis ​​que correspondem aos nomes dos argumentos. Não segue links simbólicos.

whereislocaliza os arquivos binários, de origem e de página do manual 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 passando a saída desses comandos como argumentos para ls -loufile

$ 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

locatena verdade, encontra todos os arquivos que possuem o padrão especificado em qualquer lugar em seus caminhos. Você pode dizer a ele para encontrar apenas arquivos e diretórios cujos nomes (em vez de caminhos completos) incluem o padrão com a -bopção, que geralmente é o que você deseja, e fornece uma lista menos pesada.

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

Mais uma coisa 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 canalizo para lessa lista pode ser longa. Normalmente eu faço:

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

Como o traço do Unity funciona é explicado aqui - ele usa o Zeitgeist para indexar arquivos do sistema e aprender com os padrões de uso, além de permitir que outros aplicativos façam uso desses dados, por isso está fazendo muito mais trabalho do que locate.

Zanna
fonte
você pode comparar o traço e localizar os detalhes de desempenho e implementação do comando? A atualização do banco de dados binário deve ser feita após a criação de qualquer novo arquivo no sistema, não é esse período indefinido correto ou é gerenciado pelos processos do sistema?
precisa
2
O @Creator atualizando o banco de dados automaticamente é feito pelo cron, uma vez por dia. Você pode verificar quando instala algo com o qual não consegue encontrar imediatamente os arquivos locate. O traço usa um índice completamente diferente - mais lento porque ele faz mais coisas (eu editei a minha resposta)
Zanna
1
Portanto, resumir a localização é útil e mais poderoso do que ou onde, mas é estúpido, enquanto o traço é mais poderoso e implementa o aprendizado de máquina. e obrigado pelo sudo updatedbseu comando é muito útil não sabia que, embora eu o usasse regularmente.
precisa
@Creator sim você expressou melhor :) feliz que ele ajudou
Zanna
0

Simplesmente

$ which samba

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

$ whereis samba

O comando whereis também procura por 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 por updatedb. Por esse motivo, a localização é mais rápida do que a encontrada, mas menos precisa. Exemplos:

Ponteiro nulo
fonte