This is an old revision of the document!


Laborator 02: Servicii sistem și server basics

Demo

TODO

Exerciții

Investigarea proceselor sistemului

Afișare procese

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.

Procesele unui utilizator

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.

În locul comenzii pkill puteți folosi comanda killall cu opțiunile potrivite.

Procesele unui terminal

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.

Investigarea descriptorilor de fișiere

lsof

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.

Investigarea redirectării

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.

Investigarea operatorului pipe

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.

netstat și ss

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.

netcat

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ă.

SimpleHTTPServer

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.

Obținerea unui clip de pe YouTube din Firefox

Exercițiul de mai jos poate să nu meargă pe anumite versiuni de Firefox sau pe anumite clipuri. În general funcționează pe clipuri care folosesc plugin-ul Flash pentru rendering.

In momentul in care un browser acceseaza un clip video acesta incepe sa faca streaming si sa descarce fisierul aferent in sistemul local de fisiere. Firefox descarca clip-urile video in directorul /tmp, dar le sterge acel hard link si nu pot fi obtinute direct. Putem insa sa le determinam si obtinem prin investigatie si folosind lsof sau /proc.

Pentru aceasta, accesati folosind Firefox un clip video de pe YouTube. Clipul va fi streamuit si puteti observa cum se descarca.

Pentru a vedea care sunt fisierele deschise de Firefox avem doua optiuni date de cele doua comenzi de mai jos:

lsof -p $(pidof firefox)
ls /proc/$(pidof firefox)/fd

Printre fisierele deschise de procesul firefox putem observa si cel putin un fisier care se gaseste in /tmp, fisier care insa nu exista. Avem insa un descriptor catre el; a fost sters hard link-ul din /tmp dar nu si fisierul efectiv. Pentru a recupera fisierul, daca descriptorul sau este <FD> vom folosi comanda

cp /proc/$(pidof firefox)/fd/<FD> myclip

Folosim comanda

vlc myclip

pentru a porni clipul.

Investigarea dinamică a unui proces

strace

Comanda strace (system call trace) ne este utilă pentru a investiga ce apeluri de sistem efectuează o comandă dată și ce parametri folosește.

De exemplu, dacă dorim să urmărim apelurile de sistem efectuate de comanda ls folosim comanda

strace ls

Output-ul fiind destul de vast, ne preocupă să obținem doar informații despre fișierele deschide. Pentru aceasta folosim opțiunea -e a comenzii strace cu ajutorul căreia filtrăm tipuri de operații. În cazul de față folosim comanda

strace -e file ls

Observăm fișierele deschise.

Pentru a vedea diferența între comenzile ls și ls -l folosim comanda

strace -e file ls -l

Observăm că acum deschise și fișiere precum /etc/passwd și /etc/group pentru a determina username-ul și grupul aferent UID-ului și GID-ului din fișier.

Informații despre rețea

Comanda

netstat -s

afișează informații statistice despre pachetele sistemului. Ne interesează să știm de unde obține comanda respectivă informațiile.

Rulați comanda

strace -e open netstat -s

pentru a afla ce fișiere deschide comanda la rulare.

Care fișier este citit pentru a afla informații despre pachetele primite (packets received)? Vizualizați acel fișier (luați-o pe încercate).

Atașarea la un proces

strace permite investigarea unui proces aflat deja în rulare. Numim acest lucru atașarea la un proces. Putem astfel investiga apelurile de sistem efectuate de un proces aflat în rulare și diagnostica anumite probleme ale acestuia. Pentru a ne putea atașa la un proces avem nevoie de PID-ul acestuia.

Deschideți două tab-uri de terminal (adică să aveți două deschise; dacă aveți deja unul mai deschideți încă unul).

Pentru a deschide un tab nou de terminal în GNOME Terminal puteți folosi combinația de taste Ctrl+Shift+t.

Într-unul dintre tab-uri aflați PID-ul procesului curent (a shell-ului) folosind comanda

echo $$

Pentru a investiga shell-ul, din celălalt tab folosim comanda

strace -p <PID>

unde <PID> este PID-ul shell-ului determinat mai sus.

Acum dacă în celălalt shell rulăm comenzi vom vedea ce se întâmplă în cadrul shell-ului.

Observăm că se folosește apelul de sistem clone pentru a crea un nou proces, dar nu apare apelul de sistem execve care înlocuiește imaginea de proces. Pentru a vedea aceste apeluri de sistem trebuie să precizăm comenzii strace să investigheze și procesele copil folosind opțiunea -f (de la follow children). Astfel, vom putea investiga folosind comanda

strace -f -p <PID>

Dacă dorim să vedem doar operațiile cu procese și fișiere, de exemplu, vom folosi pentru investigație comanda

strace -f -e process,file -p <PID>

Demonizarea proceselor

Procese detașate de terminal

