Redirecționare și conducte (Pipes) în Linux / Bash

Scripting Bash POSIX / Bash built-in

Redirecționarea fluxurilor standard de intrare (stdin), ieșire (stdout), erori (stderr) și legarea prin conducte (pipes).

Sintaxă comandă
comanda > fisier.txt
comanda >> fisier.txt
comanda1 | comanda2
comanda 2>&1

Ce face Redirecționare și conducte (Pipes)

Fiecare proces din Linux pornește cu 3 canale de comunicare (descriptori de fișier): 0 (stdin – intrare standard, tastatură), 1 (stdout – ieșire standard, ecran) și 2 (stderr – flux de erori, ecran).

Operatorul > suprascrie fișierul destinație, în timp ce >> adaugă la sfârșitul lui (append). Operatorul de conductă | (pipe) leagă direct ieșirea primului program la intrarea celui de-al doilea, permițând compunerea de operațiuni complexe.

Opțiuni și argumente

Opțiune / Parametru Descriere
> fisier Redirecționează ieșirea standard (stdout) și suprascrie fișierul.
>> fisier Redirecționează ieșirea standard și adaugă textul la finalul fișierului existent.
< fisier Redirecționează conținutul fișierului către intrarea standard (stdin) a comenzii.
2> fisier Redirecționează doar mesajele de eroare (stderr).
2>&1 Redirecționează erorile (descriptorul 2) în același flux cu ieșirea standard (descriptorul 1).
&> fisier Redirecționează simultan atât ieșirea standard cât și erorile în același fișier.
| Conductă (pipe): trimite ieșirea primei comenzi direct ca intrare pentru a doua comandă.

Exemple

Exemplul 1: Separarea erorilor de rezultatele normale

Trimitem erorile către un fișier de log și ascundem ieșirea normală.

echo "Mesaj normal" > normal.txt
ls fisier_inexistent_123 2> erori.log || true
cat normal.txt
grep -o "No such file or directory" erori.log || [ -s erori.log ] && echo "Eroarea a fost capturata in log"

Rezultat

Mesaj normal
No such file or directory
Eroarea a fost capturata in log

Exemplul 2: Înlănțuirea comenzilor prin pipe

Generăm numere, le filtrăm și le numărăm.

seq 1 100 | grep "5" | wc -l | tr -d ' '

Rezultat

19

Greșeli frecvente

  • Folosirea din greșeală a unui singur > în loc de >>, ceea ce șterge instantaneu tot conținutul anterior al fișierului de jurnal.
  • Citirea și scrierea în același fișier simultan (ex. cat fisier.txt | tr a-z A-Z > fisier.txt): shell-ul va goli fișierul înainte ca prima comandă să îl poată citi, pierzând datele!

Comenzi înrudite

  • tee: Duplică fluxul de ieșire: îl trimite simultan atât pe ecran, cât și într-unul sau mai multe fișiere.
  • cat: Afișează conținutul unuia sau mai multor fișiere și le concatenează în ieșirea standard.
  • echo: Afișează o linie de text sau valorile variabilelor în consolă sau ieșirea standard.