Comando tubo di Linux

Comando tubo di Linux
Questo comando "pipe" è prontamente disponibile su piattaforme UNIX/Linux. Questo comando tuba l'uscita del comando precedente al comando successivo. Ci sono letteralmente tonnellate di situazioni in cui questo metodo offre un valore serio.Prima di saltare più a fondo, c'è qualcosa da sapere. Ogni singolo programma nel sistema Unix/Linux ha 3 flussi di dati integrati.
  • Stdin (0) - Input standard
  • STDOUT (1) - Output standard
  • Stderr (2) - Errore standard

Quando lavoreremo con i trucchi "pipe", "pipe" prenderà la stima di un comando e lo passerà alla stdin del comando successivo.

Dai un'occhiata ad alcuni dei modi più comuni in cui puoi incorporare il comando "pipa" nel tuo utilizzo quotidiano.

Comando tubo

Uso di base

È meglio approfondire il metodo di lavoro di "pipa" con un esempio dal vivo, a destra? Iniziamo. Il seguente comando dirà "Pacman", il gestore dei pacchetti predefiniti per Arch e tutte le distro basate su Arch, di stampare tutti i pacchetti installati sul sistema.

Pacman -qqe

È un elenco davvero lungo di pacchetti. Come, per raccogliere solo pochi componenti? Potremmo usare "grep". Ma come? Un modo sarebbe scaricare l'output in un file temporaneo, "grep" l'output desiderato ed eliminare il file. Questa serie di compiti, da sola, può essere trasformata in una sceneggiatura. Ma scriviamo solo per cose molto grandi. Per questo compito, invochiamo il potere di "pipe"!

Pacman -qqe | grep

Fantastico, non è vero? Il "|" Il segno è la chiamata al comando "pipe". Afferra lo stdout dalla sezione sinistra e la alimenta nella stdin della sezione destra.

Nell'esempio di cui sopra, il comando "pipe" ha effettivamente superato l'output alla fine della parte "grep". Ecco come si svolge.

Pacman -qqe> ~/desktop/pacman_package.TXT
Grep Python ~/Desktop/Pacman_Package.TXT

Piping multipli

Fondamentalmente, non c'è niente di speciale con l'uso avanzato del comando "pipe". Dipende completamente da te su come usarlo.

Ad esempio, iniziamo impilando più tubazioni.

Pacman -qqe | grep p | grep t | grep py

L'output del comando Pacman viene filtrato sempre più da "grep" attraverso una serie di tubazioni.

A volte, quando stiamo lavorando con il contenuto di un file, può essere davvero molto grande. Scoprire il posto giusto della nostra voce desiderata può essere difficile. Cerchiamo tutte le voci che includono le cifre 1 e 2.

Demo di gatto.txt | grep -n 1 | grep -n 2

Manipolando l'elenco di file e directory

Cosa fare quando hai a che fare con una directory con tonnellate di file? È piuttosto fastidioso scorrere l'intero elenco. Certo, perché non renderlo più sopportabile con il tubo? In questo esempio, controlliamo l'elenco di tutti i file nella cartella "/usr/bin".

ls -l | Di più

Qui, "LS" stampa tutti i file e le loro informazioni. Quindi, "pipe" lo passa a "più" per lavorare con quello. Se non lo sapevi, "di più" è uno strumento che trasforma i testi in una vista screenful alla volta. Tuttavia, è un vecchio strumento e secondo la documentazione ufficiale, "meno" è più raccomandato.

ls -l /usr /bin | meno

ORSIDING OUTPUT

C'è uno strumento integrato "ordina" che prenderà input di testo e risolverà loro. Questo strumento è un vero gioiello se stai lavorando con qualcosa di veramente disordinato. Ad esempio, ho ottenuto questo file pieno di stringhe casuali.

Demo di gatto.TXT

Basta tubilo per "ordinare".

Demo di gatto.txt | ordinare

Così va meglio!

Stampa corrispondenze di un modello particolare

ls -l | Trovare ./ -Type f -Name "*.txt "-exec grep 00110011 \;

Questo è un comando piuttosto contorto, giusto? Inizialmente, "LS" emette l'elenco di tutti i file nella directory. Lo strumento "Find" prende l'output, cerca ".txt "file e convoca" grep "per cercare" 00110011 ". Questo comando controllerà ogni singolo file di testo nella directory con l'estensione txt e cercherà le partite.

Stampa il contenuto di file di un intervallo particolare

Quando lavori con un grande file, è comune avere la necessità di controllare il contenuto di un certo intervallo. Possiamo farlo proprio con una combinazione intelligente di "gatto", "testa", "coda" e, naturalmente, "pipe". Lo strumento "Head" emette la prima parte di un contenuto e "coda" emette l'ultima parte.

gatto | Testa -6
gatto | Tail -6

Valori univoci

Quando si lavora con output duplicati, può essere piuttosto fastidioso. A volte, input duplicati può causare problemi seri. In questo esempio, lanciamo "Uniq" su un flusso di testo e salviamo in un file separato.

Ad esempio, ecco un file di testo contenente un grande elenco di numeri lunghi 2 cifre. Ci sono sicuramente contenuti duplicati qui, giusto?

Duplicato del gatto.txt | ordinare

Ora, eseguiamo il processo di filtraggio.

Duplicato del gatto.txt | ordinamento | Uniq> unico.TXT

Dai un'occhiata all'output.

BAT UNICO.TXT

Sembra migliore!

Tubi di errore

Questo è un metodo di tubazione interessante. Questo metodo viene utilizzato per reindirizzare lo stderr a stdout e procedere con le tubazioni. Questo è indicato dal simbolo "| &" (senza citazioni). Ad esempio, creiamo un errore e inviamo l'output a qualche altro strumento. In questo esempio, ho appena digitato un comando casuale e ho passato l'errore a "grep".

ADSFDS | & Grep n

Pensieri finali

Mentre il "tubo" stesso è piuttosto semplicistico di natura, il modo in cui funziona offre un modo molto versatile di utilizzare il metodo in modi infiniti. Se ti piacciono gli script bash, allora è molto più utile. A volte, puoi semplicemente fare cose folli aperte! Scopri di più sugli script bash.