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