rm рекурсія працює лише вниз правильно?
rm -r x yвидалить xі yвсе, що знаходиться всередині них (якщо вони довідники), але не їхні батьки чи що-небудь поза ними.
Запуск: sudo rm -R *.QTFSвидалить усі файли * .QTFS з поточного каталогу та його дітей, правильно?
Ні. Він видалить усі названі файли *.QTFS, будь-які файли, що рекурсивно всередині викликаються каталогів*.QTFS , і самі ці каталоги. Якщо ви хочете іншої поведінки видалення, скористайтеся find -delete.
поточний каталог, що видаються ls -lhaтакож містить .і ..посилання на відсутність кращого слова, так чому б не рекурсії слідувати цим вгору в дереві каталогів? Чи є межа штучного на ют додатка, або .і ..не реальні речі?
Це штучна межа Росії rm.
Це насправді не все так штучно, проте це єдиний спосіб, коли він міг би працювати. Якщо rmдотримуватися батьківських ..посилань, кожен rm -rвидаляє кожен файл у системі, дотримуючись усіх ..посилань аж до назад /. rmбачить ..і .записи в кожному каталозі, коли він перераховує вміст, і явно нехтує ними з цієї причини.
Насправді ви можете спробувати це самі. Запустити rm -r .і більшість rmреалізацій відмовляться діяти, явно повідомляючи про помилку:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(це повідомлення від GNUrm ; інші схожі). Коли він стикається з цими записами неявно, а не як явні аргументи, він просто ігнорує їх і продовжує продовжувати. Такої поведінки вимагає POSIX . У GNU rmта багатьох BSD це автоматично забезпечується fts_readсімейством ієрархічно-обхідних функцій.
або .і ..не є реальними речами?
.і, ..як правило, реальні записи каталогів, хоча це стосується файлової системи. Вони майже завжди будуть представлені так, ніби вони є реальними записами для всіх кодів користувача, незалежно. Багато частин програмного забезпечення (не тільки rm) спеціально розглядають свою поведінку, щоб зловити або запобігти втечі або небажаній рекурсії.