Table of Contents

8. Înlănțuirea comenzilor

Comenzile în shell pot fi înlănțuite pentru a obține noi funcționalități. Anumite comenzi în shell pot primi diverse argumenter pentru a le altera funcționarea, în vreme ce altele primesc informații la standard input. Un one liner poate combina funcționalități precum folosirea operatorului | (pipe) sau expandarea comenzii ($(...)) pentru a crea rapid noi funcționalități în linia de comandă.

Subiecte abordate

Utilitare folosite

Resurse utile

Exerciții

Demo-uri

Demo: Folosire filtre de bază

Folosire head, tail, sort, uniq, cut, tr, wc

Generare parolă random

Demo: Expresii regulate

Exemple de expresii regulate

Câte directive #include conțin fișierele din /usr/include? Câte directive #include conțin fișierele de tip header C++ (.hpp)?

Demo: Folosire avansată grep și sort

Afișați fișierele din ierarhia /usr/include în ordinea numărului de apariții ale cuvântului FILE.

Demo: Expandare comenzi

stat -c "%s" $(find /etc/ -type f -name '*.conf' -size +5k)
lsof -p $(pgrep bash | tr '\n' ',')

Demo: Globbing

Dorim să afișăm toate fișierele cu extensia .conf din /etc, care încep cu a, b, c, d sau e:

ls -l /etc/[a-e]*.conf

Dorim să afișăm fișierele (sau directoarele) cu extensiile .conf sau .d din /etc:

ls -ld /etc/*{.conf,.d}

De ce am folosit parametrul -d la ls?

Dorim să afișăm fișierele (sau directoarele) cu extensiile .conf sau .d din /etc care nu încep cu a, b, c:

ls -ld /etc/[^abc]*{.conf,.d}

Expandare comenzi

Creați o arhivă .tar.gz cu toate fișierele din /usr/include mai mari de 10KB.

Creați o arhivă .zip cu toate fișierele din /usr/include mai mari de 10KB.

Creați o arhivă .zip cu toate fișierele din /usr/include mai mari de 10KB accesate în ultimele 3 zile.

Pentru accesare în ultimele 3 zile, folosiți opțiunea -atime a comenzii find.

Informații despre dispozitive de tip caracter

Pentru dispozitivele de tip caracter din /dev afișați numele, majorul și minorul.

Folosiți find cu opțiunea -type și parametrul corespunzător pentru a extrage dispozitivele de tip caracter.

Folosiți stat cu opțiunile de formatare corespunzătoare și expandarea comenzii ($(...)) în conjuncție cu comanda find pentru afișarea numelui, majorului și minorului.

Bonus: Sortați-le în funcție de major.

Pentru sortare folosiți comanda sort. Va trebui să specificați separatorul de câmpuri (folosind opțiunea -t) și cheia de sortare (folosind opțiunea -k). Pentru că avem cheie de sortare un număr va trebui să faceți sortare numerică.

Alte informații despre dispozitive de tip caracter

Câte dispozitive de tip caracter se găsesc în fiecare director din ierarhia /dev?

Folosiți find pentru a extrage dispozitivele de tip caracter.

Folosiți dirname și expandarea comenzii ($(...)) în conjuncție cu comanda find de mai sus pentru a extrage doar numele directoarelor.

Prelucrați output-ul de mai sus prin comanda sort pentru a-l sorta.

Apoi folosiți output-ul astfel prelucrat prin comanda uniq cu opțiunea -c pentru a afișa numărul de apariții al fiecărui director.

Numele paginilor de manual dintr-o anumită secțiune

Afișați numele paginilor de manual din secțiunea 5. Numele sunt partea fără extensie din fișierele existente în directorul /usr/share/man/man5/. De exemplu, pentru fișierul issue.5.gz, numele este issue.

Recomandăm pașii de mai jos.

Construiți glob-ul care să afișeze toate fișierele cu extensia .5.gz din directorul /usr/share/man/man5/.

Nu este nevoie să folosiți find, puteți folosi un glob.

Folosiți comanda basename pentru a extrage doar numele de bază al fișierului.

Comanda basename ca argumente numele fișierulelor. Pentru a elimina extensia folosiți opțiunea -s a comenzii basename.

Opțiunea -s a comenzii basename primește ca argument extensia ce trebuie scoasă. Trebuie să scoateți extensia 5.gz.

Din lista de mai sus, extrageți doar comenzile care încep cu o anumită literă. Adică din outputul de mai sus, folosiți o comandă de forma grep '^a' pentru a extrage liniile care încep cu litera a folosind grep.

Afișare fișiere executabile pentru procese

Afișați procesele al căror proces părinte este init, procesul cu PID-ul 1.

Pentru procesele de mai sus afișați doar comanda completă.

Filtrați doar acele comenzi care încep cu / (adică este calea completă către executabil).

Selectați doar calea către executabil, fără argumente către acesta.

Pentru executabilele de mai sus afișați numele și timpul ultimei schimbării (change time), separate prin virgulă (,).

Folosiți comanda stat.

Sortați executabilele de mai sus în ordinea timpului ultimei schimbări.

Sortarea poate fi simplă, nu este nevoie de sortare numerică. Formatul datei afișat de stat permite sortare de orice fel.

Creare fișiere

Creați 100 de fișiere cu numele myfile-XY.txt, unde XY este indexul fișierului între 00 și 99.

Folosiți comenzile seq și touch.

Ca model folosiți-vă de comanda

seq -f "%02g" 1 100

Între ghilimele poate apărea un șir complet. Gândiți-vă că trebuie să generați șiruri de forma myfile-XY.txt.