Sistemul de fișiere reprezintă componenta cea mai vizibilă din cadrul unui sistem de operare. Un utilizator folosește sistemul de fișiere prin operații de creare, ștergere, modificare și investigare a fișierelor. Mai mult, un utilizator poate administra sistemul de fișiere prin configurarea de permisiuni, prin stabilirea de cote de sistem de fișiere și prin acțiuni de formatare și montare de sisteme de fișiere.
find
, stat
, ln
, dd
$(...)
versus xargs
$(...)
versus `...`
ls
vs. find
vs. Bash arrays; for
vs. $(...)
mkdir
, rmdir
, touch
, ls
, rm
, cp
stat
, chmod
, chown
find
, xargs
ln
, dd
Folosirea comenzii find
cu diverși parametri pentru a parcurge sistemul de fișiere. Afișarea executabilelor cu bitul de setuid activat din directoarele ce conțin executabile (/bin
, /sbin
, /usr/bin
, /usr/sbin
).
Folosirea comenzii stat
cu formatare pentru a afișa metainformații despre fișiere.
Folosirea comenzii dd
pentru a copia chunk-uri de fișiere. Opțiunile bs
, count
, skip
, seek
,
Creați, în directorul home al utilizatorului student
, structura de mai jos:
supermarket/ ├── curatat/ │ ├── pronto - lemn curat │ └── solutie curatat ferestre └── mancare/ ├── -- -> lactate/lapte batut ├── carne/ │ └── -10 grade sunca ├── fructe/ │ └── castraveti spanioli └── lactate/ └── lapte batut
Intrarea --
este un link simbolic, adică numele link-ului simbolic trebuie să fie --
.
Intrările care se termină în /
(slash) sunt directoare (supermarket/
, curatat/
, mancare/
, carne/
, fructe/
, lactate/
).
Restul de intrări sunt fișiere obișnuite (regular files).
student
, comanda
tree -F supermarket
Pe structura de directoare creată anterior configurați timpi astfel:
Nu e nevoie să folosiți o comandă specială care să se aplice pe toate intrările. Luați intrările la rând și modificați timpii.
touch
.
Pentru a verifica timpii de acces folosiți comanda stat
.
Adăugăm în sistem utilizatorul ana
. Pentru aceasta, ne autenficăm ca root și apoi folosim comanda adduser
. Adică rulăm comenzile:
$ sudo su # adduser ana
Ca root
, actualizăți următoarele metadate pe link-ul simbolic:
ana
chown
. Comanda chown
poate fi rulată doar de utilizatorul root.
Exemple de rulare a comenzii chown
sunt:
chown tony mydata.iso # change owner user of file mydata.iso to tony chown tony:players icon.bmp # change owner user of file icon.bmp to tony and owner group to players
Dorim să afișăm fișiere după diferite considerente.
Folosiți find
pentru a afișa toate fișierele din ierarhia /etc/
(adică toate fișierele din /etc/
, din subdirectoarele acestuia, din subdirectoarele subdirectoarelor etc.). Indicație: Folosiți opțiunea -type
a comenzii find
.
Folosiți find
pentru a afișa toate fișierele din ierarhia /etc/
al căror nume începe cu litere între a
și d
. Indicații: Folosiți opțiunea -name
a comenzii find
. Folosiți construcția [a-d]*
pentru a indica un șir care începe cu o literă între a
și d
urmată de orice altceva.
Folosiți find
pentru a afișa toate fișierele din ierarhia /etc/
al căror nume începe cu litere între a
și d
și are extensia .conf
(adică se încheie în șirul .conf
). Indicație: Porniți de la comanda anterioară și extindeți argumentul transmis opțiunii -name
.
Folosiți find
pentru a afișa toate fișierele din ierahia /etc/
care sunt deținute de utilizatorul root
și grupul root
. Indicație: Folosiți optiunea -user
a comenzii find
.
Folosiți find
pentru a a afișa toate fișierele din ierahia /etc/
care sunt deținute de utilizatorul root
și un grup diferit de root
. Indicație: Folosiți !
(semnul exclamării în fața opțiunii necesare pentru a o nega).
Folosiți find
pentru a a afișa toate fișierele din ierahia /etc/
pentru care others
au permisiuni de orice fel (adică others
au oricare dintre permisiunile read, write sau execute). Indicații: Urmăriți opțiunea -perm
în pagina de manual a comenzii find
. Urmăriți și exemplele de folosire căutând după șirul EXAMPLES
.
Folosiți find
pentru a a afișa toate fișierele din ierahia /etc/
pentru care others
nu au nici un fel de permisiuni (de orice fel: read, write sau execute). Indicație: Folosiți !
(semnul exclamării în fața opțiunii necesare pentru a o nega).
Dorim să afișăm informații despre fișiere folosind comanda stat
, comandă dedicată exact obținerii de informații despre fișiere.
Afișați pentru fișierul /etc/passwd
doar dimensiunea. Indicație: Folosiți comanda stat
împreună cu opțiunea --format
(sau -c
, forma scurtă a acestei opțiuni).
Afișați pentru fișierul /etc/passwd
inode-ul, dimensiunea și uid-ul, separate prin ,
(virgulă).
Afișați numele, inode-ul, dimensiunea și uid-ul separate prin ,
(virgulă) pentru fișierele din ierarhia /etc/
.
Afișați numele, inode-ul, dimensiunea și uid-ul separate prin ,
(virgulă) pentru fișierele din ierarhia /etc/
care au extensia .conf
.
Calculați totalul de octeți ocupat de fișierele din ierarhia /etc/
care au extensia .conf
. Indicație: Dacă aveți numere (câte unul pe linie) pe care vreți să le adunați, folosiți construcția paste -s -d '+
'. Pentru a efectua calculul, folosiți comanda bc
.
Listați primele 10 fișiere obișnuite (regular files) din ierarhia /etc
(adică din toate directoarele, subdirectoarele și subdirectoarele acestora etc.) sortate în ordinea dimesiunii ocupate de fiecare fișier.
find
cu opțiunea -exec
, stat
(cu opțiunea -c
și formatul necesar pentru afișarea numelui și dimensiuni ca argument către opțiunea -exec
a lui find
), sort
și head
.
Exemplu de rulare pentru find
cu -exec
este
find /etc/ -type f -exec ls -l {} \;
Creați un fișier care să conțină 2048 de octeți de zero (din /dev/zero
) urmați de 2048 de octeți aleatori (din /dev/urandom
) urmați de 2048 de octeți de zero și apoi urmați de 2048 de octeți din fișierul /bin/false
de la offsetul 4096 al fișierului.
skip
și seek
ale comenzii dd
este dat în număr de blocuri, nu în număr de octeți.
Folosiți /dev/urandom
, dd
și split
pentru a genera, într-un one liner, 100 de fișiere a câte 100 de octeți aleatori cu numele partXYZ.dat
unde XYZ
sunt valorile 000, 001, …, 099. Adică part000.dat
, part001.dat
, …, part099.dat
.
dd
poate scrie la standard output în absența opțiunii of
.
split
poate citi de la standard input dacă se folosește construcția -
(semnul minus) pentru numele fișierului.
Creați un fișier .c
care să afișeze mesajul Hello, world!
. Compilați-l pentru a obține un executabil. Verificați folosind comanda file
că este un executabil format ELF (Executable and Linking Format). Apoi rulați-l.
Din fișierul C
de mai sus creați un executabil static.
-static
la gcc
. Adică similar cu
gcc -Wall -static hello.c -o hello-static
ldd
(list dynamic dependencies) peste un executabil static sau dinamic, similar rulării de mai jos:
ldd ./hello ldd ./hello-static
Puneți acel fișier în directorul /tmp/chroot/
(trebuie să-l creați în prealabil). Rulați executabilul obținut folosind comanda chroot
(adică rulați-l având ca director rădăcină, chroot-at, directorul /tmp/chroot
).
chroot
poate fi rulat doar de root
. Puteți rula în forma
sudo chroot /tmp/chroot /hello-static
Încercați apoi același lucru pe un executabil dinamic. Observați că nu funcționează. Copiați în directorul de chroot (/tmp/chroot/
) bibliotecile aferente în directoarele corespunzătoare, astfel încât să funcționeze.
ldd
peste executabilul dinamic.
--parents
pentru cp
pentru a crea la destinație calea completă către fișierele de tip bibliotecă.
Adăugați în fișierul C
un apel de tipul sleep
sau pause
și refaceți pașii de mai sus. În timp ce executabilul rulează porniți, din altă consolă, o comandă lsof
pentru a afișa fișierele deschide de acest proces. Observați directorul rădăcină al procesului (rtd
).