Una canalització és una forma de redirecció (transferència de la sortida estàndard a una altra destinació) que s'utilitza a Linux i altres sistemes operatius semblants a Unix per enviar la sortida d'una ordre/programa/procés a una altra ordre/programa/procés per a un processament posterior. . Els sistemes Unix/Linux permeten connectar el stdout d'una ordre a l'stdin d'una altra ordre. Podeu fer-ho fent servir el caràcter pipe ‘|’ .
La canonada s'utilitza per combinar dues o més ordres, i en això, la sortida d'una ordre actua com a entrada per a una altra ordre, i la sortida d'aquesta ordre pot actuar com a entrada per a la següent ordre, etc. També es pot visualitzar com una connexió temporal entre dues o més ordres/programes/processos. Els programes de línia d'ordres que fan el processament posterior s'anomenen filtres.
mvc amb java
Aquesta connexió directa entre ordres/programes/processos els permet operar simultàniament i permet transferir dades entre ells de manera contínua en lloc d'haver-les de passar per fitxers de text temporals o per la pantalla.
Les canonades són unidireccionals, és a dir, les dades flueixen d'esquerra a dreta a través del pipeline.
Sintaxi:
command_1 | command_2 | command_3 | .... | command_N>
Exemple de canalització en Unix o Linux
1. Enumereu tots els fitxers i directoris i doneu-los com a entrada a l'ordre `grep` mitjançant la canalització a Linux
ls | grep file.txt>
ls | grep file.txt
En aquest primer, estem utilitzant `ls` per llistar tots els fitxers i directoris del directori actual, després passant la seva sortida a l'ordre `grep` i cercant el nom de fitxer `file.txt`. La sortida de l'ordre ls s'envia a l'entrada de l'ordre grep i el resultat és una llista de fitxers que coincideixen amb el terme de cerca.
2. Enumereu tots els fitxers i directoris i doneu-los com a entrada a ordres `més` utilitzant la canalització a Linux.
$ ls -l | more>
$ ls -l | més
L'ordre more pren la sortida de $ ls -l com a entrada. L'efecte net d'aquesta ordre és que la sortida de ls -l es mostra una pantalla a la vegada. La canonada actua com un contenidor que pren la sortida de ls -l i la dóna a més com a entrada. Aquesta ordre no utilitza un disc per connectar la sortida estàndard de ls -l a l'entrada estàndard de more perquè la pipe s'implementa a la memòria principal.
Pel que fa als operadors de redirecció d'E/S, l'ordre anterior és equivalent a la següent seqüència d'ordres.
$ ls -l ->temp més -> temp (o més temp) [contingut de temp] rm temp>temp
ls -l -> temp
La sortida de les dues ordres anteriors és la mateixa.
3. Ordena una llista de fitxers per mida mitjançant la canalització a Linux
ls -l sort -k 5>ls -l sort -k 5
Aquesta ordre enumera tots els fitxers del directori actual i després utilitza l'ordre `sort` per ordenar la llista per la cinquena columna, que representa la mida del fitxer.
millorat per al bucle java
4. Utilitzeu l'ordre sort i uniq per ordenar un fitxer i imprimir valors únics mitjançant la canalització a Linux
$ sort record.txt | uniq>
Això ordenarà el fitxer donat i només imprimirà els valors únics.
ordena registre.txt | uniq
5. Utilitzeu el cap i la cua per imprimir línies en un rang determinat en un fitxer.
$ cat sample2.txt | head -7 | tail -5>
Aquesta ordre selecciona les 7 primeres línies a través de l'ordre (cap -7) i s'introduirà a l'ordre (cua -5), que finalment imprimirà les últimes 5 línies d'aquestes 7 línies.
cat sample2.txt | cap -7 | cua -5
6. Utilitzeu ls i find per llistar i imprimir totes les línies que coincideixin amb un patró particular als fitxers coincidents.
$ ls -l | find ./ -type f -name '*.txt' -exec grep 'program' {} ;> Aquesta ordre selecciona fitxers amb .txt extensió al directori donat i cerca patrons com el programa a l'exemple anterior i imprimeix els que tenen programa.
Linux executeu cmd
ls -l | find ./ -type f -name *.txt -exec grep program {} ;
7. Utilitzeu l'ordre cat, grep, tee i wc per llegir l'entrada concreta de l'usuari i emmagatzemar-la en un fitxer i imprimir el recompte de línies.
$ cat result.txt | grep 'Rajat Dua' | tee file2.txt | wc -l>
Aquesta comanda selecciona Rajat Dua i emmagatzemeu-los a file2.txt i imprimiu el nombre total de línies coincidents Rajat Dua
cat resultat.txt | grep Rajat Dua | tee file2.txt | wc -l
un objecte en java
8.Com puc redirigir la sortida d'una ordre canalitzada a un fitxer en Unix o Linux?
Podem utilitzar l'operador de redirecció `>` per redirigir la sortida d'una ordre canalitzada.
Per exemple:
Si tinc un nom de fitxer `file.txt` i vull redirigir-lo a un nom de fitxer `geeks.txt`.
ls | grep 'file'>geeks.txt>geeks.txt
ls | grep 'fitxer'> geeks.txt
Conclusió
La canalització és una característica potent dels sistemes operatius Unix i Linux que ens ajuda a enllaçar diferents ordres per realitzar tasques complexes de manera ràpida i eficient. En aquest article hem après com podem redirigir la sortida d'una ordre a l'entrada d'una altra ordre. En general, podem dir que mitjançant l'ús de canonades podem estalviar temps, millorar la productivitat i reduir l'ús d'espai en disc.