Comenzi utile: ls, ls -l, cd, pwd, vi, chown, chmod, recursive, su, tar, zip, sudo, rm, touch, cp, mv, mkdir, stat, ln, ln -s, who, id, apt-get, apt-cache, man, less, cat, find
Pentru documentarea într-un sistem Linux folosim pagini de manual. De exemplu pentru accesarea paginii de manual a comenzii ls folosim comanda man:
$ man ls
Pentru accesarea paginii de manual a comenzii passwd folosim comanda
$ man passwd
Paginile de manual au secțiuni. Pentru a vedea care este semnificatia fiecarei sectiuni, consultati comanda
$ man man
. Astfel dacă dorim să accesăm pagina de manual a fișierului /etc/passwd folosim comanda
$ man 5 passwd
La fel dacă dorim să accesăm pagina de manual a comenzilor printf și write folosim comenzile
$ man printf $ man write
pe când dacă dorim să accesăm paginile de manual ale apelurilor de bibliotecă printf și write folosim comenzile
$ man 3 printf $ man 2 write
O abilitate importantă este căutarea în paginile de manual pentru identificarea unor informații conceptuale sau a unor opțiuni pentru comenzi. Căutarea se face în cadrul pager-ului (utilitarului de afișare). Pager-ul comun pe sistemele Unix/Linux este less.
Pentru căutarea în paginile de manual folosim / (tasta slash) urmată de șirul de căutare și apoi tasta Enter pentru căutarea șirului (de fapt a expresiei regulate) în fișierul curent.
/recursive<Enter> (<Enter> denotă apăsarea tastei Enter) înseamnă căutarea în fișierul afișat curent (probabil pagină de manual) a șirului recursive).ls./^ +-s<Enter> înseamnă căutarea în fișierul afișat curent (probabil o pagină de manual) a șirului -s aflat la începutul rândului (precedat de cel puțin un spațiu).du.
De multe ori prima potrivire (match) nu este ceea ce căutăm și dorim să ajungem la următoarea. Pentru aceasta folosim tasta n (de la next) pentru următoarea potrivire. Și tot așa. Dacă vrem să găsim potrivirea precedentă folosim tasta N.
? (semnul întrebării) în locul tastei /. Adică o expresie de genul ?access time<Enter> va conduce la căutarea înapoi în cadrul fișierului curent a șirului access time.
În acest caz tasta n va fi folosită pentru căutarea în continuare (adică înapoi), iar tasta N va fi folosită pentru căutarea în sens invers (adică înainte).
/, n, N, ?) sunt folosite și în editorul Vim.
Folosiți comanda ls cu opțiunea -l și o altă opțiune (de determinat) pentru a afișa spațiul ocupat de intrările din directorul curent.
Folosiți comanda du cu argumentul potrivit pentru a afla spațiul ocupat de directorul /etc. Indicație: Căutați după opțiune de sumarizare (summarize).
Folosiți comanda stat pentru a afișa doar dimensiunea (în octeți) a fișierului /etc/passwd.
Folosiți comanda stat pentru a afișa doar numele și dimensiunea (în octeți) a fișierelor din directorul /etc.
Folosiți comanda date pentru a afișa data curentă în formatul YYYY-MM-DD_HH:mm.
Folosiți comanda touch pentru a schimba timpii de acces/modificare/schimbare ai unui fișier oarecare în 2010-10-31 12:13.
Folosiți comanda pwgen pentru a genera 3 parole a câte 16 caractere care să conțină cel puțin un caracter special, cel puțin o cifră și cel puțin o literă mare.
Bonus: Folosiți o construcție de tipul stat … | paste … | bc pentru a calcula spațiul ocupat de fișierele cu extensia din directorul /etc cu extensia *.conf. Indicație: Urmăriți și postarea de aici.
Ierarhia de fișiere în Unix/Linux este dată de Filesystem Hierarchy Standard. Fiecare director din vârful ierarhiei are un rol predeterminat. Un pachet instalat în sistemul curent, duce la actualizarea sistemului de fișiere în diferite locuri ale ierarhiei.
De exemplu, rularea comenzii
$ dpkg -L pwgen
duce la afișarea componentelor din sistemul de fișiere care aparțin pachetului pwgen. Un pachet ajunge să completeze intrări pentru binare/executabile (în /bin sau, mai des, în /usr/bin), fișiere de configurare (în /etc), fișiere de documentare sau generaliste (în /usr/share), biblioteci (în /lib sau, mai des, în /usr/lib), fișierele de jurnalizare (în /var/log) și așa mai departe.
Putem afla informații despre intrări din sistemul local de fișiere folosind comenzi precum ls -l, stat, file.
Comanda which urmată de o comandă afișează calea completă a comenzii respective.
Identificați componentele din sistemul de fișiere care aparțin pachetului grub-common. Verificați ce tip de fișiere sunt și ce reprezintă.
Investigați care este editorul folosit în mod implicit de shell prin investigarea comenzii editor. Indicație: Porniți de la which și apoi folosiți ls -l sau file.
Folosiți comanda
$ sudo apt-get install zoo
pentru a instala pachetul zoo. Investigați în ierarhia /var unde a fost descărcat pachetul .deb pentru a fi apoi instalat în sistem. Indicație: Porniți de la directorul /var/lib.
Căile în sistemul de fișiere pot fi abolute (încep de la directorul rădăcină) sau pot fi relative (sunt relative la directorul curent).
Exemple de căi absolute:
/etc/apt/sources.lists/usr/bin/pwgen/boot/grub/grub.cfg/var/lib/apt/Exemple de căi relative:
repo.git/cursuri/curs-01/../../projects/events/message.txt./a.out
/tmp folosind comanda
$ cd /tmp
Folosiți o cale absolută și o cale relativă pentru a ajunge în directorul /boot/grub.
Folosiți o cale relativă și o cale absolută pentru a afișa conținutul directorului Downloads/ din directorul home al utilizatorului student.
Folosiți o cale relativă și o cale absolută pentru a afișa ultimele 10 linii din fișierul de jurnalizare a sistemului (syslog). Indicație: Fișierul se găsește în /var/log iar comanda pentru afișarea ultimelor 10 linii este tail.
Cu ajutorul globbing-ului putem să vedem fișiere care corespund unui șir. De principiu cea mai uzuală folosire este pentru sistemul de fișiere și acolo caracterul cel mai folosit este * (steluță, star) numit și wildcard.
Folosiți un glob pentru a afișa toate fișierele cu extensia .gz din directorul /var/log/.
Folosiți un glob pentru a afișa toate fișierele care se încheie în forma .XY.gz din directorul /var/log/, unde X și Y sunt numere. (este osibil să nu fie nici unul)
Folosiți un glob pentru comanda dpkg -l … pentru a afișa pachetele din sistem care conțin șirul jdk.
Afișați toate fișierele cu extensia .conf din toate primele subdirectoare din /etc (adică din primul nivel de subdirectoare: init/, systemd/, security/.
Creați ierarhia de mai jos într-un director cu numele music/.
. |-- ac_dc/ | |-- angus | |-- bon | |-- brian | |-- chris | |-- cliff | |-- dave | |-- george | |-- malcom | |-- mark | `-- phil |-- cargo |-- hammerfall/ | |-- anders | |-- jesper | |-- joacim | |-- magnus | |-- oscar | |-- pontus | `-- stefan |-- iris |-- nightwish |-- phoenix `-- slayer
Actualizați ierarhia de mai sus astfel:
rock/ și mutați intrările deja existente în acest director.manele/ și creați câteva intrări în director după preferințele personale.preferate care să pointeze la directorul rock/ sau manele/ după preferințele personale.preferate-dupa-alcool care să pointeze la directorul rock/ sau manele/ după preferințele personale după un consum suficient de mare.chris, george, cargo și iris.hammerfall.ac_dc în AC DC (numele conține spațiu).
Adăugați în sistem utilizatorii ana, bogdan și grupul mayhem și realizați următorele actualizări în ierarhia de mai sus:
phoenix să fie deținut de ana.slayer să fie deținut de bogdan si grupul mayhem.AC DC și intrările sale (recursiv) să fie deținut de ana și grupul mayhem.mark să permită și lui bogdan citire (fără a modifica ownership).dave sa permită lui bogdan citire și scriere (fără a modifica ownership).bon să aiba permisiuni de execuție pentru toți utilizatorii.
Folosiți comanda find pentru a parcurge ierarhia creată mai sus.
Folosiți comanda find pentru a afișa doar fișierele din ierarhia de mai sus. Folosiți comanda find pentru a afișa doar directoarele din ierarhia de mai sus.
Folosiți comanda find pe ierarhia de mai sus pentru a afișa doar intrările care încep cu litera a.
vimtutor.
Puteți să ignorați scrierea cu diacritice.
În 30 de secunde, porniți Vim pentru a crea/edita fișierul poveste.txt, scrieți textul "A fost o dată ca niciodată că dacă nu ar fi nu s-ar povesti." și salvați textul și părăsiți editorul.
În 120 de secunde, porniți Vim scrieți textul de mai sus în fișierul capitolul-01.txt și apoi tot în Vim (fără a părăsi editorul scrieți textul "Va urma" în fișierul capitolul-02.txt și textul "Sfârșit" în fișierul capitolul-03.txt.
Descărcați fișierul de mai jos (mesaj.txt) și, în 180 de secunde editați-l în Vim pentru a obține forma de dedesubt (mesaj-modificat.txt). Analizați ce trebuie să faceți înainte de a contoriza editarea.
====== Împărțire semigrupe ====== Pentru împărțirea orelor de laborator de GSR, vom deschide două thread-uri pe [[http://cs.curs.pub.ro/2015/mod/forum/view.php?id=654|forumul de discuții generale]]. Pe fiecare thread vă veți putea înscrie la unul dintre cele două intervale de laborator: * joi, 16:00-18:00, sala EG106 * joi, 20:00-22:00, sala EG106 Vom deschide thread-urile miercuri, 14 octombrie 2015, la ora 12:30 (la prânz). Limita de locuri pe laborator este de 18 persoane. Va fi "first post, first served".
--- Împărțire semigrupe Pentru împărțirea orelor de laborator de GSR, vom deschide două fire de discuție pe forumul de discuții generale. Pe fiecare thread vă veți putea înscrie la unul dintre cele două intervale de laborator: * vineri, 16-12, sala EG306 * vineri, 20-22, sala EG306 Vom deschide thread-urile miercuri, 14 noiembrie 2015, la ora 19:30 (pe seară). Limita de locuri pe laborator este de 12 persoane. Va fi "primul venit, primul servit".
În 30 de secunde copiați codul de aici în Vim într-un fișier numit dual-mapping.c și asigurând indentarea codului.
Dorim să afișăm anumite procese într-o anumită ordine.
Folosiți ps cu opțiunea corectă pentru a afișa procesele care aparțin utilizatorului student. Căutați în pagina de manual după șirul user.
Pentru procesele de mai sus afișați PID-ul, comanda completă (cale completă cu parametri), timpul de rulare pe procesor, memoria RAM consumată (RSS – resident set size). Pentru a selecta doar anumite atribute ale unui proces folosiți comanda ps cu parametrul -o urmat de opțiunile specifice; urmăriți și pagina de manual.
Sortați procesele de mai sus în ordinea inversă a memoriei RAM consumate (RSS – resident set size). Adică cele mai consumatoare de memorie procese la început.
Din procesele sortate rețineți doar primele 10 intrări. Să afișați și antetul oferit de ps.
Dorim să lucrăm cu grupuri de procese care țin de un utilizator.
Pe un tab nou de terminal adăugăm utilizatorul ana folosind comenzile
$ sudo su # adduser ana [...] # exit # sau puteti folosi combinatia de taste Ctrl+d $
În acel tab nou ne autentificăm ca utilizatorul ana folosind comanda
$ su - ana
În cel nou tab, din contul utilizatorului ana, porniți în background mai multe procese: sleep, emacs, gedit etc.
Din primul tab, folosiți, ca root, pkill pentru o încheia execuția proceselor utilizatorului ana; adică rulați sudo pkill ... (cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul SIGKILL ca să fie garantată încheierea execuției.
pkill puteți folosi comanda killall cu opțiunile potrivite.
Pe un tab nou de terminal porniți în background procese ca utilizatorul root, student și ana.
În acel tab aflăm care este identificatorul terminalului curent folosind comanda
$ tty
Din primul tab, folosiți, ca root, pkill pentru o încheia execuția proceselor de pe al doilea terminal; adică rulați sudo pkill ... (cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul SIGKILL ca să fie garantată încheierea execuției.
Ne interesează pentru un proces dat care sunt fișierele deschise de un proces, sau, de fapt, descriptorii de fișier deschiși de un proces. De exemplu, dacă dorim să identificăm descriptorii de fișier deschiși de shell-ul curent folosim comanda
lsof -p $$
În fișierele deschise vom putea vedea descriptorii de fișier standard (0, 1 sau 2). Observăm că acești descriptori referă un dispozitiv de tip terminal, de forma /dev/pts/0 pentru că astfel interacționează procesul cu utilizatorul.
Dacă dorim să vizualizăm descriptorii deschiși de un proces daemon, de exemplu sshd
sudo lsof -p $(pidof sshd)
Observăm și descriptorii de fișier standard și sockeții TCP deschiși (2 sockeți care ascultă pe portul 22 atât pe IPv4 cât și pe IPv6).
Folosiți lsof pentru a investiga și descriptorii deschiși de procesul init.
Putem folosi lsof pentru a verifica modul în care redirectarea afectează descriptorii unui proces.
Într-un tab de terminal porniți un proces sleep folosind comanda
sleep 100
În alt tab, pentru a investiga descriptorii procesului sleep folosim comanda
lsof -p $(pidof sleep)
Observăm că descriptorii standard referă terminalul în care a fost rulată comanda, moșteniți de la terminalul din shell-ul folosit.
Acum să invesigăm procesul sleep cu redictări în diverse fișiere. Folosiți comanda
sleep 100 < /dev/zero > /dev/null 2> error.txt
Folosim comanda lsof anterioară pentru a investiga descriptorii procesului sleep. Putem observa unde pointează descriptorii standard de fișier pentru procesul pornit.
Folosiți lsof pentru a investiga descriptorii deschiși de cele trei procese sleep din cadrul comenzii
sleep 100 | sleep 120 | sleep 140
Urmăriți ce înseamnă operatorul pipe (|) si ce impact are asupra descriptorilor de fișier ai unui proces.
Pentru a determina sockeții deschiși în cadrul sistemului folosim comanda netstat. Modurile uzuale de lucru ale comenzii sunt:
netstat -tlpn netstat -tpn netstat -ulpn netstat -lpn
Aceleași opțiuni sunt folosite și pentru comanda ss.
Urmăriți și din output-ul comenzilor și din pagina de manual ce efect au fiecare dintre comenzile de mai sus.
Dacă dorim deschiderea unui server/serviciu pe sistemul curent putem folosi comanda
netcat -l -p 12345
Comanda de mai sus va deschide un server TCP pe portul 12345.
Pentru a deschide o conexiune către acest serviciu folosim comanda
netcat <hostname> 12345
unde <hostname> este numele stației sau adresa IP a stației. Pentru o conexiune pe stația locală folosiți comanda
netcat localhost 12345
Investigați folosind comanda netstat sau comanda s conexiunea astfel deschisă.
Pachetul python vine cu un server web simplu care poate fi pornit pentru a servi fisiere din directorul curent. Pentru pornirea sa folositi comanda
python -m SimpleHTTPServer
Investigati folosind netstat si s portul pe care asculta conexiuni (afisat si la pornirea sa) si pointati browser-ul la URL-ul http://localhost:8000/ pentru a putea urmari fisierele servite. Un coleg poate sa se conecteze la acest server web folosind in loc de localhost adresa IP a statiei voastre.
Dezinstalați pachetul zoo instalat anterior. Folosiți opțiunea de purge pentru a șterge și fișierele de configurare.
Folosiți comanda dpkg -l * pentru a identifica 2 pachete neinstalate și instalați-le.
Folosiți comanda dpkg -L ... pentru a afișa conținutul celor 2 pachete proaspăt instalate.
Folosiți find pentru a identifica fișierele cu drept de execuție care nu au extensia .sh aflate în subdirectoarele directorului din arhiva de aici.
Pași ajutățori:
find pentru a afișa ierarhia din subdirectoare. (Hint: -mindepth)find pentru a afișa fișierele din ierarhia din subdirectoare cu extensia .sh. (Hint: -name, -type)find pentru a afișa fișierele din ierarhia din subdirectoare care nu au extensia .sh. (Hint: OPERATORS în pagina de manual)find pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care nu au extensia .sh. (Hint: -perm)
Afișați din ce pachet face parte utilitarul printf. Aflați întâi calea către utilitar folosind comanda which.
Ce pachet este folosit pentru a putea vizualiza paginile de manual, adică ce pachet conține fișierul /usr/lib/man-db/libman.so.
Folosiți apt-file pentru a afla ce pachete conțin biblioteca standard C, adică fișierul libc.so.
Folosiți apt-file pentru a afla pachetul/pachetele care conțin header-ul gdk.h.