Коли файл буде переміщено, а цільовий файл вже існує та читається в даний час, чи вдасться виконати операцію? Чи буде це залежати від того, як довго триває операція зчитування файлу призначення?
Коли файл буде переміщено, а цільовий файл вже існує та читається в даний час, чи вдасться виконати операцію? Чи буде це залежати від того, як довго триває операція зчитування файлу призначення?
Відповіді:
Операція читання буде успішною, незалежно від часу, необхідного для завершення операції зчитування.
Чому і як це працює?
Коли починається операція читання, Inode файлу використовується як ручка, з якої зчитується вміст файлу.
При переміщенні іншого файлу до цільового файлу результатом буде новий inode, що означає, що фізичний вміст файлу на диску буде розміщений десь в іншому місці, і вихідний вміст файла, який читається, не буде торкатися.
Єдине, що у них є спільним, - це шлях / ім'я файлу, в той час як основні місця розташування inode та phyiscal на диску змінюються.
Після завершення операції читання (якщо жоден інший процес все ще не має відкритого файлу для старого файлу і немає інших жорстких посилань, що посилаються на його вклад), старі дані будуть відкинуті.
Після завершення переміщення у файлі з'явиться новий номер індексу inode.
Ви можете відобразити індексний номер файлу для індексу, використовуючи ls -i /tmp/some-file
.
З тієї ж причини, що описана вище, можна видалити файли, які все ще використовуються додатком, оскільки програми, що використовують цей файл, просто зчитуються з inode (вказуючи на фактичний вміст файлу на диску), тоді як посилання на файли у файловій системі видаляється.