Articles

Detaljerad förståelse av Linux-inoder med exempel

Linux och andra Unix-liknande operativsystem upprätthåller konsistens genom att behandla allt som en fil (även hårdvaruenheterna). Tangentbordet, musen, skrivare, bildskärm, hårddisk, processer, även katalogerna behandlas som filer i Linux. De vanliga filerna innehåller data som text (textfiler), musik, videor (multimediafiler) etc.

förutom vanliga data finns det några andra data om dessa filer, till exempel deras storlek, äganderätt, behörigheter, tidsstämpel etc. Denna metadata om en fil hanteras med en datastruktur som kallas en inod (indexnod).

Vad är en inode i Linux?

varje Linux-fil eller katalog (ur teknisk synvinkel finns det ingen verklig skillnad mellan dem) har en inode, och denna inode innehåller alla filens metadata (dvs alla administrativa data som behövs för att läsa en fil lagras i dess inode).

till exempel innehåller inoden en lista över alla block där en fil lagras, ägarinformationen för den filen, behörigheter och alla andra attribut som är inställda för filen.

Inode gränser är per filsystem och bestäms vid filsystem skapande tid. Den maximala katalogstorleken beroende på filsystemet och därmed den exakta gränsen skiljer sig åt.

för bättre prestanda gör dina kataloger mindre genom att sortera filer i underkataloger snarare med en stor katalog.

Vad är ett inodnummer?

Inodnummer är också känt som indexnummer. En inode är ett unikt nummer som tilldelas filer och kataloger medan det skapas. Inode-numret kommer att vara unikt för hela filsystemet.

en inod är en datastruktur på ett traditionellt Unix – filsystem som ext3 eller ext4. lagra egenskaperna för en fil och kataloger.

Linux utökade filsystem som ext3 eller ext4 upprätthåller en array av dessa inoder som kallas inode-tabellen. Den här tabellen innehåller en lista över alla filer i filsystemet. De enskilda inoderna i inode-tabellen har ett unikt nummer (unikt för det filsystemet) som kallas inodnumret.

följande information lagras i inode:

  • filtyp: vanlig fil, katalog, rör etc.
  • behörigheter till den filen: läs, skriv, Kör
  • Länkräkning: antalet hårda länkar i förhållande till en inode
  • användar-ID: ägare av filen
  • grupp-ID: gruppägare
  • Filstorlek: eller större/mindre nummer vid vissa speciella filer
  • tidsstämpel: åtkomsttid, modifieringstid och (inode) ändra tid
  • attribut: oföränderlig’ till exempel
  • Åtkomstkontrolllista: behörigheter för speciella användare/grupper
  • /li>
  • länk till platsen för filen
  • övriga metadata om filen

Observera att inoden inte lagrar namnet på filen utan endast dess innehåll.

Diagram över inode datastruktur

så här kontrollerar du inode i Linux

Om du vill titta på inoder, på något ext-filsystem kan du kan använda kommandon nedan för att kontrollera egenskaperna för filsystemet och filer som används i det.

a.Display fildatainformation

Du kan visa inode-data i en fil eller katalog med stat-kommandot.

Du måste ange namnet på filen enligt följande:

stat-utgången berättar de olika tidsstämplarna för filen, dess ägande och behörigheter och var den lagras. Filens data lagras i diskblocket, vilket visas i inodens stat-kommandoutgång.

Du kan välja att bara lista inodnumret för en fil med alternativet --format enligt nedan:

# stat --format=%i hello530461

b. Skriv ut indexnummer för filer

ls-kommandot används för att lista fil-och kataloginformation. Alternativet -i med LS visar inodnumret för varje fil. Vi kan kombinera den med-l alternativ för att lista information i detalj

# 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

den första kolumnen ger inode-numret. Du kan visa en viss fils inode enligt nedan:

# ls -i continue.sh 519450 continue.sh

c. Visa filsystem inode space information

som standard sammanfattar DF-kommandot tillgängligt och använt diskutrymme. Du kan istället få en rapport om tillgängliga och använda inoder genom att skicka alternativet -i eller --inodes.

denna information kan vara till hjälp om en partition har väldigt många små filer, vilket kan tömma tillgängliga inoder tidigare än de tömmer Tillgängligt diskutrymme.

D. lista innehållet i filsystemet superblock

Du kan använda kommandottune2fs -l för att visa all information relaterad till 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. manipulera filsystemets metadata

Du kan se innehållet i en inod som det finns på ett Ext4-filsystem med felsökningskommando. Du måste använda stat-kommandot som är tillgängligt i filsystemets debugger för att visa innehållet i inoden. När du är klar använder du exit för att stänga felsökningsmiljön.

se till att filer på filsystemet inte kan nås när du arbetar i debugfs. Du bör överväga att montera om filsystemet med mount -o remount /yourfilesystem

Du kan använda debugfs för att återställa en fil genom att använda dess inod och ange en fil

Inodstruktur för katalog

som nämnts ovan behandlas katalogerna i Linux också som filer. Katalog är speciell fil som kartlägger ett filnamn till dess inodnummer (denna kartläggning kallas kataloginmatning eller dentry). Så när vi säger att en katalog innehåller filer och andra kataloger menar vi att den här katalogen kartlägger dessa filer och kataloger (kataloger är speciella filer, så de behöver också kartlägga sina inode-nummer) till sina inode-nummer.

