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
) спеціально розглядають свою поведінку, щоб зловити або запобігти втечі або небажаній рекурсії.