Sunt cazuri în care dorim să pornim procese detașate de terminal. Adică după pornirea procesului să închidem terminalul și procesul să nu fie “omorât” ci să își încheie execuția. Aceste procese sunt echivalente unor procese daemon.

Pentru a detașa un proces de un terminal se folosesc comenzi precum nohup, dtach și disown.

Folosiți comanda wget pentru a descărca fișierul .torrent de aici.

disown

Porniți un proces BitTorrent folosind comanda:

btdownloadheadless lin-prog.torrent

Dacă nu aveți btdownloadheadless instalat pe sistem instalați pachetul bittorrent

sudo apt-get install bittorrent

sau pachetul bittornado

sudo apt-get install bittornado

Transferați procesul pornit în starea de rulare în background. Detașați procesul de terminal folosind comanda disown. Închideți terminalul. Investigați prezența procesului în alt terminal. Folosiți comanda lsof pentru a vedea ce folosește procesul pe post de standard input, standard output și standard error.

Apoi încheiați execuția acelui proces.

nohup

Folosiți comanda nohup pentru a crea un proces BitTorrent precum cel de mai sus, detașat de terminal. Închideți terminalul. Investigați prezența procesului în alt terminal. Folosiți comanda lsof pentru a vedea ce folosește procesul pe post de standard input, standard output și standard error.

Trimiteți un semnal procesului pentru a-i încheia execuția și apoi reporniți-l sub nohup astfel încât ieșirea standard (standard output, stdout) să fie redirectată la /dev/null iar ieșirea de eroare standard (standard error, stderr) să fie redirectată în fișierul err.log. Investigați cu lsof unde pointează descriptorii standard ai procesului.

Conectarea pe SSH la mașina virtuală

Setup

Pentru acest exercițiu porniți în VirtualBox mașina virtuală.

Pentru pornirea acesteia deschideți VirtualBox, apoi folosiți File → Import Appliance și navigați în /mnt/sda5/uso/lab07/puccini-lab7.ova de unde să importați mașina virtuală.

Mașina virtuală are pentru acces contul student cu parola student și este conectabilă la sistemul fizic pe interfața sa eth1. Ar trebui ca pe interfața eth1 a mașinii virtuale sa aveți o adresă din rețeaua 192.168.56.0/24, de obicei 192.168.56.101.

Interfața pereche a interfeței eth1 de pe mașina virtuală este interfața vboxnet0 pe sistemul fizic. Aceasta are adresa 192.168.56.1.

Conectare prin SSH între mașina virtuală și sistemul fizic

Încercați acum să vă conectați prin SSH de pe mașina virtuală pe sistemul fizic folosind comanda ssh folosind o comandă de forma

ssh student@192.168.56.1

Parola este student.

Acum încercați și invers, să vă conectați de la sistemul fizic la mașina virtuală. Veți întâmpina diverse tipuri de probleme. Rezolvați-le.

Apoi configurați autentificarea fără parolă (pe bază de chei) de la utilizatorul student de pe sistemul fizic la utilizatorul student și la utilizatorul root de pe mașina virtuală. Va trebui să ajungă cheia publică a utilizatorului student de pe sistemul fizic în fișierul ~/.ssh/authorized_keys din directorul home al utilizatorilor student și root pe mașina virtuală.

Dacă simțiți că “scârțâiți”, pentru documentare despre folosirea SSH recomandăm să urmariți laboratorul 8 de RL: Securizarea unui server.

Adăugarea cheii asistentului pentru conectare la mașina virtuală

Obiectivul acestui exercițiu este ca asistentul să ajungă pe mașina voastră virtuală de pe laptop-ul său. Pentru aceasta trebuie să faceți două lucruri:

  1. Să adăugați cheia publică a asistentului (vă va da el link la cheie) în contul utilizatorului student de pe mașina virtuală.
  2. Să folosiți DNAT (port forwarding) pe sistemul fizic astfel încât conexiunile pe portul 2222 pe sistemul fizic să ajungă pe portul 22 pe mașina virtuală.

Pentru pasul 2, pe sistemul fizic folosiți o comandă de forma

sudo iptables -t nat -A PREROUTING -i ethX -p tcp --dport 2222 -j DNAT --to-destination <IP-vm>:22
sudo sysctl -w net.ipv4.ip_forward=1

