Wat betekent ‘oude bestandshandle’ in Linux?

Stel dat ik een terminal open heb, en via die terminal heb ik cd‘ed naar een directory. Via een andere terminal verwijder ik die map en herstel ik deze vanaf een identieke back-up. Wanneer ik een bestand probeer te vim vanaf de eerste terminal, in dezelfde map, waarom krijg ik dan een foutmelding over een verouderde bestandshandle? Wat betekent het? (Terzijde: ik heb ontdekt dat het mogelijk is om dit probleem te omzeilen via cd $(pwd).)


Antwoord 1, autoriteit 100%

Als de directory wordt verwijderd, wordt de inode voor die directory (en de inodes voor de inhoud) hergebruikt. De aanwijzer die uw shell heeft naar de inode van die map (en de inodes van de inhoud) is nu niet langer geldig. Wanneer de directory wordt hersteld vanaf een back-up, worden de oude inodes niet (noodzakelijkerwijs) hergebruikt; de map en de inhoud ervan worden opgeslagen op willekeurige inodes. Het enige dat hetzelfde blijft, is dat de ouder-directory dezelfde naam hergebruikt voor de herstelde directory (omdat u dat hebt gezegd).

Als u nu probeert toegang te krijgen tot de inhoud van de map waarnaar uw originele shell nog steeds verwijst, communiceert het dat verzoek naar het bestandssysteem als een verzoek voor de originele inode, die sindsdien is gerecycled (en mogelijk zelfs in nu voor iets heel anders gebruiken). U krijgt dus een bericht stale file handle omdat u om niet-bestaande gegevens hebt gevraagd.

Als je een cd-bewerking uitvoert, evalueert de shell opnieuw de inode-locatie van de bestemming die je hem geeft. Nu je shell de nieuwe inode voor de map kent (en de nieuwe inodes voor de inhoud), zijn toekomstige verzoeken om de inhoud geldig.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

16 − 7 =

Other episodes