Inode i Linux

 

Hvad er en inode i Linux

Hver Linux-fil eller mappe har en inode, som set fra et teknisk synspunkt er ens, så er der ingen reel forskel mellem dem, og denne inode indeholder alle filens metadata. D.V.S. alle de administrative data, der er nødvendige for at læse en fil, gemmes i dens inode.

For eksempel indeholder inoden en liste over alle de blokke, som en fil er gemt i, ejerinformationen for den fil, tilladelser og alle andre attributter, der er indstillet til filen.

Inode-begrænsninger er pr. Filsystem og afgøres på filsystemets oprettelsestid. Den maksimale mappestørrelse er afhængig af filsystemet og dermed den nøjagtige grænse afvigelse.

For bedre ydeevne skal du gøre dine mapper mindre ved at sortere filer i undermapper snarere end at have et stort bibliotek.

Hvad er et inodenummer

Nodenummer kaldes også indeksnummer. En inode er et unikt nummer, der er tildelt filer og mapper, mens det oprettes. Inodenummeret vil være unikt for hele filsystemet.

En inode er en datastruktur på et traditionelt Unix-fil-filsystem som ext3 eller ext4. lagring af ejerskab for en fil og mapper.

Linux filsystemer såsom ext3 eller ext4 opretholder en tabel af disse inoder kaldet inode-tabellen. Denne tabel indeholder en liste over alle filer i det filsystem. De enkelte inoder i inodetabellen har et unikt nummer (unikt for det filsystem) kaldet inodenummeret.

Følgende information gemmes i inode:

  • Filtype - almindelig fil, bibliotek, pipe osv.
  • Tilladelser til denne fil - læse, skrive, udføre
  • Linkantal - Antallet af hård lænke i forhold til en inode
  • Bruger ID - Ejer af filen
  • Gruppe ID - Gruppeejer
  • Størrelse af fil - Eller større/mindre antal i tilfælde af specielle filer
  • Tidsstempel - Adgangstid, ændringstid og inode ændringstid
  • Egenskaber - Uforanderlig for eksempel
  • Liste over adgangskontroller - Tilladelser for specielle brugere/grupper
  • Link - Til hvor filen findes
  • Andre metadata - Om filen

Bemærk, at inoden ikke gemmer navnet på filen, men kun dens indhold.

Sådan kontrolleres inode i Linux

Hvis du ønsker at se på inoder, kan du på ethvert ext-filsystem bruge nedenstående kommandoer til at kontrollere egenskaberne for filsystemet og de filer, der bruges i det.

Du kan få vist inodedataene i en fil eller et bibliotek ved hjælp af stat kommandoen

Du skal angive navnet på filen. Et eksempel herunder

$ stat hello

 

