Ce înseamnă totul este un fișier în Linux?
Una dintre trăsăturile definitorii ale Linux și ale altor sisteme de operare asemănătoare UNIX este că "totul este un fișier." Aceasta este o simplificare simplificată, dar înțelegerea a ceea ce înseamnă înseamnă că vă va ajuta să înțelegeți cum funcționează Linux.
Multe lucruri pe Linux apar în sistemul dvs. de fișiere, dar acestea nu sunt de fapt fișiere. Sunt fișiere speciale care reprezintă dispozitive hardware, informații despre sistem și alte lucruri - inclusiv un generator de numere aleatoare.
Aceste fișiere speciale pot fi localizate în sisteme de fișiere pseudo sau virtuale, cum ar fi / dev, care conține fișiere speciale care reprezintă dispozitive și / proc, care conține fișiere speciale care reprezintă informații despre sistem și proces.
/ proc
De exemplu, să presupunem că doriți să găsiți informații despre procesorul dvs. Directorul / proc conține un fișier special - / proc / cpuinfo - care conține aceste informații.
Nu aveți nevoie de o comandă specială care să vă spună informațiile CPU - puteți citi conținutul acestui fișier utilizând orice comandă standard care funcționează cu fișiere text simplu. De exemplu, ați putea folosi comanda cat / proc / cpuinfo pentru a imprima conținutul acestui fișier la terminal - tipărirea informațiilor CPU către terminal. Puteți chiar să deschideți / proc / cpuinfo într-un editor de text pentru a vizualiza conținutul acestuia.
Amintiți-vă că / proc / cpuinfo nu este de fapt un fișier text care conține aceste informații - kernel-ul Linux și sistemul de fișiere proc expun aceste informații la noi ca fișier. Acest lucru ne permite să folosim instrumente familiare pentru a vizualiza și a lucra cu informațiile.
Directorul / proc conține, de asemenea, alte fișiere similare, de exemplu:
- / proc / uptime - expune timpul de funcționare al kernel-ului tău Linux - cu alte cuvinte, cât timp a funcționat sistemul tău fără a te opri.
- / proc / version - expune versiunea kernel-ului tău Linux.
/ dev
În directorul / dev, veți găsi fișiere care reprezintă dispozitive - precum și fișiere care reprezintă alte lucruri speciale. De exemplu, / dev / cdrom este unitatea dvs. CD-ROM. / dev / sda reprezintă prima dvs. hard disk, în timp ce / dev / sda1 reprezintă prima partiție de pe prima dvs. hard disk.
Doriți să montați CD-ROM-ul? Rulați comanda mount și specificați / dev / cdrom ca dispozitiv pe care doriți să-l montați. Doriți să partiționați primul hard disk? Rulați un utilitar de partiționare pe disc și specificați / dev / sda ca hard disk pe care doriți să îl editați. Doriți să formatați prima partiție pe primul hard disk? Rulați o comandă de formatare și spuneți-i să formateze / dev / sda1.
După cum puteți vedea, expunerea acestor dispozitive ca parte a sistemului de fișiere are avantajele sale. Sistemul de fișiere oferă un "spațiu de nume" consistent pe care toate aplicațiile îl pot utiliza pentru a aborda și a accesa dispozitivele.
/ dev / null, / dev / aleator și / dev / zero
Sistemul de fișiere / dev nu conține doar fișiere care reprezintă dispozitive fizice. Iată trei dintre cele mai notabile dispozitive speciale pe care le conține:
- / dev / null - Îndepărtează toate datele scrise pe el - gândiți-vă la acestea ca pe un coș de gunoi sau o gaură neagră. Dacă vedeți vreodată un comentariu care vă spune să trimiteți reclamații la / dev / null - acesta este un mod de a spune "aruncați-le în coșul de gunoi".
- / dev / random - Produce aleatoare folosind zgomotul ambiental. Este un generator de numere aleatoare la care poți intra.
- / dev / zero - Produce zerouri - un flux constant de zerouri.
Dacă vă gândiți la aceste trei fișiere, nu veți vedea o utilizare pentru ele. În schimb, gândiți-vă la ele ca la unelte.
De exemplu, în mod implicit, comenzile Linux produc mesaje de eroare și alte ieșiri pe care le imprimă la ieșirea standard, în mod normal terminalul. Dacă doriți să executați o comandă și nu-i pasă de ieșirea acesteia, puteți redirecționa ieșirea către / dev / null. Redirecționarea ieșirii unei comenzi către / dev / null o elimină imediat. În loc să aveți fiecare comandă să implementeze propriul "mod silențios", puteți folosi această metodă cu orice comandă.
comanda> / dev / null
Dacă doriți o sursă de aleatorie - să zicem, pentru generarea unei chei de criptare, nu ar trebui să scrieți propriul generator de numere aleatoare - ați putea folosi / dev / random.
Pentru a șterge conținutul unității de disc scriind 0 la el, nu aveți nevoie de un utilitar special dedicat pentru a zero'ing o unitate - ați putea folosi utilitare standard și / dev / zero. De exemplu, dd comanda citește dintr-o locație și scrie în altă locație. Următoarea comandă va citi zerouri de la / dev / zero și le va scrie direct pe prima partiție de hard disk de pe sistem, eliminându-și complet conținutul.
(Avertizare: Această comandă va șterge toate datele din prima dvs. partiție dacă o rulați. Rulați această comandă numai dacă doriți să distrugeți datele.)
dd dacă = / dev / zero din = / dev / sda1
Aici folosim dd cu fișiere speciale (/ dev / zero și / dev / sda1), dar am putea folosi și dd pentru a citi și scrie fișierele reale. Aceeași comandă funcționează atât pentru manipularea directă a dispozitivelor, cât și pentru lucrul cu fișierele.
Clarificare
În practică, este mai precis să spunem că "totul este un flux de octeți" decât "totul este un fișier." / Dev / random nu este un fișier, dar cu siguranță este un flux de octeți. Și, deși aceste lucruri nu sunt din punct de vedere tehnic fișiere, ele sunt accesibile în sistemul de fișiere - sistemul de fișiere este un "spațiu de nume" universal în care totul este accesibil. Doriți să accesați un generator de numere aleatorii sau să citiți direct de pe un dispozitiv? Veți găsi atât în sistemul de fișiere; nu este nevoie de altă formă de abordare.
Desigur, unele lucruri nu sunt de fapt fișiere - procesele care rulează pe sistemul dvs. nu fac parte din sistemul de fișiere. "Totul este un fișier" este inexact, dar multe lucruri se comportă ca fișiere.