detta är anledningen till att en katalog inte kan innehålla två filer med samma namn, eftersom den inte kan mappa ett namn med två olika inodnummer.

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

som en fil mappas till sin inod av sin överordnade katalog, hur är top most directory, (dvs / directory) mappad till dess inod? Inodnumret för/ katalogen är fast och är alltid 2.

länkar och indexnummer i Linux

i utmatningen av ls -l är kolumnen som följer behörigheterna och före ägaren länkräkningen. Länkräkning är antalet hårda länkar till en fil. För att förstå hårda länkar börjar vi med länkar. En länk är en pekare till en annan fil.

i Linux world finns två typer av länkar:

A. symboliska länkar (eller mjuka länkar)

den symboliska länken är en separat fil vars innehåll pekar på den länkade filen. För att skapa en symbolisk länk, använd kommandot ln med alternativet -s. När du använder kommandot ln, se till att du först hänvisar till namnet på originalfilen och sedan till namnet på länken du vill skapa.

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

här är ”filesync” en symbolisk länk till ”sync.sh’. Tänk på det som en genväg. Redigera ’filesync’ är som direkt redigera den ursprungliga filen men det är verkligen vad som händer. Om vi tar bort eller flyttar originalfilen kommer länken att brytas och vår filsynkroniseringsfil kommer inte längre att vara tillgänglig.

kommandotls -l visar att den resulterande filen är en symbolisk länk. Detta indikeras med bokstaven l i den första positionen förls -l – utgången och även med pilen i slutet av listan, vilket indikerar filen namnet hänvisar till.

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

innehållet i en symbolisk länk är endast namnet på målfilen. Du kan se att behörigheterna på den symboliska länken är helt öppna. Detta beror på att behörigheterna inte hanteras

När du jämför den symboliska länken och originalfilen kommer du att märka en tydlig skillnad mellan dem.

originalfilen är bara ett namn som är anslutet direkt till inoden, och den symboliska länken hänvisar till namnet. Storleken på den symboliska länken är antalet byte i namnet på filen den hänvisar till, eftersom ingen annan information finns tillgänglig i den symboliska länken.

b. hårda länkar

För att få en uppfattning om vad en hård länk är, är det viktigt att förstå att identiteten på en fil är dess inodnummer, inte dess namn. En hård länk är ett namn som refererar till en inod. Det betyder att om ’file1’ har en hård länk som heter ’file2’, hänvisar båda dessa filer till samma inod. Så när du skapar en hård länk för en fil är allt du verkligen gör att lägga till ett nytt namn i en inode.

för att göra detta, använd kommandot ln utan alternativ.

# 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

låt oss nu jämföra de två filerna

det intressanta med hårda länkar är att det inte finns någon skillnad mellan originalfilen och länken: de är bara två namn kopplade till samma inode.

som du måste ha noterat, till skillnad från mjuka länkar, är hårda länkar inga speciella filer. Nu är länkräkning numret som en fil har varit hårt länkad. Så en länkräkning ökar efter att ha skapat en hård länk som du kan se i ovanstående figur. Dessa hårda länkar har två begränsningar:

  • katalogerna kan inte vara hårt länkade. Linux tillåter inte detta för att upprätthålla den acykliska trädstrukturen i kataloger.
  • en hård länk kan inte skapas över filsystem. Båda filerna måste vara på samma filsystem, eftersom olika filsystem har olika oberoende inode-tabeller (två filer på olika filsystem, men med samma inode-nummer kommer att vara olika).

så här hittar du hård länk i Linux

Du kan hämta alla filnamn som pekar på ett inodnummer. Det betyder att du kan hämta hårda länkar eftersom det är den enda typen av länk där vi kan ha några filnamn som pekar på samma innehåll (inode). Du kan göra det med -inum alternativet Sök kommando enligt nedan

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

med detta kan du veta vilka filnamn som pekar på datainformationen så, hämta alla hårda länkar i förhållande till ett specifikt inode-nummer

Linux-operationer med filer och dess relation med inodes

de flesta operationerna (t.ex. kopiera filer)) utförs på mjuka länkar kommer att påverka den faktiska länkade filen (med undantag för rm-eller MV-kommandon, som tar bort (eller flyttar) mjuklänk själv)

här är några filoperationer där inoder spelar sin viktiga roll:

a. kopiera filer

När vi kopierar en fil skapas en ny fil med en ny inod.

# 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. Flytta filer

När du flyttar över filsystem fortsätter MV-kommandot som CP-kommando ovan, med undantag för att originalfilen tas bort från dess plats. Men när du flyttar inom ett filsystem ändras inte inoden, bara katalogmappningen av inoden ändras, de faktiska data på hårddisken (innehållet i filen) rör sig inte.

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

låt oss nu flytta filen och kontrollera resultatet

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

c. ta bort filer

När RM-kommandot utfärdas kontrollerar det först länkräkningen för filen. Om länkräkningen är större än 1, tar den bort den kataloginmatningen och minskar länkräkningen. Fortfarande är data närvarande, inte heller påverkas inoden. Och när länkräkningen är 1, raderas inoden från inode-tabellen, inodnumret blir ledigt och datablocken som den här filen ockuperade läggs till i listan med gratis datablock.

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

låt oss ta bort filen och kontrollera resultatet

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

Du kan se att antalet inode minskas.

slutsats

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *