Мені завжди було цікаво, чому команда для видалення всього в каталозі rm -rf.
Чому немає прапорів, щоб зробити те саме rmdir?
Чи не було б інтуїтивніше використовувати rmdirдля операцій з каталогами?
Мені завжди було цікаво, чому команда для видалення всього в каталозі rm -rf.
Чому немає прапорів, щоб зробити те саме rmdir?
Чи не було б інтуїтивніше використовувати rmdirдля операцій з каталогами?
Відповіді:
На початку файлової системи Unix (принаймні назад, за V7 днів до 1970 року) каталоги реалізовувались як спеціальні файли, і лише корінь міг використовувати mknod(2)системний виклик, який їх створив, і лише корінь міг unlink(2)мати спеціальний файл каталогу.
Ці засоби захисту існували для того, щоб підтримувати структуру файлової системи. Наприклад, якщо користувачеві було дозволено записувати в спеціальний файл каталогу, він може зробити його батьківський каталог ..вказувати на себе (конкретно на власний i-вузол). Це створило б циркулярну посилання у файловій системі, яка була б поганою річчю. Звичайно, є й інші невідповідності, які можна зробити, це лише чіткий приклад.
Послідовність підтримувались такими програмами, як користувальницький простір, mkdir(1)і rmdir(1)які були коренем Set-UID, щоб вони могли робити привілейовані системні виклики від імені непривілейованого користувача. Коли до рекурсії було додано rm(1), команда delete буде виконуватись як поточний UID, а потім викликати rmdir(1)виключно для видалення порожніх каталогів. Це все ще досить стандартний метод підвищення дозволу: не використовуйте більше дозволів, ніж вам потрібно.
Через деякий час mkdir(2)і rmdir(2)були додані в якості своїх власних системних викликів , але співвідношення між rm(1)і rmdir(1)залишається.
Особисто мені здається, що це більше задовольняє rmdir junkта знаю, що найгірше, що я зробив, - це видалити порожній каталог.
rmdir, вона все одно потребуватиме -rпрапор. ( rmdir -r junkзамість rm -r junk, і rmdir junkдосі працює лише у випадку, якщо каталог порожній)
Це історично. rmбуло зроблено для видалення посилань на файли, rmdirробилося для видалення каталогів, паралельних до mkdir. Багато років тому Unix rmміг видаляти каталоги лише шляхом виклику rmdir. Також не було rmdir(2)системного виклику, rmdirбула програма, яка дзвонила unlink(2).
Список літератури:
Зрозуміло, це питання, але rmвидаляє файли, rmdirвидаляючи каталоги. Каталог - це файл, але файл особливого типу, тому їх має сенс rmвидаляти, але обробляти їх спеціально (тобто вимагати додаткової опції для активації.) З іншого боку, не всі файли - це каталоги, і немає сенсу IMHO rmdirвидаляти щось, що не є каталогом.
rmвидалити порожній каталог (за винятком рекурсивного режиму)?
-rпрапор, щоб увімкнути функцію спеціального файлу каталогу.
rmdirвидаляє каталоги,rmвидаляє. Чому було б інтуїтивно зрозумітиrmdirвидалення не-каталогів?