GNU/Linux >> Linux Esercitazione >  >> Linux

Lavorare con le pipe sulla riga di comando di Linux

Mi dispiace informarti, ma la riga di comando non è morta con i dinosauri, né è scomparsa con il dodo o il piccione viaggiatore. La riga di comando di Linux è viva e vegeta e continua a funzionare bene. È un modo efficiente per raccogliere ed elaborare rapidamente informazioni, creare nuovi script e configurare sistemi.

Uno degli operatori di shell più potenti è la pipe (| ). La pipe prende l'output da un comando e lo usa come input per un altro. E non sei limitato a un singolo comando reindirizzato:puoi impilarli tutte le volte che vuoi o fino a quando non esaurisci l'output o i descrittori di file.

Uno degli scopi principali delle tubazioni è il filtraggio. Si utilizza il piping per filtrare il contenuto di un file di grandi dimensioni, ad esempio per trovare una stringa o una parola particolare. Questo è il motivo per cui l'uso più diffuso per le pipe riguarda i comandi grep e sort . Ma non sei limitato a quei casi. È possibile reindirizzare l'output a qualsiasi comando che accetta l'input del flusso. Diamo un'occhiata a un esempio teorico come illustrazione di come funziona questo processo:

$ cmd1 | cmd2

Entrambi cmd1 e cmd2 sono utilità della riga di comando che visualizzano i risultati sullo schermo (stdout ). Quando si reindirizza l'output di un comando a un altro, tuttavia, le informazioni da cmd1 non produce output sullo schermo. La pipe reindirizza l'output come input a cmd2 .

Nota: Non confondere pipe (| ) reindirizzamento con reindirizzamento file (> ) e (< ). (Un esempio di reindirizzamento di file: cmd1 > file o cmd1 < file .) Il reindirizzamento dei file invia l'output a un file anziché allo schermo o estrae l'input da un file.

Diamo un'occhiata ad alcuni esempi reali di come funzionano le tubazioni.

Verifica delle schede di rete

Diciamo che devi sapere se una delle tue schede di rete (NIC) ha un indirizzo IP che inizia con 192:

$ ifconfig | grep 192

inet 192.168.1.96  netmask 255.255.255.0  broadcast 192.168.1.255

Puoi anche scoprire quali NIC live hai su un sistema con una semplice pipe a grep :

$ ifconfig | grep UP

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

Puoi anche grep per "RUNNING" o "RUN" per visualizzare le stesse informazioni.

Esame delle autorizzazioni

Forse vuoi scoprire quante directory in /etc sono scrivibili da root:

$ sudo ls -lR | grep drwx

I risultati sono troppo lunghi per essere elencati qui, ma come puoi vedere dall'elenco visualizzato, ce ne sono molti. Devi ancora scoprire quanti ce ne sono e un conteggio visivo richiederebbe molto tempo. Un'opzione semplice consiste nel reindirizzare i risultati dei tuoi ls comando al wc Comando (conteggio parole): 

$ sudo ls -lR | grep drwx | wc -l

285

Il -l l'interruttore mostra il numero di righe. Il tuo conteggio potrebbe essere diverso. Questo elenco proviene da una nuova installazione di "RHEL 8 server senza GUI".

[Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente.]

Conteggio dei file

Non è necessario utilizzare grep tutto il tempo. Ad esempio, puoi elencare il numero di file in /etc directory con questo:

$ ls | wc -l

229

Anche in questo caso, i risultati potrebbero avere un aspetto diverso, ma sai che qualcosa non va se il comando restituisce un numero limitato di file.

Processi di identificazione

Puoi anche eseguire attività complesse utilizzando le pipe. Per elencare gli ID di processo (PID) per tutti i systemd -processi correlati:

$ ps -ef | grep systemd | awk '{ print $2 }'

1
471
500
608
631
7449
7494
17242

Il awk $2 del comando output isola la seconda colonna (PID) da ps comando. Si noti che l'ultima voce, PID 17242 , è in realtà il PID per grep comando che mostra queste informazioni, come puoi vedere dai risultati dell'elenco completo qui:

