This is an old revision of the document!
Ne interesează internele shell-ului și modul în care acesta execută comenzi. Urmărim să știm ce facilități ne oferă shell-ului pentru a ne face mai rapid și mai productiv activitățile cu sistemul de operare.
/etc/passwd
bash
, lsof
echo
env
, set
Pornirea unui shell folosind programul login
și apoi /etc/passwd
. Variabila SHELL
Terminalul unui shell și descriptorii standard de fișier pentru un shell
Ce acțiuni realizează shell-ul la rularea unei comenzi, rularea unei comenzi în background
Determinarea comenzilor builtin și a comenzilor externe (type
și which
).
Diferența între:
ps ; echo ; echo ; echo ; echo ; echo ; echo ; echo ; echo ; ps
și
ps ; /bin/echo ; /bin/echo ; /bin/echo ; /bin/echo ; /bin/echo ; /bin/echo ; /bin/echo ; /bin/echo ; ps
Crearea de subshell-uri, problema cu
echo | read v
Actualizarea variabilei de mediu PATH
. Definirea de noi variabile de mediu. Prefixarea unei comenzi cu inițializarea unei variabile de mediu
Expandarea comenzilor:
stat -c "%s" $(find /etc/ -type f -name '*.conf' -size +5k) lsof -p $(pgrep bash | tr '\n' ',')
Operații pe șiruri în shell
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
:
student@midgard:~$ ls -ld /etc/[^abc]*{.conf,.d}
Dorim să afișăm un mesaj de întâmpinare custom pentru momentul în care un utilizator deschide un shell. Mesajul vrem să fie
Welcome, <nume-utilizator>, to Pearson-Hardman-Specter. <nume-utilizator> just got Litt-up!
unde <nume-utilizator>
este username-ul.
Pentru aceasta va trebui să editați, ca root
(adică folosind sudo
), fișierul /etc/bash.bashrc
și să scrieți la sfârșitul fișierului comanda dorită. Comanda va fi rulată la orice deschidere de shell nou. Folosiți comanda sudo vim /etc/bash.bashrc
pentru a edita ca root fișierul /etc/bash.bashrc
.
/etc/bash.bashrc
este un fișier global de configurare a shell-ului. Fișierul este parcurs la fiecare deschidere de shell.
Pentru început afișați șirul Welcome
la fiecare deschidere de shell. Adică scrieți la sfârșitul fișierului /etc/bash.bashrc
comanda pentru afișarea șirului. Apoi deschideți un shell nou (sau un tab nou de shell pentru verificare).
echo
urmată de șirul de afișat. Este recomandat ca șirul de afișat, transmis ca argument comenzii echo
să fie pus între ghilimele ("
, quotes).
Pentru afișarea șirului dorit, care conține username-ul, folosiți variabila USER
, variabilă deja definită în shell. Variabila USER
conține username-ul. Pentru a afișa valoarea unei variabile folosim construcția de forma $USER
. De exemplu, pentru a afișa numele de utilizator și un mesaj de salut folosim comanda
echo "Salut, $USER"
Descărcați și despachetați arhiva de aici.
Listați, folosind globbing, toate imaginile cu extensiile bmp, jpg, png, gif
din directorul rezultat în urma dezarhivării.
bmp
, jpg
, png
și gif
folosiți operatorii de globbing *
(star) si {opt1,opt2,opt3}
(acolade). Un exemplu simplu de utilizare (porniți de la acesta) este
ls practic/*/*.png
Creați o arhivă tar.gz
cu fișierele din ierarhia /etc/
care au extensia .conf
și au dimensiunea mai mare de 5KB
.
Creați o arhivă zip
cu fișierele din ierarhia /usr/include
care conțin șirul epoll
,
-r
a comenzii grep
pentru a căuta recursiv într-o ierarhie. Folosiți opțiunea -l
a comenzii grep
pentru a afișa doar numele fișirelor găsite.
Inițializați variabila text
la un șir de caractere.
Afișați la ieșirea standard mesajul "Variabila text are valoarea '"...'". Valorea poate fi actualizata."
. În mesaj, toate caracterele ghilimele (“
) și apostrof ('
) se vor afișa întocmai. Iar în loc de …
puneți valoarea variabile text
.
Folosiți comanda locate
pentru a afișa fișierele din sistem care au extensia .conf
.
Pentru fișierele de mai sus afișați directoarele din care fac parte. Eliminați duplicatele.
dirname
pentru extragerea directoarelor.
Pentru directoarele de mai sus afișați numele directorului și inode-ul, separate prin virgulă (,
).
stat
.
Bonus: Sortați directoarele de mai sus în ordinea inode-ului. Afișați numele directorului și inode-ul (separate prin virgulă (,
)).
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ă (,
).
stat
.
Sortați executabilele de mai sus în ordinea timpului ultimei schimbări.
stat
permite sortare de orice fel.
Creați 100 de fișiere cu numele "myfile-XY.txt"
, unde XY
este indexul fișierului între 00
și 99
.
seq
și touch
.
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
.