unde:

  • ethX este eth0 sau eth1 sau eth2 este interfața de Internet a sistemului fizic, cu o adresă din spațiul 172.16.4.0/22
  • <IP-vm> este adresa IP a mașinii virtuale (adresa din rețeaua 192.168.56.0/24

Iar pe mașina virtuală rulați comanda de mai jos pentru a crea o rută din mașina virtuală către rețeaua fizică

sudo ip route add 172.16.4.0/22 via 192.168.56.1

Cu această rută veți permite pachetelor să se întoarcă din mașina virtuală către cheia SSH a asistentului.

Asistentul va încerca conexiunea la adresa IP a sistemului vostru fizic pe portul 2222 și, dacă e totul bine, va ajunge pe mașina voastră virtuală.

Dacă simțiți că scârțâiți legat de NAT/DNAR, informații despre folosirea iptables pentru DNAT găsiți în laboratorul 9 de RL: Translatarea de adrese.

Dacă greșiți ceva în configurarea iptables, curățați regulile folosind comanda

sudo iptables -t nat -F

Folosirea logger pentru generarea de mesaje de logging

TODO

Configurare remote logging pentru SSH

Configurați daemon-ul syslog de pe mașina virtuală să livreze mesajele de jurnalizare emise de SSH (de facilitatea auth) către daemonul de syslog de pe sistemul fizic. Adică daemonul de syslog de pe sistemul fizic va fi listener pentru mesajele livrate de pe mașina virtuală.

Realizați conexiuni SSH de pe mașina fizică spre mașina virtuală pentru a declanșa mesaje de jurnalizare.

Bonus: Conectare cu X Forwarding

Realizați o conexiune SSH care folosește X Forwarding de la sistemul fizic la mașina virtuală. Porniți utilitarul xterm. Instalați orice pachete sunt necesare pentru a permite rularea utilitarului xterm.

Bonus: Pornirea manuală a sshd

Porniți manual, pe mașina virtuală, folosind executabilul /usr/sbin/sshd ca să asculte conexiuni pe portul 22. Încercați conexiuni către server de pe sistemul fizic.

Rulați serverul de SSH sub strace (eventual folosind opțiunea -f) și urmăriți ce se întâmplă atunci când se încearcă noi conexiuni.

Laborator 02 - Gestiunea sistemului de fișiere

Dacă un pachet nu este instalat iar un exercițiu face referire la acesta, instalați-l.

1. Lucrul cu fișiere (2p)

  • Comenzi/concepte/fișiere
    • touch
    • mkdir -p
    • ls -a, -l, -i, -F
    • tipuri de fișiere
    • file, stat
    • ln, ln -s

Tutorial

  • Există mai multe metode de a crea un fișier în Linux. Cea mai simplă este utilizarea comenzii touch. Folosiți touch pentru a crea fișierul /home/student/my-file. Ce dimensiune are acest fișier ?
  • Creați directorul /home/student/My/Long/Folder. Accesați man mkdir și căutați “parent” pentru a vedea cum poate fi creat cu o singură comandă.
  • Intrați în directorul /etc/rc2.d și rulați comanda ls -l. Ce semnificație credeți că au caracterele - și l de la începutul liniilor din output ? Ce alte caractere ați mai întâlnit în aceeași poziție ?

Exerciții

  • [01]. Creați în directorul /home/student următoarea structură de directoare /home/student/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is.
Show solution
Hide solution
Show solution
student@mjolnir:~$ mkdir -p /home/student/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is

student@mjolnir:~$ tree
.
[...]
|-- Templates
|-- the
|   `-- unix
|       `-- file
|           `-- system
|               `-- sure
|                   `-- it
|                       `-- corrupts
|                           `-- your
|                               `-- data
|                                   `-- but
|                                       `-- look
|                                           `-- how
|                                               `-- fast
|                                                   `-- it
|                                                       `-- is
[...]
  • [02]. Intrați în directorul /home/student/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is și creați trei fișiere, denumite ext2, ext3 și ext4.
Show solution
Hide solution
Show solution
student@mjolnir:~$ cd the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is/

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ touch ext2 ext3 ext4
  • [03]. Modificați data când fișierul ext4 a fost accesat și modificat la 2013.09.23 15:25 (Hint: touch)
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ls -l
total 0
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext2
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext3
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ touch -t 1309231525 ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ls -l
total 0
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext2
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext3
-rw-r--r-- 1 student student 0 May 23  2010 ext4
  • [04]. Verificați faptul că modificările au fost aplicate. Care este inode-ul fișierului ext4 ? (Hint: stat)
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ls -li
total 0
382 -rw-r--r-- 1 student student 0 Nov 16 15:31 ext2
383 -rw-r--r-- 1 student student 0 Nov 16 15:31 ext3
384 -rw-r--r-- 1 student student 0 May 23  2010 ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ stat ext4
  File: `ext4'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 1ah/26d	Inode: 384         Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ student)   Gid: ( 1000/ student)
Access: 2010-05-23 15:25:00.000000000 +0300
Modify: 2010-05-23 15:25:00.000000000 +0300
Change: 2011-11-16 15:32:21.000000000 +0200
  • [05]. Creați link-ul simbolic sym-ext4 către fișierul ext4. (Hint: man ln, căutați “symbolic”)
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ln -s ext4 sym-ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ls -l
total 0
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext2
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext3
-rw-r--r-- 1 student student 0 May 23  2010 ext4
lrwxrwxrwx 1 student student 4 Nov 16 15:33 sym-ext4 -> ext4
  • [05].a. Scrieți textul “current file system” în ext4 și afișați conținutul lui sym-ext4.
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ echo "current file system" > ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ cat sym-ext4
current file system
  • [05].b. Ștergeți fișireul ext4 și afișați conținutul lui sym-ext4.
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ rm ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ cat sym-ext4
cat: sym-ext4: No such file or directory
  • [05].c. Aflati tipul fișierului sym-ext4 (Hint: file)
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ file sym-ext4
sym-ext4: broken symbolic link to `ext4'
  • [06]. Creați link-ul hard hard-ext3 către fișierul ext3.
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ln ext3 hard-ext3

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ls -l
total 0
-rw-r--r-- 1 student student 0 Nov 16 15:31 ext2
-rw-r--r-- 2 student student 0 Nov 16 15:31 ext3
-rw-r--r-- 2 student student 0 Nov 16 15:31 hard-ext3
lrwxrwxrwx 1 student student 4 Nov 16 15:33 sym-ext4 -> ext4
  • [06].a. Aflați inode-urile pentru hard-ext3 și ext3. (Hint: stat)
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ ls -li
total 0
382 -rw-r--r-- 1 student student 0 Nov 16 15:31 ext2
383 -rw-r--r-- 2 student student 0 Nov 16 15:31 ext3
383 -rw-r--r-- 2 student student 0 Nov 16 15:31 hard-ext3
385 lrwxrwxrwx 1 student student 4 Nov 16 15:33 sym-ext4 -> ext4

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ stat ext3 | grep Inode
Device: 1ah/26d	Inode: 383         Links: 2

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ stat hard-ext3 | grep Inode
Device: 1ah/26d	Inode: 383         Links: 2
  • [06].b. Scrieți textul “old file system” în ext3 și afișați conținutul lui hard-ext3.
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ echo "old file system" > ext3

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ cat hard-ext3 
old file system
  • [06].c. Ștergeți fișireul ext3 și afișați conținutul lui hard-ext3.
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ rm ext3

student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ cat hard-ext3 
old file system
  • [06].d. Aflati tipul fișierului hard-ext3 (Hint: file)
Show solution
Hide solution
Show solution
student@mjolnir:~/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is$ file hard-ext3 
hard-ext3: ASCII text

2. Redirectări (1p)

  • Comenzi/concepte/fișiere
    • redirectări

Tutorial

  • Rulați comanda ls -l. Apoi succesiv ls -l > ls.output și cat ls.output. Ce se afla în ls.output ?

Exerciții

  • [01]. Schimbați directorul curent în directorul /home/student. Folosiți comanda echo pentru a afișa pe ecran textul “al doilea laborator de GSR”. Redirectați acest text într-un fișier numit lab2.txt. (Hint: man bash și căutați după “REDIRECTION”)
Show solution
Hide solution
Show solution
student@mjolnir:~$ echo "al doilea laborator de GSR"
al doilea laborator de GSR

student@mjolnir:~$ echo "al doilea laborator de GSR" > lab2.txt

student@mjolnir:~$ cat lab2.txt 
al doilea laborator de GSR
  • [02]. Folosiți comanda echo pentru a adăuga textul “e mai lung decat primul” în fișierul lab2.txt, fără a șterge conținutul său. (Hint: man bash și căutați după “appending”)
Show solution
Hide solution
Show solution
student@mjolnir:~$ echo "e mai lung decat primul" >> lab2.txt

student@mjolnir:~$ cat lab2.txt
al doilea laborator de GSR
e mai lung decat primul
  • [03]. Scriind comanda gcc fără niciun parametru, veți primi un mesaj de eroare. Redirectați acest mesaj de eroare folosind un operator de redirectare într-un fișier numit gcc_error.txt. Afișați conținutul fisierului pentru a confirma. (Hint: man bash și căutați după “standard error”).
Show solution
Hide solution
Show solution
student@mjolnir:~$ gcc
gcc: fatal error: no input files
compilation terminated.

student@mjolnir:~$ gcc 2> gcc_error.txt

student@mjolnir:~$ cat gcc_error.txt 
gcc: fatal error: no input files
compilation terminated.

3. Căutarea fișierelor pe disc (2p)

  • Comenzi/concepte/fișiere
    • whereis, locate, updatedb
    • find -name, -type, -exec

Exerciții

  • [01]. Aflați directorul unde se află executabilul finger. (Hint: whereis)
Show solution
Hide solution
Show solution
root@mjolnir:/home/student# apt-get install finger
[...]

student@mjolnir:~$ whereis -b finger
finger: /usr/bin/finger
  • [02]. Afișați fișierul de pe disc ce corespunde paginii de manual a utilitarului strip. (Hint: man whereis, căutați “manual”)
Show solution
Hide solution
Show solution
student@mjolnir:~$ whereis -m strip
strip: /usr/share/man/man1/strip.1.gz
  • [03]. Actualizați baza de data locală a utilitarului locate și căutați toate fișierele de pe disc ce conțin în numele lor șirul de caractere “sleep”. Atenție: “sleep” nu trebuie să se găsească în calea către fișier, ci numai în numele fișierului. (Hint: man locate, căutați “base”)
Show solution
Hide solution
Show solution
root@mjolnir:~# updatedb

root@mjolnir:~# locate -b sleep
/bin/sleep
/boot/grub/sleep.mod
/etc/pm/sleep.d
/usr/lib/grub/i386-pc/sleep.mod
/usr/lib/klibc/bin/sleep
/usr/lib/perl/5.12.4/auto/POSIX/sleep.al
/usr/lib/pm-utils/sleep.d
/usr/share/man/man1/sleep.1.gz
/usr/share/man/man2/clock_nanosleep.2.gz
/usr/share/man/man2/nanosleep.2.gz
/usr/share/man/man3/sleep.3.gz
/usr/share/man/man3/usleep.3.gz
/usr/src/linux-headers-3.0.0-1-amd64/include/config/acpi/sleep.h
/usr/src/linux-headers-3.0.0-1-amd64/include/config/pm/sleep
/usr/src/linux-headers-3.0.0-1-amd64/include/config/pm/sleep.h
  • [04]. Afișați toate directoarele din /etc ce conțin în numele lor șirul de caractere “config”. Nu folosiți locate. (Hint: find, -type)
Show solution
Hide solution
Show solution
root@mjolnir:~# find /etc -name *config* -type d
/etc/gnome/config
/etc/defoma/config
/etc/pm/config.d
Show solution
Hide solution
Show solution
root@mjolnir:/home/student# mkdir newfiles

root@mjolnir:/home/student# find /etc -mtime -1 -type f -exec cp {} newfiles/ \;
 
root@mjolnir:/home/student# ls -l newfiles/
total 24
-rw-r--r-- 1 root root  694 Nov 16 15:42 config
-rw-r--r-- 1 root root  540 Nov 16 15:42 dhcpd.leases
-rw-r--r-- 1 root root    6 Nov 16 15:42 ifstate
-rw-r--r-- 1 root root 1867 Nov 16 15:42 mtab
-rw-r--r-- 1 root root   18 Nov 16 15:42 nat.mac
-rw-r--r-- 1 root root  124 Nov 16 15:42 resolv.conf

4. Arhive (1,5p)

  • Comenzi/concepte/fișiere
    • du -h, -s, ls -l
    • tar, gzip, bzip2

Tutorial

  • Rulați comanda dd if=/dev/zero of=/home/student/myfile.dat bs=1M count=2
  • Rulați comanda tar -cf myfile.tar myfile.dat pentru a crea o arhiva tar ce conține fișierul generat anterior
  • Rulați comanda tar -czf myfile.tar.gz myfile.dat pentru a crea o arhiva tar.gz ce conține fișierul generat anterior compresat.

Exerciții

  • [01]. Arhivați directorul /etc/default cu toate fișierele și subdirectoarele conținute de acesta într-o arhivă default.tar. Atenție: doar arhivați directorul, nu îl și compresați.
Show solution
Hide solution
Show solution
root@mjolnir:~# cd /etc/

root@mjolnir:/etc# tar -cf /root/default.tar default

root@mjolnir:/etc# cd

root@mjolnir:~# ls -l
total 64
-rw-r--r-- 1 root root 51200 Nov 16 15:44 default.tar
  • [02]. Arhivați din nou directorul /etc/default cu toate fișierele și subdirectoarele conținute de acesta într-o arhivă default.tar.gz. De data aceasta compresați arhiva. Observați diferența de mărime față de arhiva anterioară.
Show solution
Hide solution
Show solution
root@mjolnir:~# cd /etc

root@mjolnir:/etc# tar -czf /root/default.tar.gz default

root@mjolnir:/etc# cd

root@mjolnir:~# ls -l
total 76
-rw-r--r-- 1 root root 51200 Nov 16 15:44 default.tar
-rw-r--r-- 1 root root 10838 Nov 16 15:45 default.tar.gz
  • [03]. Afișați conținutul arhivei default.tar fără a o dezarhiva. (Hint: man tar, căutați “list”. Nu uitați să specificați numele arhivei prin -f)
Show solution
Hide solution
Show solution
root@mjolnir:~# tar -tvf default.tar
drwxr-xr-x root/root         0 2011-10-18 17:56 default/
-rw-r--r-- root/root      1017 2011-09-19 00:20 default/cron
-rw-r--r-- root/root       313 2011-04-24 10:34 default/klogd
-rw-r--r-- root/root       876 2011-10-11 19:25 default/exim4
-rw-r--r-- root/root       845 2011-08-10 09:44 default/bluetooth
[...]
  • [04]. Creați fisierul /home/student/big-text-file.txt care să conțină cel puțin 5MB text (nu date aleator generate).
Show solution
Hide solution
Show solution
student@mjolnir:~$ find / * &> big-text-file.txt

student@mjolnir:~$ ls -lh big-text-file.txt 
-rw-r--r-- 1 student student 11M Nov 16 15:47 big-text-file.txt
  • [05]. Arhivați fisierul big-text-file.txt în format gzip, bzip2 și zip. Care sunt diferențele de mărime ale arhivelor? (Hint: man gzip, căutați “example”)
Show solution
Hide solution
Show solution
root@mjolnir:~# apt-get install zip

student@mjolnir:~$ gzip -c big-text-file.txt > big-text-file.txt.gz

student@mjolnir:~$ bzip2 -c big-text-file.txt > big-text-file.txt.bz2

student@mjolnir:~$ zip big-text-file.txt.zip big-text-file.txt
  adding: big-text-file.txt (deflated 89%)

student@mjolnir:~$ ls -lh big*
-rw-r--r-- 1 student student  11M Nov 16 15:47 big-text-file.txt
-rw-r--r-- 1 student student 843K Nov 16 15:49 big-text-file.txt.bz2
-rw-r--r-- 1 student student 1.2M Nov 16 15:49 big-text-file.txt.gz
-rw-r--r-- 1 student student 1.2M Nov 16 15:51 big-text-file.txt.zip

5. Drepturi pe fișiere (2p)

  • Comenzi/concepte/fișiere
    • u, g, o, r, w, x
    • chmod, chown
    • umask
    • sticky bit

Tutorial

  • Creați fișierul /home/student/testfile. Ce drepturi de execuție are ?
  • Rulați comanda chmod u+x /home/student/testfile. Cum s-au modificat drepturile de execuție ?

Exerciții

  • [01]. În urma rulării comenzii ls -l pe un sistem Linux s-a obținut următorul output:
    total 36
    drw-r--r-T 2 adm       admins    4096 2008-12-12 10:10 dir1
    -rwxr--r-x 2 student   students  9845 2008-11-09 04:03 fis1
    -rwxr--r-- 1 student   students  5000 2008-11-09 04:06 fis2
    -rwxr--r-x 2 student   students  9845 2008-11-09 04:03 link
    lrwxrwxrwx 1 adm       students     4 2008-11-09 04:13 linked -> fis1

    Creați o structură de fișiere în directorul /home/student/access-rights care să copieze complet informațiile oferite mai sus. Toți parametrii trebuie să fie identici. Încercați să folosiți cât mai puține comenzi. (Hint: T = sticky bit fara drept de executie)

Show solution
Hide solution
Show solution
root@mjolnir:/home/student/access-rights# dd if=/dev/sda1 of=fis1 bs=5 count=1969
1969+0 records in
1969+0 records out
9845 bytes (9.8 kB) copied, 0.0245335 s, 401 kB/s

root@mjolnir:/home/student/access-rights# dd if=/dev/sda1 of=fis2 bs=1000 count=5
5+0 records in
5+0 records out
5000 bytes (5.0 kB) copied, 0.00602714 s, 830 kB/s

root@mjolnir:/home/student/access-rights# groupadd students

root@mjolnir:/home/student/access-rights# groupadd admins

root@mjolnir:/home/student/access-rights# useradd -d /home/adm -m -g admins -s /bin/bash adm

root@mjolnir:/home/student/access-rights# mkdir dir1

root@mjolnir:/home/student/access-rights# chown adm:admins dir1

root@mjolnir:/home/student/access-rights# chown student:students fis1

root@mjolnir:/home/student/access-rights# chown student:students fis2

root@mjolnir:/home/student/access-rights# ln -s fis1 linked

root@mjolnir:/home/student/access-rights# chown -h adm:students linked 

root@mjolnir:/home/student/access-rights# ln fis1 link

root@mjolnir:/home/student/access-rights# chmod 745 fis1

root@mjolnir:/home/student/access-rights# chmod 744 fis2

root@mjolnir:/home/student/access-rights# chmod +t dir1

root@mjolnir:/home/student/access-rights# chmod a-x dir1

root@mjolnir:/home/student/access-rights# touch -t 0812121010 dir1

root@mjolnir:/home/student/access-rights# touch -t 0811090403 fis1

root@mjolnir:/home/student/access-rights# touch -t 0811090406 fis2

root@mjolnir:/home/student/access-rights# touch -ht 0811090413 linked

root@mjolnir:/home/student/access-rights# ls -l --time-style=long-iso
total 36
drw-r--r-T 2 adm     admins   4096 2008-12-12 10:10 dir1
-rwxr--r-x 2 student students 9845 2008-11-09 04:03 fis1
-rwxr--r-- 1 student students 5000 2008-11-09 04:06 fis2
-rwxr--r-x 2 student students 9845 2008-11-09 04:03 link
lrwxrwxrwx 1 adm     students    4 2008-11-09 04:13 linked -> fis1

6. Partiții și sisteme de fișiere (2,5p)

  • Comenzi/concepte/fișiere
    • Char devices, block devices, major, minor, mknod
    • fdisk, df
    • mkfs, mkswap
    • swapon, swapoff
    • mount, umount
    • /etc/fstab
    • fsck
    • tune2fs
    • dd

Atenție: acest set de exerciții se rezolvă pe mașina virtuală.

Tutorial

  • Creați o partiție cu un sistem de fișiere de tip ext2 pe /dev/sdb. Pentru aceasta:
    • Rulați fdisk /dev/sdb
    • Apăsati m pentru a vedea o listă de partiții disponibile
    • Apăsati n pentru a crea o nouă partiție. Creați o partiție primară care să ocupe tot discul.
    • Apăsați w pentru a salva modificările pe disc.
    • Rulați fdisk -l pentru a vedea o listă cu partițiile existente.
Show solution
Hide solution
Show solution
root@heimdall:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x77f9162e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): 
Using default value 4194303

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

