W systemie Linux po utworzeniu folderu automatycznie tworzy dwa twarde łącza do odpowiedniego i-węzła. Jeden to folder, który chcesz utworzyć, a drugi to .
folder specjalny tego folderu.
Przykład:
$ mkdir folder
$ ls -li
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 folder
$ ls -lai folder
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 .
124593716 drwxr-xr-x 3 fantattitude staff 102 18 oct 16:52 ..
Jak widać, zarówno wewnątrz , jak folder
i .
wewnątrz folder
mają ten sam numer i-węzła (pokazany z -i
opcją).
Czy istnieje możliwość usunięcia tego specjalnego .
linku twardego?
To tylko dla eksperymentów i ciekawości.
Wydaje mi się również, że odpowiedź może dotyczyć również ..
specjalnego pliku.
Próbowałem spojrzeć na rm
człowieka, ale nie mogłem tego zrobić. Gdy próbuję usunąć .
wszystko, co otrzymuję, to:
rm: "." i „..” nie można usunąć
Naprawdę jestem ciekawy, jak działają te rzeczy, więc nie powstrzymuj się od zbytniego mówienia na ten temat.
EDYCJA: Być może mój post nie był jasny, ale chcę zrozumieć mechanizm, który jest odpowiedzialny za .
pliki i powody, dla których nie można ich usunąć.
Wiem, że standard POSIX nie zezwala na folder zawierający mniej niż 2 twarde linki, ale tak naprawdę nie rozumiem dlaczego. Chcę wiedzieć, czy i tak można to zrobić.
źródło
Odpowiedzi:
Technicznie możliwe jest usunięcie
.
, przynajmniej w systemach plików EXT4. Jeśli utworzysz obraz systemu plikówtest.img
, zamontuj go i utwórztest
folder, a następnie odmontuj go ponownie, możesz go edytować za pomocądebugfs
:debugfs
nie narzeka i sumiennie usuwa pozycję.
katalogu w systemie plików.test
Katalog jest nadal użyteczny, z jedną niespodziankę:pokazuje tylko
więc
.
naprawdę zniknął. Jednakcd .
,ls .
,pwd
nadal zachowują się jak zwykle!Wcześniej przeprowadzałem ten test przy użyciu
rmdir .
, ale to usuwa i-węzeł katalogu ( wielkie dzięki BowlOfRed za wskazanie tego ), który pozostawia wiszącytest
wpis katalogu i jest prawdziwym powodem napotkanych problemów. W tym scenariuszutest
folder staje się bezużyteczny; po zamontowaniu obrazu uruchomionels
produkujei pokazuje dziennik jądra
Uruchomienie
e2fsck
w tej sytuacji na obrazie powodujetest
całkowite usunięcie katalogu (i-węzeł katalogu zniknął, więc nie ma nic do przywrócenia).Wszystko to pokazuje, że
.
istnieje jako konkretna jednostka w systemie plików EXT4. Odniosłem wrażenie z kodu systemu plików w jądrze, że oczekuje.
i..
on istnieje, i ostrzega, jeśli nie (zobacznamei.c
), ale wunlink .
teście bazowym nie widziałem tego ostrzeżenia.e2fsck
nie podoba się brakujący.
wpis w katalogu i oferuje go naprawić:Spowoduje to ponowne utworzenie
.
pozycji katalogu.źródło
.
folder naprawdę istnieje w FS, a narzędzia oczekują, że będzie działać poprawnie.mount
lubls
). Nie widziałem, czy pojawią się inne problemy.rmdir .
naprawdę zniszczyłemtest
i zostawiłem to jako wiszący wpis w katalogu, który prawdopodobnie spowodowałby problemy. Sprawdzęunlink
i zaktualizuję swoją odpowiedź!Nie ma możliwości usunięcia tej pozycji katalogu.
.
Środki entry „to katalog”, to..
środki wejścia „Ten katalog jest katalog nadrzędny”. Nie są to tak naprawdę twarde łącza, tylko w ten sposób tworzona / reprezentowana jest struktura katalogów.źródło
ls
inne narzędzia, co nie wydaje mi się realistyczne.Jak opisano w Lion's Notes na temat kodu źródłowego Unix 6wczesny Unix miał plik dyskowy, w którym zarówno pliki, jak i katalogi były reprezentowane na dysku przez struktury i-węzłów. Był specjalny bit wskazujący, że zawartość pliku była katalogiem. Każdy i-węzeł miał odsyłacz do własnego i-węzła, który pozwalał plikowi wiedzieć, w którym katalogu się znajduje. Wyjątkiem był katalog „/”, który sam był właścicielem. Był też link do treści. Jeśli i-węzeł nie miał treści, mógłby zostać zwrócony na listę darmową. Ponieważ katalog był tylko pobłogosławionym plikiem, nawet pusty katalog musiał mieć zawartość, aby zapobiec gromadzeniu śmieci. Tak więc ... był łącznikiem i-węzła z i-węzłem nadrzędnym i. wskazał, że katalog nadal nadaje się do użytku. rmdir (wywołując unlink) może usunąć.
źródło
Jak mówi „możliwy duplikat” odpowiedzi „post ”, standard POSIX określa, że jeśli rmdir spróbuje usunąć bieżący katalog, zawiedzie.
Cokolwiek zbudujesz, musisz mieć fundament. Trudno jest zdefiniować ścieżki względne bez możliwości powiedzenia „tutaj”. Więc „.” jest zdefiniowany jako „tutaj”.
Ponadto, można usunąć „kropka” i „kropka kropka”. Napisz własny system operacyjny, który ich nie definiuje. Chociaż Unix (a przez to Mac OSX), Linux, a nawet MS DOS i Windows używają kropek i kropek.
TL; DR - „kropka” jest w definicji systemu operacyjnego.
źródło