Powiedzmy, że mam otwarty terminal i przez ten terminal przeszedłem cd
do jakiegoś katalogu. Poprzez inny terminal usuwam ten katalog i przywracam go z identycznej kopii zapasowej. Kiedy próbuję vim
pobrać plik z pierwszego terminala, w tym samym katalogu, dlaczego pojawia się błąd dotyczący nieaktualnego uchwytu pliku? Co to znaczy? (Na marginesie stwierdziłem, że można ominąć ten problem cd $(pwd)
.)
101
touch
na hoście A może sprawić, że będzie to normalne.Odpowiedzi:
Po usunięciu katalogu i- węzeł dla tego katalogu (i i-węzły z jego zawartością) są odzyskiwane. Wskaźnik, który twoja powłoka ma do i-węzła tego katalogu (i jego zawartości) nie jest już prawidłowy. Kiedy katalog jest przywracany z kopii zapasowej, stare i-węzły nie są (koniecznie) używane ponownie; katalog i jego zawartość są przechowywane w losowych i-węzłach. Jedyną rzeczą, która pozostaje taka sama, jest to, że katalog nadrzędny ponownie używa tej samej nazwy dla przywróconego katalogu (ponieważ kazałeś mu).
Teraz, jeśli spróbujesz uzyskać dostęp do zawartości katalogu, na który wskazuje Twoja oryginalna powłoka, przekaże to żądanie do systemu plików jako żądanie oryginalnego i-węzła, który od tego czasu został ponownie przetworzony (i może nawet być używany do czegoś zupełnie inaczej). Otrzymujesz więc
stale file handle
wiadomość, ponieważ poprosiłeś o nieistniejące dane.Kiedy wykonujesz
cd
operację, powłoka ponownie ocenia lokalizację i-węzła dowolnego miejsca docelowego, które jej podasz. Teraz, gdy twoja powłoka zna nowy i-węzeł dla katalogu (i nowe i-węzły dla jego zawartości), przyszłe żądania dotyczące jego zawartości będą prawidłowe.źródło