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


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.