khess    17242  7505  0 09:40 pts/0    00:00:00 grep --color=auto systemd

Per rimuovere questa voce dai risultati, utilizza nuovamente l'operatore pipe:

$ ps -ef | grep systemd | awk '{ print $2 }' | grep -v grep

Il -v switch dice a grep comando per invertire o ignorare le righe che contengono la stringa che segue, in questo caso qualsiasi riga contenente la parola "grep".

Ordinamento dei risultati

Un altro uso comune dell'operatore pipe consiste nell'ordinare i risultati effettuando una pipe su sort comando. Supponi di voler ordinare l'elenco dei nomi in contacts.txt . Per prima cosa, diamo un'occhiata ai contenuti così come sono nel file prima di ordinarli:

$ cat contacts.txt

Bob Jones
Leslie Smith
Dana David
Susan Gee
Leonard Schmidt
Linda Gray
Terry Jones
Colin Doe
Jenny Case

Ora, ordina l'elenco:

$ cat contacts.txt | sort

Bob Jones
Colin Doe
Dana David
Jenny Case
Leonard Schmidt
Leslie Smith
Linda Gray
Susan Gee
Terry Jones

Puoi invertire l'ordinamento con il -r interruttore:

$ cat contacts.txt | sort -r

Terry Jones
Susan Gee
Linda Gray
Leslie Smith
Leonard Schmidt
Jenny Case
Dana David
Colin Doe
Bob Jones

L'output di uno di questi era quello che ti aspettavi? Per impostazione predefinita, il sort comando esegue un ordinamento del dizionario sulla prima parola o colonna, motivo per cui Bob Jones e Terry Jones non sono elencati uno dopo l'altro.

Puoi ordinare in base alla seconda colonna con il -k switch, specificando la colonna su cui vuoi ordinare, che nel nostro elenco è la colonna due:

$ cat contacts.txt | sort -k2

Jenny Case
Dana David
Colin Doe
Susan Gee
Linda Gray
Bob Jones
Terry Jones
Leonard Schmidt
Leslie Smith

Se disponi di un lungo elenco di contatti e ritieni che questo elenco contenga voci duplicate, puoi reindirizzare l'elenco a sort e poi uniq per rimuovere quei duplicati:

$ cat contacts.txt | sort | uniq

Questo comando visualizza solo voci univoche, ma non salva i risultati. Per ordinare il file, filtrare le voci univoche e quindi salvare il nuovo file, utilizza questo:

$ cat contacts.txt | sort -k2 | uniq > contact_list.txt

Ricorda che l'operatore pipe e gli operatori di reindirizzamento file fanno cose diverse.

Conclusione

Ora che hai avuto un assaggio del potere della riga di comando, pensi di poter gestire la responsabilità? Le utilità della riga di comando hanno una maggiore flessibilità rispetto alle loro controparti grafiche. E per alcune attività non ci sono equivalenti grafici.

Il modo migliore per apprendere il comportamento della riga di comando è sperimentare. Ad esempio, il sort comando non ha fatto quello che pensavi avrebbe dovuto fino a quando non hai esplorato ulteriormente. Non dimenticare di utilizzare la potenza del tuo manuale (man ) per trovare quelle opzioni e opzioni segrete "nascoste" che trasformano la frustrazione della riga di comando in un successo da riga di comando.


Linux
  1. Come usare il comando Linux grep

  2. Avere una mucca sulla riga di comando di Linux

  3. Entra nella riga di comando di Linux

  4. Lavorare con i flussi di dati sulla riga di comando di Linux

  5. Usa il comando Linux grep

Padroneggia la riga di comando di Linux

Manipolazione del testo dalla riga di comando con grep

Utilizzo delle immagini Docker dalla riga di comando

Comando Grep in Linux (con esempi)

Uso del comando grep in Linux

Nozioni di base sulla riga di comando di Linux:lavorare con file e directory