logo

Canalització en Unix o Linux

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.