Stat outputet fortæller dig de forskellige tidsstempler for filen, dens ejerskab. I det her tilfælde (Uid: ( 500/carl) Gid: (500/carl) og tilladelser og hvor den er gemt. Filens data opbevares i diskblokken, der vises i inodens stat kommandooutput.

Du kan vælge kun at angive inodenummeret for en fil med flaget --format som nedenfor:

$ stat --format=%i hello

 

Vis indeksnummer for filer og mapper

Kommandoen,ls bruges til at vise liste over fil og mappeoplysninger. Flaget -i med ls viser inodenummeret for hver fil. Vi kan kombinere det med -l flaget for at vise information mere detaljeret.

$ ls -il

 

Den første kolonne giver inodenummeret. Du kan vise en bestemt fils inode som vist herunder.

$ ls -i md5sum

 

Vis filsystemets inode forbrug af plads

Som standard opsummerer df kommandoen tilgængeligt og brugt diskplads. Du kan i stedet modtage en rapport om tilgængelige og brugte inoder ved at bruge flaget -i.

$ df -i

 

Inodestruktur til bibliotek

Som nævnt ovenfor behandles mapper i Linux også som filer. Katalogoversigt er en speciel fil, der kortlægger et filnavn til dets inodenummer. Så når vi siger, at et bibliotek indeholder filer og andre mapper, mener vi, at dette biblioteks mapper, disse filer og mapper til deres inodenumre.

Dette er grunden til, at et bibliotek ikke kan indeholde to filer med samme navn, fordi det ikke kan kortlægge et navn med to forskellige inodenumre.

$ ls -ld tmp/

Stat viser dig meget mere detaljeret output end ls gør

Der altid er en måde at gå dybere på og se, hvad der ligger lige under overfladen. Hver fil og katalog har en inode. Inoden indeholder metadata om filen, såsom hvilket filsystem, og datostempler, der er knyttet til filen. Inoden er som et bibliotekskort til filen

Ligesom ls har stat kommandoen en masse muligheder. Så lad os komme igang.

Når en fil er kortlagt til sin inode af dens overordnede bibliotek, hvordan kortlægges så det overordnede bibliotek (dvs.root / biblioteket) til dets inode? Inodenummeret til / biblioteket er fast og er altid 2.

$ stat /

 

Brug af stat med flere filer

Hvis du vil have statusrapport på flere filer på én gang, skal du indtaste filnavnene til stat på kommandolinjen.

$ stat hello.1 hello.2

 

Brug mønster matching til at bruge stat på et sæt filer. Spørgsmålet “?” repræsenterer en hvilken som helst enkelt karakter, og stjerne “*” repræsenterer en hvilken som helst streng med tegn. Vi kan fortælle stat at rapportere om enhver fil kaldet “hello” med en enkelt bogstavsudvidelse med denne kommando.

$ stat hello.?

 

$ stat hello.*

 

Brug af stat til at rapportere om filsystemer

Stat kan rapportere om filsystemers status samt filernes status med -f (filsystem) som fortæller stat at rapportere om det filsystem, som filen findes på. Bemærk, at vi også kan videregive et bibliotek som “/” til stat i stedet for et filnavn.

$ stat -f hello.2

 

$ stat -f /

Oplysningerne som stat giver os

  • Fil - Navnet på filen
  • ID - Filsystemets id i hexadecimal notation
  • Navnelægde - Den maksimalt tilladte længde for filnavne
  • Type - Filsystemtypen
  • Blokstørrelse - Mængden af ​​data, der kan anmodes om for optimale dataoverførelleshastigheder.
  • Fundamental blokstørrelse - Størrelsen på hver filsystemblok

Blokke:

  • Samlet - Det samlede antal af alle blokke i filsystemet
  • Fri - Antallet af frie blokke i filsystemet
  • Tilgængelige - Antallet af frie blokke til rådighed for almindelige (ikke-root) brugere

Inoder:

  • Samlet - Det samlede antal inoder i filsystemet
  • Fri - Antallet af frie inoder i filsystemet

Tilpassede outputformater i stat

En bedre måde at få et andet sæt data fra stat er at bruge et brugerdefineret format. Der er en lang liste med symboler format muligheder. Hver af disse repræsenterer et dataelement. Vælg dem, du vil have inkluderet i output, og opret en formatstreng. Når vi kalder stat og videregiver formatstrengen til den, inkluderer output kun de dataelementer, vi anmoder om.

Der er forskellige sæt formatsekvenser til filer og filsystemer. Listen over filer er:

  • %a - Adgangsrettighederne i oktal
  • %A - Adgangsrettighederne i menneskelig læsbar form rwx
  • %b - Antallet af tildelte blokke
  • %B - Størrelsen i byte for hver blok
  • %d - Enhedsnummeret i decimal
  • %D - Enhedsnummeret i hex
  • %f - Raw tilstand i hex
  • %F - Filtypen
  • %g - Gruppens id for ejeren
  • %G - Gruppens navn på ejeren
  • %h - Antallet af hårde links
  • %i - Inodenummeret
  • %m - Monteringspunktet
  • %n - Filnavnet
  • %N - Det citerede filnavn, med fjernet filnavn, hvis det er et symbolsk link
  • %o - Den optimale til I/O overførselstørrelse
  • %s - Den samlede størrelse i byte
  • %t - Hovednummer i hex til særlige filer til tegn/blok enhed
  • %T - Undernummer i hex for særlige filer til tegn/blok enhed
  • %u - Bruger ID for ejeren
  • %U - Brugernavnet til ejeren
  • %w - Tidspunktet for oprettelse af fil, menneskelig læsbar eller bindestreg “-” hvis ukendt
  • %W - Tidspunktet for filens oprettelse, sekunder siden oprettelse “0” hvis ukendt
  • %x - Tidspunktet for sidste tilgåelse, menneskelig læsbar
  • %X - Tidspunktet for sidste adgang, sekunder siden sidst
  • %y - Tidspunktet for sidste data ændrelse, menneskelig læsbar
  • %Y - Tiden for sidste data ændrelse, sekunder siden sidst
  • %z - Tidspunktet for sidste statusændring, menneskelig læsbar
  • %Z - Tidspunktet for sidste statusændring, sekunder siden sidst

For filsystemer er formateringssekvenserne:

  • %a - Antallet af frie blokke til rådighed for almindelige (ikke-root) brugere
  • %b - De samlede datablokke i filsystemet
  • %c - De totale inoder i filsystemet
  • %d - Antallet af frie inoder i filsystemet
  • %f - Antallet af frie blokke i filsystemet
  • %i - Filsystemets id i hexadecimal
  • %l - Den maksimale længde af filnavne
  • %n - Filnavnet
  • %s - Blokstørrelsen (den optimale skrivestørrelse)
  • %S - Størrelsen på filsystemblokke (til bloktællinger)
  • %t - Filsystemtypen i hexadecimal
  • %T - filsystemtype i menneskelig læsbar form

Tilpassede formater giver dig adgang til endnu flere dataelementer, end der er inkluderet i standard stat output.

Der er to indstillinger, der accepterer strenge med formateringssekvenser. Disse er --format og --printf . Forskellen mellem disse to flag er, at når to eller flere filer bruges som operanter i --format så tilføjes automatisk en ny linje efter hver output. Mens --printf fortolker backslash \ som ny linje.

Eksempler på --format og --printf

--format

$ stat --format "%A" /var/log/syslog

Viser adgangsbegrænsninger, i menneskelig læselig form, til systemloggen /var/log/syslog. Output følgende:

-rw-r-----

Hvilket indikerer at filen er læsbar og skrivbar for root, kan læses af den ejer gruppe (i dette tilfælde admin-gruppen) og overhovedet ikke tilgængelig for andre.

Hvis vi ønsker dem i oktal (talform)

$ stat --format "%a" /var/log/syslog

Du kan kombinere et vilkårligt antal formateringsdirektiver og eventuelt bruge tilpassede separatorer imellem dem. Separatoren skal være et enkelt tegn (,).

$ stat --format="%n,%F" /dev/null

Det fortæller os at det er en tegnspecialfil.

Hvis vi ønsker rettighederne i oktal (talform)

$ stat --format "%a" /dev/null

Specifikatoren "%U" returnerer ejeren af ​​filsystemet.

$ stat --format=%U /

For at få filstørrelsen og rettighede til filen skal du bruge formatet %s og %A

$ stat --format=%s,%A /home/carl/hello/hello.3

Her kan vi se at filstørelsen er 86766 kilobyte/, rettighederne er er -rw-rw-r-- I dette her tilfælde er det carl der er ejer, og han har læse og skriveadgang. Det har dem der også tilhører gruppen carl, alle andre har kun læseadgang.

Prøv selv nu at lave nogle kombinationer

 

For at fortolke specialtegn som ny linje skal du bruge flaget --printf

$ stat --printf='Name: %n\nPermissions: %a\n' /etc

\n udskriver en ny linje. Her kan vi se tilladelserne i oktal (talform).

Hvis vi ønsker at få vist adgangsbegrænsninger, i menneskelig læselig form, bruges %A

$ stat --printf='Name: %n\nPermissions: %A\n' /etc

Output sigerdrwxr-xr-x Det er en mappe, der har læse, skrive og execute (udføre) tilladelser for ejeren (i dette tilfælde root), men kun læse og tilladelser for gruppen, og for andre brugere execute.

For at få enhedens og inodenumre på / og / usr

$ stat --printf='%d,%i\n' / /usr

Det var så det for denne gang. Prøv dig frem, dette var kun en lille bid om inode og stat.

 

Alle eksempler er uført i, PCLinuxOS.