root@heimdall:~# fdisk -l

Disk /dev/sda: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders, total 12582912 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000734e4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    11718655     5858304   83  Linux
/dev/sda2        11718656    12580863      431104   82  Linux swap / Solaris

Disk /dev/sdb: 2147 MB, 2147483648 bytes
22 heads, 16 sectors/track, 11915 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x77f9162e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4194303     2096128   83  Linux

Exerciții

  • [01]. Vizualizați tabela de partiții a /dev/sda. Care este partiția asociată swap-ului?
Show solution
Hide solution
Show solution
root@heimdall:~# fdisk -l /dev/sda

Disk /dev/sda: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders, total 12582912 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000734e4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    11718655     5858304   83  Linux
/dev/sda2        11718656    12580863      431104   82  Linux swap / Solaris
  • [02]. Ștergeți partiția de pe /dev/sdb; creați trei noi partiții: una de tip Ext2(Primary), una de tip ReiserFs și o partiție de tip swap care va fi folosită în sesiunea curentă – activați folosirea partiției de swap. (Hint: fdisk /dev/sdb, mkfs.ext4)
Show solution
Hide solution
Show solution
root@heimdall:~# fdisk /dev/sdb

Command (m for help): d
Selected partition 1

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): +500M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 2): 
Using default value 2
First sector (1026048-4194303, default 1026048): 
Using default value 1026048
Last sector, +sectors or +size{K,M,G} (1026048-4194303, default 4194303): +500M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 3): 
Using default value 3
First sector (2050048-4194303, default 2050048): 
Using default value 2050048
Last sector, +sectors or +size{K,M,G} (2050048-4194303, default 4194303): +500M

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

