COMANDI DI RICERCA

11 / 100

COMANDI PER RICERCA


Fino a quando non si acquisisce familiarità con Linux, può essere frustrante orientarsi, ma la conoscenza di alcuni comandi e tecniche di base contribuirà notevolmente a rendere la riga di comando molto più amichevole. I seguenti comandi ti aiutano a localizzare le cose dal terminale.

Ricerca con LOCATE

Probabilmente il comando più semplice da usare è localizzare. Seguito da una parola chiave che indica ciò che si desidera trovare, questo comando analizzerà l’intero filesystem e individuerà ogni occorrenza di quella parola. Per cercare aircrackng, ad esempio, immettere quanto segue:

kali > find aircrack-ng
/usr/bin/aircrackng
/usr/share/applications/kaliaircrackng.desktop

/usr/share/desktopdirectory/ 05101aircrackng.directory
snip

/var/lib/dpkg/info/aircrack ng.mg5sums

Tuttavia, il comando locate non è perfetto. A volte i risultati di individuare possono essere travolgenti, fornendo troppe informazioni. Inoltre, individuare utilizza un database che è di solito viene aggiornato solo una volta al giorno, quindi se hai appena creato un file pochi minuti o poche ore fa, potrebbe non apparire in questo elenco fino al giorno successivo. Vale la pena conoscere gli svantaggi di questi comandi di base in modo da poter decidere meglio quando è meglio usarli uno.

Trovare binari con whereis

Se stai cercando un file binario, puoi utilizzare il comando whereis per individuarlo. Questo comando restituisce non solo la posizione del binario ma anche la sua fonte e la pagina man, se disponibili.

Ecco un esempio:
kali >whereis aircrack-ng

aircarck-ng:/usr/bin/aircarckng/usr/share/man/man1/aircarckng.1.gz

In questo caso, whereis ha restituito solo i binari di aircrackng e lapagina man, piuttosto che ogni occorrenza della parola aircrackng.
Molto più efficiente e illuminante, non farlo
tu pensi?

Trovare binari

nella variabile PATH con cui il comando which è ancora più specifico: restituisce solo la posizione dei binari nella variabile PATH in Linux. Esamineremo più da vicino la variabile PATH nel Capitolo 7, ma per ora è sufficiente sapere che PATH contiene le directory in cui il sistema operativo cerca i comandi che esegui dalla riga di comando.
Ad esempio, quando inserisco aircrack-ng sulla riga di comando, il sistema operativo cerca la variabile PATH per vedere in quali directory dovrebbe cercare aircrackng:

kali > which aircrack-ng
/usr/bin/aircrackng

Qui, che è stato in grado di trovare un singolo file binario nelle directory elencate nella variabile PATH. Come minimo, queste directory di solito includono /usr/bin, ma possono includere /usr/sbin e forse alcune altre.

Esecuzione di più potenti ricerche con find

Il comando trova è la più potente e flessibile delle utilità di ricerca. È in grado di iniziare la ricerca in qualsiasi directory designata e cercare una serie di parametri diversi, tra cui, ovviamente, il nome del file ma anche la data di creazione o modifica, il proprietario, il gruppo, i permessi e la dimensione.

Ecco la sintassi di base per find:
Trova l’espressione delle opzioni della directory. Quindi, se volessi cercare un file con il nome apache2 (il server Web open source) a partire dalla directory principale, inserirei quanto segue:

kali >trova /➊ -type f➋ -name apache2➌

Per prima cosa indico la directory in cui iniziare la ricerca, in questo caso /➊. Quindi specifico quale tipo di file cercare, in questo caso f per un file ordinario ➋. Infine, do il nome del file che sto cercando, in questo caso apache2 ➌.

I miei risultati per questa ricerca sono mostrati qui:

kali > find / -type f -name apache2
/usr/lib/apache2/mpmitk/apache2
/usr/lib/apache2/mpmevent/apache2
/usr/lib/apache2/mpmworker/apache2

/usr/lib/apache2/mpmprefork/apache2
/etc/cron.daily/apache2
/etc/logrotate.d/apache2
/etc/init.d/apache2
/etc/default/apache2

Il comando find è iniziato nella parte superiore del filesystem (/), ha attraversato ogni directory cercando apache2 nel nome del file, quindi ha elencato tutte le istanze trovate.

Come puoi immaginare, una ricerca in ogni directory può essere lenta. Un modo per velocizzarlo è cercare solo nella directory in cui ti aspetteresti di trovare i file di cui hai bisogno. In questo caso, stiamo cercando un file di configurazione, quindi potremmo iniziare la ricerca nella directory /etc e Linux cercherebbe solo fino alle sue sottodirectory.

