quali / dove sono le differenze


112

Qual è la differenza tra whiche whereis?


Mi dispiace ma sul mio sistema OS X 10.5.8 che e dove danno sempre gli stessi risultati. Forse questa è una domanda molto specifica su OS X, dato che sono d'accordo, ci si aspetta un risultato diverso. Forse laddove non è conforme a ciò che dovrebbe fare. Almeno i due esempi (vedi sotto) non funzionano: dove sono e dove php danno sempre lo stesso risultato del quale ... Qualcuno può confermarlo? Snow Leopard si comporta allo stesso modo?
Lupo,

Sì, lo so, ecco perché ho posto questa domanda.
mk12,

@Wolf ecco un esempio di whichcome whereisdare diversi output (su macOS Sierra) apple.stackexchange.com/questions/259047/…
Matteo,

@ mk12 Mi sento come se fosse typesuperiore. Conosce anche alias definiti, funzioni ecc.
phil294

Risposte:


121

Che ne dici di imparare whereise whichusare whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Fondamentalmente, whereiscerca i file "forse utili", mentre whichcerca solo gli eseguibili.

Uso raramente whereis. D'altra parte, whichè molto utile, specialmente negli script. whichè la risposta alla seguente domanda: da dove proviene questo comando?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2

34
non sapevo cosa, grazie.
MK

1
A proposito, rimuoverei il tag "osx", poiché questa domanda si applica a tutte le varianti di unix (inclusi Linux, BSD, Mac OS X, ...)
Denilson Sá Maia,

modificato in unix
mk12,

1
C'è di più. Sul mio sistema, dov'è e che restituiscono percorsi eseguibili diversi. Posso solo ottenere il percorso verso quello che corre effettivamente whereis, non quello per which.
Jordan Reiter,

1
@JordanReiter: Non può essere! whichmostra il percorso effettivo. Sei sicuro che il percorso indicato whichnon sia solo un collegamento simbolico al percorso indicato whereis? Forse è un alias di shell. In bash, prova a correre type your_cmd_here.
Denilson Sá Maia,

23

whereis cerca le posizioni * nix standard per un comando specificato.

whichcerca il PERCORSO specifico dell'utente (che può includere alcune delle posizioni in cui si trova la ricerca e potrebbe non includere altre - potrebbe anche includere alcuni luoghi che whereisnon effettuano ricerche se si fosse aggiunto al PERCORSO)


Che cos'è * nix?
MK

2
Unix, Linux ecc. (Mac OS X appartenente a ecc.)

8
Ohhh, ahah, ho sempre pensato che l'overflow dello stack censurasse l'U in Unix ogni volta che l'ho visto per qualche motivo ..
MK

No. Solo una convenzione abbastanza comune dell'uso di caratteri jolly creativi fa riferimento a una famiglia di sistemi operativi simili. ;)

6

Citando le loro pagine man:

dove :

dove trova le sezioni sorgente / binarie e manuali per i file specificati.

Per esempio :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

vale a dire, l'eseguibile "php" e alcune altre cose (come le pagine man).


e che :

che restituisce i nomi dei percorsi dei file che verrebbero eseguiti nell'ambiente attuale

Per esempio :

$ which php
/usr/bin/php

cioè, solo l'eseguibile "php".


1

che cerca gli eseguibili nelle directory specificate dalla variabile d'ambiente PATH. E se scoperto, verrà stampato il percorso completo di questo eseguibile.

$ which ls
/ bin / ls
$ which ifconfig
$ # Nessun output, perché ifconfig esiste solo nel PATH di root.

dove cerca eseguibili, file sorgente e pagine di manuale usando automaticamente un database creato dal sistema.

$ dove è meno
meno: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Ma sembra che Whereis e Locate non utilizzino lo stesso database. Quando ho installato un software e poi ho usato dov'è e individuare immediatamente per cercare questo software. Il risultato è che dove è possibile trovare alcuni file relativi a questo software mentre individuare non è possibile. Usano davvero database diversi? Come funziona il database? - Beh, che ne dici di rifiutare di essere un pedante? :)


hai eseguito il comando updatedb? Per quanto mi ricordi, individuare si basa su questo
Oliver M Grech,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.