root@heimdall:~# fdisk -l /dev/sdb

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x77f9162e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     1026047      512000   83  Linux
/dev/sdb2         1026048     2050047      512000   83  Linux
/dev/sdb3         2050048     3074047      512000   83  Linux

root@heimdall:~# mkfs.ext2 /dev/sdb1
mke2fs 1.42-WIP (02-Jul-2011)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

This filesystem will be automatically checked every 0 mounts or
0 days, whichever comes first.  Use tune2fs -c or -i to override.

root@heimdall:~# mkreiserfs /dev/sdb2
mkreiserfs 3.6.21 (2009 www.namesys.com)

A pair of credits:
Jeremy  Fitzhardinge  wrote  the  teahash.c  code  for  V3.  Colin  Plumb  also
contributed to that.

BigStorage  (www.bigstorage.com)  contributes to our general fund  every month,
and has done so for quite a long time.


Guessing about desired format.. Kernel 3.0.0-1-686-pae is running.
Format 3.6 with standard journal
Count of blocks on the device: 128000
Number of blocks consumed by mkreiserfs formatting process: 8215
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 56dca10b-750f-4fdb-9f78-f057c36834f9
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
	ALL DATA WILL BE LOST ON '/dev/sdb2'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
ReiserFS is successfully created on /dev/sdb2.

