Aflați elementele de bază despre cum funcționează redirecționarea Linux I/O (intrare/ieșire).


Unul dintre cele mai importante și interesante subiecte sub administrarea Linux este redirecționarea I/O. Această caracteristică a liniei de comandă vă permite să redirecționați intrarea și/sau ieșirea comenzilor din și/sau către fișiere sau să uniți mai multe comenzi împreună folosind conducte pentru a forma ceea ce este cunoscut sub numele de „conductă de comandă ” .

Toate comenzile pe care le rulăm produc în mod fundamental două tipuri de rezultate:

  1. rezultatul comenzii – date pe care programul este proiectat să le producă și
  2. starea programului și mesajele de eroare care informează utilizatorul despre detaliile execuției programului.

În Linux și alte sisteme asemănătoare Unix, există trei fișiere implicite numite mai jos, care sunt, de asemenea, identificate de shell folosind numerele descriptoare de fișiere:

  1. stdin sau 0 – este conectat la tastatură, majoritatea programelor citesc intrarea din acest fișier.
  2. stdout sau 1 – este atașat la ecran și toate programele își trimit rezultatele în acest fișier și
  3. stderr sau 2 – programele trimit mesaje de stare/eroare la acest fișier care este, de asemenea, atașat la ecran.

Prin urmare, redirecționarea I/O vă permite să modificați sursa de intrare a unei comenzi, precum și unde sunt trimise mesajele de ieșire și de eroare ale acesteia. Și acest lucru este posibil prin operatorii de redirecționare “< ” și “> ”.

Cum să redirecționați ieșirea standard către fișier în Linux

Puteți redirecționa ieșirea standard ca în exemplul de mai jos, aici dorim să stocăm rezultatul comenzii de sus pentru o inspecție ulterioară:

top -bn 5 >top.log

Unde sunt steagurile:

  1. -b – permite top să ruleze în modul lot, astfel încât să puteți redirecționa rezultatul său către un fișier sau o altă comandă.
  2. -n – specifică numărul de iterații înainte ca comanda să se încheie.

Puteți vizualiza conținutul fișierului top.log folosind comanda cat, după cum urmează:

cat top.log

Pentru a adăuga rezultatul unei comenzi, utilizați operatorul “>> ”.

De exemplu, pentru a adăuga rezultatul comenzii de mai sus în fișierul top.log, în special într-un script (sau pe linia de comandă), introduceți linia de mai jos:

top -bn 5 >>top.log

Notă: folosind numărul descriptorului de fișier, comanda de redirecționare a ieșirii de mai sus este aceeași cu:

top -bn 5 1>top.log

Cum să redirecționați eroarea standard către fișier în Linux

Pentru a redirecționa eroarea standard a unei comenzi, trebuie să specificați în mod explicit numărul descriptorului fișierului, 2 pentru ca shell-ul să înțeleagă ce încercați să faceți.

De exemplu, comanda ls de mai jos va produce o eroare atunci când este executată de un utilizator normal de sistem fără privilegii root:

ls -l /root/

Puteți redirecționa eroarea standard către un fișier după cum urmează:

ls -l /root/ 2>ls-error.log
cat ls-error.log 

Pentru a adăuga eroarea standard, utilizați comanda de mai jos:

ls -l /root/ 2>>ls-error.log

Cum să redirecționați ieșirea/eroarea standard către un singur fișier

De asemenea, este posibil să captați toate rezultatele unei comenzi (atât ieșirea standard, cât și eroarea standard) într-un singur fișier. Acest lucru se poate face în două moduri posibile prin specificarea numerelor descriptorilor fișierului:

1. Prima este o metodă relativ veche care funcționează după cum urmează:

ls -l /root/ >ls-error.log 2>&1

Comanda de mai sus înseamnă că shell-ul va trimite mai întâi rezultatul comenzii ls în fișierul ls-error.log (folosind >ls-error.log), apoi va scrie toate mesajele de eroare către descriptorul de fișier 2 (ieșire standard) care a fost redirecționat către fișierul ls-error.log (folosind 2>&1 ). Implicând că eroarea standard este, de asemenea, trimisă la același fișier ca ieșirea standard.

2. A doua și directă metodă este:

ls -l /root/ &>ls-error.log

De asemenea, puteți adăuga ieșire standard și eroare standard la un singur fișier, astfel:

ls -l /root/ &>>ls-error.log

Cum să redirecționați intrarea standard către fișier

Majoritatea, dacă nu toate comenzile își primesc intrarea de la intrarea standard, iar implicit intrarea standard este atașată la tastatură.

Pentru a redirecționa intrarea standard dintr-un fișier altul decât tastatura, utilizați operatorul „< ” după cum urmează:

cat <domains.list 

Cum se redirecționează intrarea/ieșirea standard către fișier

Puteți efectua redirecționarea standard de intrare și de ieșire standard în același timp, folosind comanda sortare după cum urmează:

sort <domains.list >sort.output

Cum să utilizați redirecționarea I/O folosind conducte

Pentru a redirecționa ieșirea unei comenzi ca intrare a alteia, puteți utiliza conducte, acesta este un mijloc puternic de a construi linii de comandă utile pentru operațiuni complexe.

De exemplu, comanda de mai jos va lista primele cinci fișiere modificate recent.

ls -lt | head -n 5 

Iată, opțiunile:

  1. -l – activează formatul de listă lungă
  2. -t – sortați după timpul de modificare, cele mai noi fișiere fiind afișate mai întâi
  3. -n – specifică numărul de linii de antet de afișat

Comenzi importante pentru construirea conductelor

Aici, vom analiza pe scurt două comenzi importante pentru construirea conductelor de comandă și acestea sunt:

xargs care este folosit pentru a construi și executa linii de comandă din intrarea standard. Mai jos este un exemplu de conductă care utilizează xargs, această comandă este folosită pentru a copia un fișier în mai multe directoare în Linux:

echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

Si optiunile:

  1. -n 1 – instruiește xargs să folosească cel mult un argument pe linie de comandă și să trimită la comanda cp
  2. cp – copiază fișierul
  3. -v – afișează progresul comenzii de copiere.

Pentru mai multe opțiuni de utilizare și informații, citiți pagina de manualxargs:

man xargs 

O comandă tee citește din intrarea standard și scrie în fișiere și fișiere standard. Putem demonstra cum funcționează tee după cum urmează:

echo "Testing how tee command works" | tee file1 

Filtrele de fișiere sau de text sunt utilizate în mod obișnuit cu conducte pentru operațiuni eficiente de fișiere Linux, pentru a procesa informații în moduri puternice, cum ar fi restructurarea ieșirii comenzilor (acest lucru poate fi vital pentru generarea de rapoarte Linux utile), modificarea textului în fișiere și alte câteva alte administrări de sistem Linux sarcini.

Pentru a afla mai multe despre filtrele și conductele Linux, citiți acest articol Găsiți cele mai bune 10 adrese IP care accesează serverul Apache, arată un exemplu util de utilizare a filtrelor și conductelor.

În acest articol, am explicat elementele fundamentale ale redirecționării I/O în Linux. Nu uitați să vă împărtășiți gândurile prin secțiunea de feedback de mai jos.