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

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

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

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

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

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

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

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

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

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

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