root@heimdall:~# mkswap /dev/sdb3
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=d5242ca0-bef5-44a1-b3bf-a44d83763409

root@heimdall:~# swapon /dev/sdb3

root@heimdall:~# file -s /dev/sdb1
/dev/sdb1: Linux rev 1.0 ext2 filesystem data, UUID=013f5e28-e521-4880-a7ed-cbb091d01751

root@heimdall:~# file -s /dev/sdb2
/dev/sdb2: ReiserFS V3.6

root@heimdall:~# file -s /dev/sdb3
/dev/sdb3: Linux/i386 swap file (new style), version 1 (4K pages), size 127999 pages, no label, UUID=d5242ca0-bef5-44a1-b3bf-a44d83763409
  • [03]. Verificați integritatea sistemului de fișiere ext2 de pe partiția recent creată pe /dev/sdb. (Hint: fsck)
Show solution
Hide solution
Show solution
root@heimdall:~# fsck.ext2 /dev/sdb1
e2fsck 1.42-WIP (02-Jul-2011)
/dev/sdb1: clean, 11/128016 files, 18474/512000 blocks
  • [04]. Folosiți df pentru a obține o estimare a spațiului ocupat de către fiecare partiție.
Show solution
Hide solution
Show solution
root@heimdall:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       5.5G  1.1G  4.3G  20% /
tmpfs           5.0M  4.0K  5.0M   1% /lib/init/rw
tmpfs            25M  180K   25M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            50M     0   50M   0% /tmp
udev            120M     0  120M   0% /dev
tmpfs            50M     0   50M   0% /run/shm
  • [05]. Afișați toate sistemele de fișiere montate curent folosind comanda mount, iar apoi fișierul /etc/mtab. Ce diferențe există între cele două output-uri?
