Diferença entre localizar e qual no Linux


27

Qual é a diferença entre locatee whichno Linux?

Por que quando eu uso locate mentor, ele lista todo o mentor, mas quando o uso which mentordiz "sem mentor em ..." - o que isso significa?



Há também wheree whereis.
Jan Tojnar

em bash, prefere: type -all acommand. E se eu li o XYProblem por trás da sua pergunta: você tem um comando, pode vê-lo via localizar, mas não pode executá-lo? edite PATH, no ~/.profilearquivo de seu usuário específico , ou se você estiver convencido de que sabe o que fazer, no /etc/profilearquivo global [AVISO: você pode interromper os scripts do sistema (e possivelmente muito do sistema operacional) se adicionar o caminho errado em o $ PATH de / etc / profile ... (ex: caminhos contendo comandos geralmente encontrados em outros lugares). Prefira adicionar apenas no final da variável. E por favor, não coloque ::ou . em qualquer lugar nesse CAMINHO.
Olivier Dulac 30/03

Respostas:


45

Qual é a diferença entre locatee which?

locate usa um banco de dados criado anteriormente para localizar o arquivo.

locatelê um ou mais bancos de dados preparados por updatedb(8) e grava nomes de arquivos correspondentes a pelo menos um dos PATTERNs na saída padrão, um por linha.

Source localize (1) - página de manual do Linux

updatedbcria ou atualiza um banco de dados usado por locate(1). Se o banco de dados já existir, seus dados serão reutilizados para evitar a leitura de diretórios que não foram alterados.

updatedbgeralmente é executado diariamente por cron(8) para atualizar o banco de dados padrão ( /var/lib/mlocate/mlocate.db)

Source updatedb (8) - página de manual do Linux


whichprocura um arquivo executável procurando-o nos diretórios da PATHvariável ambiental.

whichleva um ou mais argumentos. Para cada um de seus argumentos, ele é impresso stdoutno caminho completo dos executáveis ​​que teriam sido executados quando esse argumento foi inserido no prompt do shell. Isso é feito pesquisando um executável ou script nos diretórios listados na variável de ambiente PATH.

usando o mesmo algoritmo que bash(1).

Fonte que (1) - página de manual Linux


locate mentorlista mentor, mas which mentordiz "nenhum mentor em ..."

O que isso significa?

Você tem alguns arquivos nomeados mentorque podem ser encontrados no locatebanco de dados.

Você não possui um arquivo ou script executável nomeado mentorno seu PATH.


2
"updatedb" - é bom saber que não é apenas a Microsoft que cria nomes excessivamente inespecíficos para as coisas. (Em Win32, DeleteObjectexclui um objeto GDI, CloseHandlefecha uma alça de kernel, etc. Da mesma forma updatedbatualiza o locateDB)
user253751

"what" também é especificamente útil no caso de você ter várias versões do mesmo programa ativadas em vários locais do seu caminho, por isso indica qual é realmente executado quando você executa o comando. Isso foi útil para mim antes no diagnóstico de comportamento inesperado - por exemplo, me ajudou a perceber que havia deixado uma versão instalada manualmente de um utilitário no meu sistema, substituindo a versão instalada pelo gerenciador de pacotes.
Carcer

11

whiché localizar um comando ( whichretorna um nome de caminho dos arquivos / links que seriam executados no ambiente atual)

locateé localizar arquivos por nome ( locatelê um ou mais bancos de dados preparados updatedbe grava nomes de arquivos que correspondem a pelo menos um dos padrões na saída padronizada, um por linha)


2
Forneça a atribuição para suas fontes - as descrições em sua resposta são obtidas diretamente das páginas de manual desses utilitários.
Reintegrar Monica iamnotmaynard

5

locatepega um padrão glob por padrão (o padrão Regex também pode ser usado) e pesquisa no banco /var/lib/mlocate/mlocate.dbde dados por qualquer nome de arquivo correspondente ao padrão.

whiché um comando para procurar o caminho completo de um comando nos diretórios interpretados pela PATHvariável de ambiente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.