rm rekurencja działa tylko w dół, prawda?
rm -r x yusunie xi ywszystko w nich (jeśli są to katalogi), ale nie ich rodzice ani nic poza nimi.
Uruchamianie: sudo rm -R *.QTFSusunie wszystkie pliki * .QTFS z bieżącego katalogu i jego dzieci, prawda?
Nie. Spowoduje to usunięcie wszystkich nazwanych plików *.QTFS, wszystkich plików rekurencyjnie w wywoływanych katalogach*.QTFS i samych tych katalogów. Jeśli chcesz inne zachowanie związane z usuwaniem, użyj find -delete.
bieżący katalog wyświetlany przez ls -lhazawiera także .i ..linki z powodu braku lepszego słowa, więc dlaczego rekurencja nie podąża za nimi w drzewie katalogów? Czy istnieje granica sztuczna na rm aplikacji, albo .i ..nie są prawdziwe rzeczy?
To sztuczny limit rm.
Nie jest to jednak wcale takie sztuczne - to jedyny sposób, w jaki mógłby kiedykolwiek działać. Jeśli rmpodążą za ..linkami nadrzędnymi , każdy rm -rusunie każdy plik w systemie, podążając za wszystkimi ..linkami z powrotem do /. rmwidzi wpisy ..i .w każdym katalogu, gdy wyświetla zawartość, i jawnie je ignoruje z tego powodu.
W rzeczywistości możesz to wypróbować. Uruchom, rm -r .a większość rmimplementacji odmówi działania, jawnie zgłaszając błąd:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(ta wiadomość pochodzi z GNUrm ; inne są podobne). Kiedy napotyka te wpisy niejawnie, a nie jako wyraźne argumenty, po prostu je ignoruje i kontynuuje. Takie zachowanie jest wymagane przez POSIX . W GNU rmi wielu BSD jest on dostarczany automatycznie przez fts_readrodzinę funkcji przechodzących przez hierarchię.
lub .i ..czy nie są prawdziwe?
.i ogólnie.. są to prawdziwe wpisy katalogu, chociaż jest to specyficzne dla systemu plików. Prawie zawsze będą prezentowane tak, jakby były prawdziwymi wpisami do całego kodu użytkownika, niezależnie od tego. Wiele programów (nie tylko ) specjalizuje się w ich zachowaniu w celu wychwycenia lub uniknięcia niekontrolowanej lub niepożądanej rekurencji.rm