Show solution
Hide solution
Show solution
root@heimdall:~# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,size=5242880,mode=755,size=5242880,mode=755)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=755,size=10%,mode=755)
tmpfs on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880,mode=1777,size=5242880,mode=1777)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,size=20%,mode=1777,size=20%,mode=1777)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,size=20%,mode=1777,size=20%,mode=1777)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620,gid=5,mode=620)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

root@heimdall:~# cat /etc/mtab
/dev/sda1 / ext4 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,size=5242880,mode=755,size=5242880,mode=755 0 0
tmpfs /run tmpfs rw,noexec,nosuid,size=10%,mode=755,size=10%,mode=755 0 0
tmpfs /run/lock tmpfs rw,noexec,nosuid,nodev,size=5242880,mode=1777,size=5242880,mode=1777 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,size=20%,mode=1777,size=20%,mode=1777 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /run/shm tmpfs rw,nosuid,nodev,size=20%,mode=1777,size=20%,mode=1777 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620,gid=5,mode=620 0 0
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
  • [06]. Montați partiția /dev/sdb2 ca read-only în /media/sdb2, fără ca acest lucru să fie înregistrat în /etc/mtab. Demontați ulterior partiția.
Show solution
Hide solution
Show solution
root@heimdall:~# mkdir /media/sdb2

