Articles

Înțelegerea detaliată a Inodurilor Linux cu exemplul

Linux și alte sisteme de operare asemănătoare Unix mențin coerența tratând totul ca un fișier (chiar și dispozitivele hardware). Tastatura, mouse-ul, imprimantele, monitorul, hard disk-ul, procesele, chiar și directoarele sunt tratate ca fișiere în Linux. Fișierele obișnuite conțin date precum text (fișiere text), muzică, videoclipuri (fișiere multimedia) etc.

în afară de datele obișnuite, există și alte date despre aceste fișiere, cum ar fi dimensiunea, proprietatea, permisiunile, marcajul de timp etc. Aceste metadate despre un fișier sunt gestionate cu o structură de date cunoscută sub numele de inode (nod index).

ce este un inod în Linux?

fiecare fișier sau director Linux (din punct de vedere tehnic, nu există nicio diferență reală între ele) are un inod, iar acest inod conține toate metadatele fișierului (adică toate datele administrative necesare pentru citirea unui fișier sunt stocate în inodul său).

de exemplu, inodul conține o listă cu toate blocurile în care este stocat un fișier, informațiile proprietarului pentru acel fișier, permisiunile și toate celelalte atribute care sunt setate pentru fișier.

limite Inode este pe sistem de fișiere și se decide la momentul creării sistemului de fișiere. Dimensiunea maximă a directorului depinde de sistemul de fișiere și, prin urmare, limita exactă diferă.

pentru o performanță mai bună, Faceți directoarele mai mici prin sortarea fișierelor în subdirectoare, mai degrabă având un director mare.

ce este un număr inod?

Numărul Inodului este, de asemenea, cunoscut sub numele de număr index. Un inod este un număr unic atribuit fișierelor și directoarelor în timp ce este creat. Numărul inode va fi unic pentru întregul sistem de fișiere.

un inod este o structură de date pe un sistem tradițional de fișiere în stil UNIX, cum ar fi ext3 sau ext4. stocarea proprietăților unui fișier și directoare.

Linux extended filesystems, cum ar fi ext3 sau ext4 menține o serie de aceste inode numite tabelul inode. Acest tabel conține lista tuturor fișierelor din acel sistem de fișiere. Inodurile individuale din tabelul inode au un număr unic (unic pentru acel sistem de fișiere) numit număr inode.

următoarele informații sunt stocate în inode:

  • Tip fișier: fișier obișnuit, director, țeavă etc.
  • permisiuni pentru acel fișier:
  • User ID: proprietar de fișier
  • Group ID: proprietar de grup
  • Dimensiunea fișierului: sau număr major/minor în cazul unor fișiere speciale
  • Time stamp: timp de acces, timp de modificare și (inode) timp de schimbare
  • atribute: imuabil’ de exemplu
  • Access control list: permisiuni pentru utilizatori/grupuri speciale
  • /Li>
  • link către locația fișierului
  • alte metadate despre fișier

rețineți că inodul nu stochează numele fișierului, ci doar conținutul acestuia.

diagrama structurii de date inode

cum să verificați inode în Linux

Dacă doriți să aruncați o privire la inode, pe orice sistem de fișiere ext pe care îl utilizați poate folosi comenzile de mai jos pentru a verifica proprietățile sistemului de fișiere și fișierele care sunt utilizate în acesta.

A. afișare informații date fișier

puteți afișa datele inode pe un fișier sau director utilizând comanda stat.

trebuie să indicați numele fișierului după cum urmează:

ieșirea stat vă spune diferitele ștampile de timp ale fișierului, proprietatea și permisiunile acestuia și unde este stocat. Datele fișierului sunt păstrate în blocul de disc, care este afișat în ieșirea comenzii stat a inodului.

puteți alege să listați numai numărul inod al unui fișier cu opțiunea--format după cum urmează:

# stat --format=%i hello530461

b. Print index number of files

comanda ls este utilizată pentru a lista informațiile despre fișiere și directoare. Opțiunea -i cu ls afișează numărul inodului fiecărui fișier. Putem combina cu -l opțiune pentru a lista informații în detaliu

# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 drwxr-xr-x 3 root root 4096 Apr 29 00:29 environments

prima coloană dă numărul inode. Puteți afișa inode-ul unui anumit fișier după cum urmează:

# ls -i continue.sh 519450 continue.sh

c. Afișați informații despre spațiul inode al sistemului de fișiere

în mod implicit, comanda df rezumă spațiul disponibil și utilizat pe disc. În schimb, puteți primi un raport privind inodurile disponibile și utilizate trecând opțiunea -i sau --inodes.

aceste informații pot fi utile dacă o partiție are foarte multe fișiere mici, care pot epuiza inodurile disponibile mai devreme decât epuizează spațiul disponibil pe disc.

d. enumerați conținutul Superblock-ului sistemului de fișiere

puteți utiliza comandatune2fs -l pentru a afișa toate informațiile legate de inode.

# tune2fs -l /dev/sda6 | grep inodeFilesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks

e. manipulați meta-datele sistemului de fișiere

puteți vedea conținutul unui inod așa cum există pe un sistem de fișiere Ext4 cu comanda debugfs. Trebuie să utilizați comanda stat disponibilă în depanatorul sistemului de fișiere pentru a afișa conținutul inodului. Când ați terminat, utilizați exit pentru a închide mediul debugfs.

asigurați-vă că fișierele din sistemul de fișiere nu pot fi accesate în timp ce lucrați în debugfs. Ar trebui să luați în considerare remontarea sistemului de fișiere folosind mount -o remount /yourfilesystem

puteți utiliza debugfs pentru a anula ștergerea unui fișier utilizând inodul său și indicând un fișier

structura Inodului pentru directorul

după cum sa menționat mai sus, directoarele din Linux sunt, de asemenea, tratate ca fișiere. Directorul este un fișier special care mapează un nume de fișier la numărul său inode (această mapare se numește intrare director sau dentry). Deci, atunci când spunem că un director conține fișiere și alte directoare, ne referim la faptul că acest director mapează acele fișiere și directoare (directoarele sunt fișiere speciale, deci au nevoie și de mapare la numerele lor inode) la numerele lor inode.

acesta este motivul pentru care un director nu poate conține două fișiere cu același nume, deoarece nu poate mapa un nume cu două numere inode diferite.

# ls -ld test/drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/

deoarece un fișier este mapat la inodul său de către directorul său părinte, atunci cum este cel mai mare Director, (adică/ directory) mapat la inodul său? Numărul inod al directorului / este fix și este întotdeauna 2.

link – uri și numărul de index în Linux

în producția de ls -l, coloana după permisiunile și înainte de proprietar este numărul de link-ul. Numărul de legături este numărul de legături dure către un fișier. Pentru a înțelege legăturile dure, începem cu link-uri. Un link este un pointer către un alt fișier.

în lumea Linux, există două tipuri de legături:

a. legături simbolice (sau legături soft)

legătura simbolică este un fișier separat al cărui conținut indică fișierul legat. Pentru a crea o legătură simbolică, utilizați comanda ln cu opțiunea -s. Când utilizați comanda ln, asigurați-vă că vă referiți mai întâi la numele fișierului original și apoi la numele linkului pe care doriți să îl creați.

# ln -s /home/bobbin/sync.sh filesync

aici ‘filesync’ este o legătură simbolică cu ‘sync.sh’. gândește-te la asta ca la o scurtătură. Editarea ‘filesync’ este ca edita direct fișierul original, dar este într-adevăr ceea ce se întâmplă. Dacă ștergem sau mutăm fișierul original, linkul va fi întrerupt și fișierul nostru ‘filesync’ nu va mai fi disponibil.

comandals -l arată că fișierul rezultat este o legătură simbolică. Acest lucru este indicat de litera l din prima poziție a ieșiriils -l și, de asemenea, de săgeata de la sfârșitul listării, care indică fișierul la care se referă numele.

# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh

