Переміщення файлу у файл, який читається


10

Коли файл буде переміщено, а цільовий файл вже існує та читається в даний час, чи вдасться виконати операцію? Чи буде це залежати від того, як довго триває операція зчитування файлу призначення?

Відповіді:


9

Операція читання буде успішною, незалежно від часу, необхідного для завершення операції зчитування.

Чому і як це працює?

Коли починається операція читання, Inode файлу використовується як ручка, з якої зчитується вміст файлу.

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

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

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

Після завершення переміщення у файлі з'явиться новий номер індексу inode.

Ви можете відобразити індексний номер файлу для індексу, використовуючи ls -i /tmp/some-file.

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


1
Ви забули згадати жорсткі посилання: Коли операція зчитування завершиться, якщо ця індея пов'язана з іншим записом каталогу, дані не будуть видалені (тому що вона все ще має назву).
cjm

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