GNU/Linux >> Linux Esercitazione >  >> Linux

nozioni di base su grep

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.


Linux
  1. Differenza tra /bin/false e /sbin/nologin

  2. /usr/bin Vs /usr/local/bin Su Linux?

  3. Perché /bin/sh punta a /bin/dash e non a /bin/bash??

  4. Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

  5. Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Qual è il motivo per cui uno Shebang punta a /bin/sh piuttosto che a /bin/bash?

Linux – Unire /usr/bin e /usr/sbin in /bin (gnu/linux)?

Esegui il comando bash sulla pipeline jenkins

Differenza tra /bin e /usr/bin

Spostato il contenuto di /bin in /usr/bin, è possibile annullare?

chroot fallisce - impossibile eseguire il comando `/bin/bash':File o directory non presenti