Яка ідея, що rm не видаляє незаписаний файл за замовчуванням?


13

Яка ідея, що rm не видаляє незаписаний файл за замовчуванням? Кожен раз, коли ви хочете видалити файл, який не є записаним для поточного користувача, але у вас є дозвіл на запис у каталозі, отримуйте це попередження, і вам потрібно натиснути y, щоб підтвердити видалення:

rm: remove write-protected regular file 

Цікаво, чому такі файли, що не записуються, трактуються таким особливим чином? Одне, що мені спадає на думку, - такі файли, як правило, налаштовані користувачем файли, що містять секретні дані користувача, такі як зашифрований пароль, тому rm попереджає їх перед видаленням. Тепер, яка реальна причина?

Відповіді:


16

Це тому, що поведінка UNIX в цьому випадку трохи неінтуїтивно зрозуміла. Багато людей дуже здивовані, коли вони відзначають файл лише для читання, і хтось може його видалити. Для видалення файлу вам потрібні лише дозволи на запис. rmвимагає від вас ввічливості, якщо ви сподівалися, що вона буде прочитана - це захистить її.

Використання -f(сила) змусить це зробити, не домагаючись вас. Але використовуйте це обережно.


будьте обережні, набираючи "rm -rf *", подумайте.
ChuckCottrill

4
Мій друг називає це "Швидко читайте пошту". :)
kurtm

0

Я вважаю, що ви вірно ставитесь до цього підказу, оскільки це не потрібно писати. Якщо ви видаляєте незаписаний файл, ви насправді пишете в цей файл. Якщо ви не хочете, щоб вас запросили, ви завжди можете створити псевдонім, який говорить, що rm насправді є rm -f.


Я не думаю, що я правильно зрозумів вашу відповідь. Цікаво, чому rm в першу чергу видає таке попередження, чому читаються лише файли, які трактуються інакше, ніж файли, що записуються. Я знаю, коли з’являється це попередження, мені цікаво, чому.
користувач1042840

Тому що якщо ви встановите щось для читання, це не припускає, що це буде змінено. Це включає видалення. Якщо ви користуєтеся коренем і скажіть йому, щоби видалити файл лише для читання, він хоче підтвердити, що ви не помиляєтесь. Це змушує переосмислити свій вибір.
Jeight

1
@Jeight Це насправді не правильно. Ви не пишете у файл під час видалення. Ви пишете в каталог, що містить.
куртм

@kurtm Ви маєте рацію. Це був помилковий помилок, але основні міркування ті ж.
Jeight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.