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!