root@heimdall:~# mount -r -n -t reiserfs /dev/sdb2 /media/sdb2

root@heimdall:~# cat /etc/mtab 
/dev/sda1 / ext4 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,size=5242880,mode=755,size=5242880,mode=755 0 0
tmpfs /run tmpfs rw,noexec,nosuid,size=10%,mode=755,size=10%,mode=755 0 0
tmpfs /run/lock tmpfs rw,noexec,nosuid,nodev,size=5242880,mode=1777,size=5242880,mode=1777 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,size=20%,mode=1777,size=20%,mode=1777 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /run/shm tmpfs rw,nosuid,nodev,size=20%,mode=1777,size=20%,mode=1777 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620,gid=5,mode=620 0 0
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
  • [07]. Modificați fișierul /etc/fstab adăugând cele 2 partiții /dev/sdb1 și /dev/sdb2; /dev/sdb1 va fi montată în directorul /media/sdb1 cu drepturi de citire-scriere și va putea fi montată de orice utilizator, iar /dev/sdb2 se va monta în /media/sdb2 ca read-only.
Show solution
Hide solution
Show solution
root@heimdall:~# cat /etc/fstab | tail -n 2
/dev/sdb1       /media/sdb1     ext2            rw,user         0       0
/dev/sdb2       /media/sdb2     reiserfs        ro              0       0
  • [08]. Demontați toate sistemele de fițiere specificate în cadrul /etc/fstab, și apoi montați-le la loc.
Show solution
Hide solution
Show solution
root@heimdall:~# umount -a
umount: /dev: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /run: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

root@heimdall:~# mount -a
mount: /dev/sdb2 already mounted or /media/sdb2 busy

root@heimdall:~# umount -a
umount: /dev: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /run: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

root@heimdall:~# umount /media/sdb2 

root@heimdall:~# mount -a
  • [09]. [Bonus]. Modificati setările partiției ext2 astfel încât la fiecare montare consistența aceasteia să fie verificată.
Show solution
Hide solution
Show solution
root@heimdall:~# tune2fs -c 1 /dev/sdb1
tune2fs 1.42-WIP (02-Jul-2011)
Setting maximal mount count to 1
Show solution
Hide solution
Show solution
Tutorial disponibil la adresa web.
gsr/laboratoare/laborator-02.1476177016.txt.gz · Last modified: 2016/10/11 12:10 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0