Proviamolo:

kali > find /etc -type f -name apache2
/etc/init.d/apache2

/etc/logrotate.d/apache2
/etc/cron.daily/apache2

Questa ricerca molto più rapida ha trovato solo le occorrenze di apache2 nella directory /etc e nelle sue sottodirectory. È anche importante notare che, a differenza di altri comandi di ricerca, trova visualizza solo le corrispondenze esatte del nome. Se il file apache2 ha un’estensione, come apache2.conf, la ricerca non troverà una corrispondenza. Possiamo rimediare a questa limitazione utilizzando i caratteri jolly, che ci consentono di abbinare più caratteri. I caratteri jolly sono disponibili in diverse forme: * . , ? e []. Cerchiamo nella directory /etc tutti i file che iniziano con apache2 e hanno qualsiasi estensione.

Per questo, potremmo scrivere un comando find usando il seguente carattere jolly:


kali > find /etc -type f –name apache2.*
/etc/apache2/apache2.conf

Quando eseguiamo questo comando, troviamo che c’è un file nella directory /etc che si adatta al modello apache2.*. Quando usiamo un punto seguito dal carattere jolly *, il terminale cerca qualsiasi estensione dopo il nome file apache2.

Questa può essere una tecnica molto utile per trovare file di cui non conosci l’estensione. Quando eseguo questo comando, trovo due file che iniziano con apache2 nella directory /etc, incluso il file apache2.conf.

UNO SGUARDO VELOCE ALLE WILDCARDS


Diciamo che stiamo facendo una ricerca in una directory che contiene i file cat, hat, what e bat.

Il ? il carattere jolly viene utilizzato per rappresentare un singolo carattere, quindi una ricerca per ? at troverebbe cappello, gatto e pipistrello ma non cosa, perché at in questo nome file è preceduto da due lettere. Il carattere jolly [] viene utilizzato per abbinare i caratteri che appaiono all’interno delle parentesi quadre.

Ad esempio, una ricerca di [c,b]at corrisponderebbe a gatto e pipistrello ma non a cappello o cosa. Tra i caratteri jolly più utilizzati c’è l’asterisco (*), che corrisponde a qualsiasi carattere di qualsiasi lunghezza, da nessuno a un numero illimitato di caratteri.

Una ricerca per *at, ad esempio, troverebbe gatto, cappello, cosa e pipistrello.

Filtrare con grep

Molto spesso quando usi la riga di comando, ti consigliamo di cercare una particolare parola chiave. Per questo, puoi usare il comando grep come filtro per cercare parole chiave. Il comando grep viene spesso utilizzato quando l’output viene reindirizzato da un comando a un altro. Tratterò il piping nel Capitolo 2, ma per ora basti dire che Linux (e Windows per quello che importa) ci permette di prendere l’output di un comando e inviarlo come input a un altro comando. Questo è chiamato piping e usiamo il | comando per farlo (il tasto | di solito è sopra il tasto INVIO sulla tastiera).

Il comando ps viene utilizzato per visualizzare informazioni sui processi in esecuzione sulla macchina. Ne parleremo più dettagliatamente nel Capitolo 6, ma per questo esempio supponiamo di voler vedere tutti i processi in esecuzione sul mio sistema Linux. In questo caso, posso usare il comando ps (processes) seguito dagli switch aux per specificare quali informazioni di processo per visualizzare, in questo modo:

kali >ps aux

Questo mi fornisce un elenco di tutti i processi in esecuzione in questo sistema, ma cosa succede se voglio solo trovare un processo per vedere se è in esecuzione? Posso farlo reindirizzando l’output da ps a grep e cercando una parola chiave. Ad esempio, per scoprire se il servizio apache2 è in esecuzione, inserirei quanto segue.

kali >ps aux | grep apache2
root 4851 0,2 0,7 37548 7668 ? Ss 10:14 0:00 /usr/sbin/apache2 k start
root 4906 0,0 0,4 37572 4228 ? S 10:14 0:00 /usr/sbin/apache2 k start

root 4910 0,0 0,4 37572 4228 ? Ss 10:14 0:00 /usr/sbin/apache2 k start
snip


Questo comando dice a Linux di visualizzare tutti i miei servizi e quindi di inviare quell’output a grep, che cercherà nell’output la parola chiave apache2 e quindi visualizzerà solo l’output pertinente, risparmiando così molto tempo e la mia vista.