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.
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.
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)
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.
"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)
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.
where
ewhereis
.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~/.profile
arquivo de seu usuário específico , ou se você estiver convencido de que sabe o que fazer, no/etc/profile
arquivo 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.Respostas:
Qual é a diferença entre
locate
ewhich
?locate
usa um banco de dados criado anteriormente para localizar o arquivo.Source localize (1) - página de manual do Linux
Source updatedb (8) - página de manual do Linux
which
procura um arquivo executável procurando-o nos diretórios daPATH
variável ambiental.usando o mesmo algoritmo que
bash
(1).Fonte que (1) - página de manual Linux
locate mentor
lista mentor, maswhich mentor
diz "nenhum mentor em ..."Você tem alguns arquivos nomeados
mentor
que podem ser encontrados nolocate
banco de dados.Você não possui um arquivo ou script executável nomeado
mentor
no seuPATH
.fonte
DeleteObject
exclui um objeto GDI,CloseHandle
fecha uma alça de kernel, etc. Da mesma formaupdatedb
atualiza olocate
DB)which
é localizar um comando (which
retorna um nome de caminho dos arquivos / links que seriam executados no ambiente atual)locate
é localizar arquivos por nome (locate
lê um ou mais bancos de dados preparadosupdatedb
e grava nomes de arquivos que correspondem a pelo menos um dos padrões na saída padronizada, um por linha)fonte
locate
pega um padrão glob por padrão (o padrão Regex também pode ser usado) e pesquisa no banco/var/lib/mlocate/mlocate.db
de 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 pelaPATH
variável de ambiente.fonte