Questo articolo introduce alcuni strumenti, in particolare grep
, uno strumento da riga di comando Linux® che puoi utilizzare per cercare directory o file che corrispondono a espressioni regolari specificate.
Cos'è grep
?
Risposta ufficiale:
grep
cerca i file di input con nome (o input standard se non specifichi un file o usi un solo trattino (- ) come nome file) per le righe contenenti una corrispondenza con il modello specificato. Per impostazione predefinita, grep
stampa le righe corrispondenti.
Risposta migliore:
Cerca in un file, una directory o un output qualcosa di specifico, simile a Ctrl + f in Windows®. Usa questa funzione per indirizzare esattamente ciò di cui hai bisogno.
Nozioni di base
Spesso, il modo più semplice per mostrare come funziona un comando è con degli esempi.
Puoi vedere tutti gli utenti in /etc/passwd file con il seguente comando:
# cat /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql❌27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
sher❌1002:1002::/home/sher:/bin/bash
Usando grep
, puoi restringere l'elenco per trovare un singolo utente.
Trova un utente specifico :
Elenca gli utenti ma filtra l'output mostrando solo la riga con sher in esso.
# cat /etc/passwd | grep 'sher'
sher❌1002:1002::/home/sher:/bin/bash
Oppure trova lo stesso utente con un solo comando:
# grep 'sher' /etc/passw
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash
Nell'esempio seguente, trova tutti gli utenti con accesso bash:
# grep 'bash' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash
Bandiere
Come la maggior parte dei comandi Linux, grep
utilizza i flag, solitamente una o più lettere precedute da uno o più trattini, per aggiungere funzionalità extra.
-v
:mostra tutto ciò che non include il modello di ricerca specificato:
# grep -v 'nologin' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash
-i
:Mostra le corrispondenze, ignorando il caso, utile quando non sai esattamente di cosa hai bisogno:
# grep -i 'SHER' /etc/passwd
sher❌1002:1002::/home/sher:/bin/bash
Cerca più pattern
grep
usa il simbolo pipe (| ) per indicare o permettendoti di cercare più di una cosa alla volta. Usa uno dei seguenti metodi per cercare più cose contemporaneamente:
\ :Esce dal carattere successivo, una pipe (| ) consentendogli di funzionare come o :
# grep 'sher\|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash
-E :interpreta i caratteri speciali, come | come o :
# grep -E 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash
Il egrep
comando fa la stessa cosa:
# egrep 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash
Combinazione di flag
Puoi utilizzare vari flag in combinazione per perfezionare una ricerca.
L'esempio seguente mostra tutti gli utenti che non sono sher o rack ,indipendentemente dal caso del modello di contenuto del file:
# egrep -vi 'SHER|RACK' /etc/passwd
Esempi pratici
Le seguenti sezioni trattano altri usi di grep
e introduci altri comandi utili.
Ignora commenti
In Linux, commenti le righe aggiungendo il simbolo cancelletto (# ) all'inizio della riga. In questo modo, puoi aggiungere le tue note e script o programmi ignorano i commenti e non eseguono quelle righe.
Per visualizzare i file ignorando tali commenti, utilizzare il seguente comando:
# grep -v ^'#' /file
Puoi persino eseguire un grep
sopra un altro grep
comando.
Ad esempio, elenca un file ignorando le righe commentate, quindi cerca qualcosa di specifico:
# grep -v ^'#' /file | grep 'hello'
Cronologia delle ricerche
La maggior parte dei sistemi Linux conserva un registro dei comandi eseguiti, a cui puoi accedere con il comando history
. Quando combini history
con grep
, puoi esaminare in modo molto efficace ciò che è stato eseguito finora sul tuo sistema.
Controlla il passwd
comandi eseguiti e altri comandi contenenti passwd modello:
# history | grep 'passwd'
Trova i comandi eseguiti in un giorno specifico:
# history | grep '2021-05-10'
Controlla quali comandi sono stati eseguiti in un momento specifico:
# history | grep '2021-05-10 11:00:'
Controlla porte e login di root
Elenca il traffico web in esecuzione sulle porte 80
e 443
:
# netstat -plnt | egrep '80|443'
Puoi usare ^ in un grep
comando per mostrare solo le righe che iniziano con il tuo modello di ricerca.
Ad esempio, esegui il comando seguente per verificare se il sistema consente gli accessi come root:
# grep ^'Permit' /etc/ssh/sshd_config
Cerca nei log con testa e coda
Usa top
per mostrare le prime dieci righe del registro dei tentativi di accesso:
# head /var/log/secure
Usa tail
per visualizzare le righe alla fine del registro dei tentativi di accesso:
# tail /var/log/secure
Usa l'last
comando per mostrare le prime dieci righe degli accessi più recenti:
# last | head -10
Usa tail -f
per vedere un file crescere in tempo reale. Ad esempio, puoi vedere i tentativi di accesso più recenti e guardare i tentativi in corso. Se qualcuno prova ad accedere, puoi vederlo come accade con il seguente comando:
# tail -f /var/log/secure
Ctrl + C to exit
Altri strumenti
Puoi sperimentare le tue nuove abilità utilizzando gli strumenti in questa sezione.
vim o nano
vi
, vim
e nano
sono gli editor di testo più comuni in Linux. Puoi usarli per modificare un file, in modo simile all'utilizzo di Blocco note in Windows.
Apri e crea un nuovo file, test :
# vim /test
Azioni | Sequenza di tasti | Spiegazione |
---|---|---|
Per iniziare a digitare nuovi contenuti: | i | Prepararsi per inserire testo |
Per uscire senza salvare: | Esc :q! | Esci dalla modalità di inserimento ed esci |
Per uscire e salvare: | Esc :wq! | Esci dalla modalità di inserimento, scrivi ed esci |
eco
echo
è un semplice comando che dice a Linux di ripetere ciò che hai appena digitato. Questo è efficace per testare grep
comandi senza prima creare un nuovo file.
Ad esempio, fai ciao display:
# echo 'hello'
hello
Mostra ciao e cerca le lettere centrali:
# echo 'hello' | grep 'ell'
hello
Puoi persino usare echo
per visualizzare più righe utilizzando -e
e \n
aggiungere nuove righe.
Mostra ciao e ho su righe separate:
# echo -e 'hi\nho'
hi
ho
Mostra ciao e ho su righe separate e cerca ciao :
# echo -e 'hi\nho' | grep 'hi'
hi
sed
Come grep
, sed
ha molti usi, ma usi questo comando principalmente per cercare e sostituire il contenuto specificato. Ecco alcuni esempi di base su come individuare righe specifiche:
Per prima cosa, usa vim
per creare un file:
# vim /test
Quando l'editor si apre, inserisci le seguenti righe:
1 Hi
2 How
3 Are
4 You
Visualizza il nuovo file:
# cat test
1 Hi
2 How
3 Are
4 You
Usa sed
per restituire tutto tranne la prima riga:
# sed 1d test
2 How
3 Are
4 You
Restituisce solo la prima riga:
# sed 1q test
o
# sed '1!d' test
1 Hi
Restituisce solo dalla seconda alla quarta riga:
# sed '2,4!d' test
2 How
3 Are
4 You
Conclusione
Ci sono molti altri strumenti che puoi usare, come awk
, cut
, sort
, xargs
,e così via. Ora che sai come creare un file usando echo
, puoi sperimentarli in modo più efficace.