Próbowałem usunąć „.” informator. Myślałem, że mogę po prostu usunąć mój katalog roboczy bez konieczności przechodzenia do katalogu nadrzędnego.
Celem mojego pytania jest poszukiwanie wglądu w działanie systemu Linux do usuwania plików.
filesystems
directory
rm
Goldname
źródło
źródło
rm .
irmdir .
nie działa, ale dlaczego określono je jako niedziałające, niezależne od fizycznego istnienia twardego łącza.rm -rf .*
to tylko nie tylko,.
ale także..
, a potem../..
, a potem…Odpowiedzi:
Usunięcie bieżącego katalogu nie wpływa na integralność systemu plików ani jego logiczną organizację. Zapobieganie
.
usuwaniu odbywa się zgodnie ze standardem POSIX, który stwierdza narmdir(2)
stronie podręcznika:Jedno uzasadnienie można znaleźć na
rm
stronie podręcznika:Z drugiej strony, jawne usunięcie bieżącego katalogu (tj. Poprzez podanie jego pełnej lub względnej ścieżki) jest dozwoloną operacją w systemie Unix, przynajmniej od SVR3, ponieważ było to zabronione w systemie Unix w wersji 7 do SVR2. Jest to bardzo podobne do tego, co dzieje się po usunięciu pliku, który jest aktywnie odczytywany lub zapisywany. Procesy uzyskujące dostęp do pliku usuwania kontynuują operacje odczytu i zapisu, tak jakby nic się nie wydarzyło. Po usunięciu bieżącego katalogu procesu ten katalog nie jest już dostępny, ale jego i-węzeł pozostaje w systemie plików, dopóki proces nie umrze lub nie zmieni własnego katalogu.
Zauważ, że proces nie będzie mógł użyć ścieżki względem bieżącego katalogu do zmiany cwd (np.
cd ..
), Ponieważ nie ma już..
wpisu w jego bieżącym katalogu.Kiedy rodzaj ktoś
rmdir .
, oni prawdopodobnie oczekują, że aktualny wpis do katalogu zostać usunięty, ale kiedy katalog jest usuwana (przy użyciu jego ścieżki), trzy wpisy w katalogach są faktycznie usunięte,.
,..
, a katalog sam.Usunięcie tylko
.
tego katalogu, a nie wpisu tego katalogu, spowodowałoby utworzenie katalogu niezgodnego, ale jak już wspomniano, jest to zabronione przez standard.Jak słusznie zauważył @Emmanuel, istnieje drugi powód, dla którego usunięcie
.
jest niedozwolone. Istnieje co najmniej jeden system operacyjny zgodny z POSIX (Mac OS X z HFS +), który z silnymi ograniczeniami obsługuje tworzenie twardych dowiązań do istniejących katalogów. W takim przypadku z katalogu nie ma jasnego sposobu, aby dowiedzieć się, który hardlink ma zostać usunięty.źródło
..
do niego. Jest to wyjątkowy przypadeklink count > 2
przytłaczającej większości systemów operacyjnych i systemów plików, więc „niektóre systemy plików i / lub systemy operacyjne” to mało powiedziane. Jedynym nie znanym historycznie wyjątkiem jest Mac OS X z HFS +, który dodaje ograniczenia dotyczące tego, kto i co można zrobić. Przyznano, że komentarz POSIX jest skierowany do tej osobliwości. Zobacz unix.stackexchange.com/questions/22394/…rm -r .*
wcześniej i rekurencyjnie zniszczyło wszystko w katalogu nadrzędnym ... To było ponad dekadę lub dwie temu, ale miło jest wiedzieć,rm
że już na to nie pozwala.Robi się to tak, aby zachować integralność, ponieważ obecnie znajdujesz się w tym katalogu, a
.
jest to tylko odnośnik.Musisz albo przejść do jego obiektu nadrzędnego, albo wywołać
rmdir
jego ścieżkę, co można zrobić za pomocą:Jeśli często tego potrzebujesz, możesz ustawić alias:
.. które można nazwać
rmc
samodzielnie, aby usunąć bieżący katalog.źródło
rmdir .
polecenie narusza integralność systemu plików w sposób,rmdir $(pwd)
czyrmdir "$PWD"
nie?rm *
i co rozumiesz przez historię powłok? 2. Odpowiedź dotyczyła części dlaczego , 3. Chcesz opracować?rmdir $(pwd)
,pwd
na przykład wymyśla logiczną nazwę bieżącego katalogu,/foo/bar/baz
a następniermdir
, widząc tę ścieżkę, usuwabaz
wpis z/foo/bar
katalogu, pod warunkiem spełnienia warunków. To ma sens. Zrmdir .
drugiej strony polecenie jest instrukcją usuwania.
wpisu z bieżącego katalogu, co nie jest ani dozwolone (naruszałoby ograniczenie, że każdy katalog ma.
wpis skierowany do siebie), ani użyteczne (nie usuwa łącza ty chciał usuwane).