conținutul unei legături simbolice este doar numele fișierului țintă. Puteți vedea că permisiunile de pe linkul simbolic sunt complet deschise. Acest lucru se datorează faptului că permisiunile nu sunt gestionate

când comparați legătura simbolică și fișierul original, veți observa o diferență clară între ele.

fișierul original este doar un nume care este conectat direct la inod, iar legătura simbolică se referă la nume. Dimensiunea legăturii simbolice este numărul de octeți din numele fișierului la care se referă, deoarece nu sunt disponibile alte informații în legătura simbolică.

B. legături dure

pentru a vă face o idee despre ce este o legătură dură, este important să înțelegeți că identitatea unui fișier este numărul său inod, nu numele său. Un link greu este un nume care face referire la un inod. Aceasta înseamnă că, dacă ‘file1’ are un link greu numit ‘file2’, atunci ambele aceste fișiere se referă la același inode. Deci, atunci când creați un link dur pentru un fișier, tot ce faceți cu adevărat este să adăugați un nume nou la un inode.

pentru a face acest lucru, utilizați comanda ln fără opțiune.

# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro

acum să comparăm cele două fișiere

lucrul interesant despre legăturile dure este că nu există nicio diferență între fișierul original și link: sunt doar două nume conectate la același inod.

după cum trebuie să fi observat, spre deosebire de legăturile soft, legăturile hard nu sunt fișiere speciale. Acum, numărul de legături este numărul pe care un fișier l-a legat greu. Deci, un număr de link-uri crește după crearea unui link dur, după cum puteți vedea în figura de mai sus. Aceste legături dure au două limitări:

  • directoarele nu pot fi greu legate. Linux nu permite acest lucru pentru a menține structura arborescentă aciclică a directoarelor.
  • o legătură hard nu poate fi creată între sistemele de fișiere. Ambele fișiere trebuie să fie pe aceleași sisteme de fișiere, deoarece diferite sisteme de fișiere au tabele inode independente diferite (două fișiere pe sisteme de fișiere diferite, dar cu același număr inode vor fi diferite).

Cum de a găsi link-ul greu în Linux

puteți prelua toate numele fișierului care indică un număr inode. Aceasta înseamnă că puteți prelua link-uri hard, deoarece este singurul tip de link unde putem avea unele nume de fișiere care indică același conținut (inode). Puteți face acest lucru cu -inum opțiunea de a găsi comanda ca mai jos

# find / -inum 517333/home/bobbin/sync.sh/root/synchro

cu aceasta, puteți ști ce nume de fișiere indică informațiile de date, astfel, prelua toate link-ul greu în raport cu un anumit număr inode

operațiuni Linux cu fișiere și relația sa cu inode

cele mai) efectuate pe legături soft vor afecta fișierul real legat (cu excepția comenzilor RM sau MV, care elimină (sau mută) legătura soft în sine)

iată câteva operații de fișiere în care inodurile își joacă rolul vital:

a. Copiere fișiere

când copiem un fișier, se creează un fișier nou cu un inod nou.

# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile

B. mutați fișierele

când se deplasează peste sisteme de fișiere, comanda mv continuă ca comanda cp de mai sus, cu excepția faptului că fișierul original este eliminat din locația sa. Dar când se deplasează într-un sistem de fișiere, inodul nu se schimbă, se schimbă doar maparea directorului inodului, datele reale de pe hard disk (conținutul fișierului) nu se mișcă.

# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt

acum să mutăm fișierul și să verificăm rezultatul

# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt

c. eliminați fișierele

când este emisă comanda rm, mai întâi verifică numărul de legături al fișierului. Dacă numărul de legături este mai mare decât 1, atunci elimină acea intrare de director și scade numărul de legături. Totuși, datele sunt prezente și nici inodul nu este afectat. Și când numărul de legături este 1, inodul este șters din tabelul inode, numărul inode devine gratuit, iar blocurile de date pe care le ocupa acest fișier sunt adăugate la lista de blocuri de date gratuite.

# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink

să ștergem fișierul și să verificăm rezultatul

# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile

puteți vedea că numărul de inode este scăzut.

concluzie

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *