Як iOS технічно видаляє файл і чи його потенційно можна відмінити?


11

У нас тут цікава дискусія щодо видалення файлів на пристроях iOS. Питання: якщо я видаляю файл за допомогою NSFileManager, що відбувається під кришкою?

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

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

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

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

Зауважте, що ми не говоримо про криміналістичний аналіз флешки, який, можливо, може відновити вихідний вміст файлу.

Отже, резюмувати:

  • Як видалення файлу на iOS працює внутрішньо?
  • Чи перешкоджає перезаписати підхід?

Відповіді:


3

Я вірю, що в Unix файлова система змінюється, як ви пропонуєте (запис видалено з таблиці файлової системи). У Windows таблиця файлової системи модифікована, а файл просто позначений як видалений - засоби відновлення даних можуть відновити файл. Переглянувши додатки для видалення Windows, я думаю, що ім’я файлу також змінено, тому, коли ви відміняєте, вам потрібно вказати правильне ім'я файлу. Змінення імені файлу означало б, якщо ви створили файл з тим самим іменем, що і той, який ви тільки що видалили, ОС не повинен був би узгоджувати, що два файли з тим самим іменем.

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

Якщо ви створите новий файл з тим же ім'ям, що і старий, в Unix це просто новий запис у таблиці системних файлів, але оскільки старий запис був видалений із таблиці, не було б переваги для створення новий запис.

Це моє переконання, і я готовий до натиску зменшених голосів ;-)


Ви, безумовно, маєте рацію щодо кошика для ОС X. Це просто спеціальна папка, нічого іншого. І ви насправді можете бачити його як папку під домашнім каталогом, коли робите видимі свої невидимі файли.
Can Sürmeli
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.