Jak linux obsługuje polecenie przenoszenia

12

Jak linux obsługuje polecenie ruchu pod maską?

Powiedzmy, że przeprowadzam się do domu, reż

/home/me

i przenoszę to do innego katalogu

/home/foo/me

Jak mezmieniane są wszystkie ścieżki plików i katalogów ? Wiem, że moja Desktopreż mocy mejest teraz /home/foo/me/Desktop, jak również Documents /home/foo/me/Documents, ale nie system plików wyraźnie aktualizować każdą ścieżkę mocy me, aby odzwierciedlać zmiany? To nie brzmi bardzo wydajnie i prawdopodobnie nie jest tak.

Gdzie mogę uzyskać więcej informacji na ten temat?

Jeff
źródło
5
O wydajności: nie, to nie byłoby wydajne. Gdy przenosisz dane do innego katalogu, dane nie są w rzeczywistości odczytywane w jednym miejscu i zapisywane w innym. System plików zawiera zestaw wskaźników do bloków danych. W przypadku ruchu aktualizowane są tylko wskaźniki.
Jos
Ach, prawdopodobnie to właśnie miał na myśli
Jeff
@Jos Skąd pochodzi fragmentacja?
zero298
3
@ zero298 Nie, fragmentacja ogólnie jest zupełnie inną i niezwiązaną z tym isse - fragmentacja nie dotyczy zawartości struktury folderów, ale zawartości pojedynczego pliku rozproszonego po talerzach dysku fizycznego (zamiast pojedynczej linii ciągłej), co zmniejsza odczyt / napisz wydajność takich plików. Zawartość dużych / głębokich / rozgałęziających się drzew folderów zwykle nie powinna być ciągła i przemieszczać się w ten sposób.
Peteris

Odpowiedzi:

21

Aby zrozumieć, w jaki sposób przenosi foldery, może być konieczne zrozumienie systemu plików w systemie Linux. Wszystkie pliki i foldery są przechowywane jako część struktury danych zwanej „i- węzłem ”. Każdy plik ma numer i-węzła, podobnie jak foldery.

Aby wyświetlić i-węzeł folderu, użyj polecenia ls -ial foldername. Pierwsza kolumna pokazuje numer i-węzła pliku. Dla każdego folderu istnieją dwie unikalne nazwy .i .., odpowiednio, katalog własny i katalog macierzysty.

Możesz spróbować przeprowadzić eksperyment, aby przenieść katalog (powiedzmy / home / me / source) z podkatalogami i plikami do innego katalogu (np. / Home / me / somewhere / else). Numer i-węzła / home / me / source i cała jego zawartość pozostają takie same przed i po przeprowadzce. Jedyną różnicą jest numer i-węzła .., który pierwotnie dzieli numer i-węzła / home / me, a teraz staje się numerem i-węzła / home / me / gdzieś / jeszcze. Mówiąc prosto, Linux aktualizuje link do źródła katalogu, a następnie jest wykonywany.

Zawartość dysku twardego i tak nie jest modyfikowana, tylko indeks i-węzła jest aktualizowany po przeniesieniu folderu. Nie dzieje się tak oczywiście w przypadku przeniesienia folderu do innej fizycznej lokalizacji.

Kenneth L.
źródło
3
Tak, o ile ruch nie przekracza granic systemu plików.
kojiro
3

Jeśli interesuje Cię sposób działania takich programów mvi programów cp, pamiętaj, że są to programy typu open source i możesz uzyskać najdokładniejsze wyjaśnienie, czytając kod. Tutaj znajdują się linki do wszystkich podstawowych narzędzi. W szczególności mv można znaleźć tutaj

Hugo Buff
źródło
6
you can get the most accurate explanation by reading through the code.Pozwolę sobie być innego zdania; Przez długi czas nie miałem absolutnie żadnego doświadczenia z C i nawet teraz nie lubię tego. Ponadto kod źródłowy jest często optymalizowany i zawiera więcej przypadków krawędzi niż jest to konieczne. Wyjaśnienie symboliczne często pomaga więcej.
Shelvacu
1
@shelvacu „zawiera więcej skrzynek niż potrzeba”. Solidny kod obsługuje wszystkie przypadki krawędzi, które mogą być obecne. Jednak prawdą jest, że przedstawienie wszystkich przypadków skrajnych w pierwszym objaśnieniu pojęcia może nie być konieczne.
OregonTrail
@OregonTrail Przepraszamy, o to mi chodziło, w kodzie jest więcej przypadków brzegowych niż potrzeba wyjaśnienia
Shelvacu
Cieszę się, że to był twój pierwotny sentyment, ale nadal wydawało się, że nie doceniałeś mojego nacisku na „ uchwyty ”. Dobrze napisany kod nie ma przypadków krawędzi, obsługuje przypadki krawędzi. ;) Wiem, że przybywasz tutaj z właściwego miejsca, ale powinieneś uważać na czasowniki.
OregonTrail,