Перемещение файла в файл, который читается


10

Будет ли операция выполнена, когда файл перемещен, а целевой файл уже существует и в данный момент читается? Зависит ли это от того, как долго длится операция чтения файла назначения?

Ответы:


9

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

Почему и как это работает?

Когда начинается операция чтения, Inode файла используется как дескриптор, из которого читается содержимое файла.

При перемещении другого файла в целевой файл, результатом будет новый индекс, то есть физическое содержимое файла на диске будет размещено где-то еще, а исходное содержимое читаемого файла не будет затронуто.

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

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

Как только операция перемещения завершится, у файла будет новый индексный индекс.

Вы можете отобразить индексный номер файла с помощью ls -i /tmp/some-file.

По той же причине, что и описанная выше, возможно удалить файлы, которые все еще используются приложением, поскольку приложения, использующие этот файл, просто будут читать из inode (указывая на фактическое содержимое файла на диске), пока ссылка на файл в файловой системе удаляется.


1
Вы забыли упомянуть жесткие ссылки: когда операция чтения завершится, если этот индекс будет связан с другой записью каталога, данные не будут удалены (поскольку у них все еще есть имя).
CJM

Спасибо за указание на это, отредактировал мой ответ и добавил его.
Элиас Пробст
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.