Извлекает ли 7zip данные во временный файл, а затем переименовывает временный файл в фактический целевой файл?

Извлекает ли 7zip данные во временный файл, а затем переименовывает временный файл в фактический целевой файл?

Я задаю этот вопрос, потому что я хотел бы иметь возможность распаковать архив, который может также содержать ту самую программу, которая вызывает 7zip для распаковки архива. Linux/UNIX позволяет удалять или переименовывать файл во время его использования, но не позволяет открывать его для записи.

решение1

Ответ да, и нет.

При использовании команды extract для 7zip не должно быть создано временного файла. Это происходит в Windows, хотя при использовании перетаскивания в Windows Explorer (взято из документации наhttp://www.7-zip.org/faq.html, ctl-f поиск temp).

Но у вас Linux.

Чтобы быть на 100% уверенным, что этого не произойдет в Linux, я создал, а затем распаковал большой архив и запустил программу через strace:

strace -a88 -- 7z e byob.7z 2>&1

Я видел только существующие файлы в текущем рабочем каталоге, которые были отключены перед перезаписью, и единственными доступными файлами были файлы в текущем рабочем каталоге.

Пожалуйста, проверьте сами, чтобы убедиться, что я ничего не упустил.

Надеюсь, это вам поможет.

решение2

Ваш вопрос касается исполняемого файла (или скрипта) file1, вызывающего механизм, который создает новый file1(в том же месте).

Насколько я понимаю, файловые системы в Unix требуют затирания, file1пока он открыт (для выполнения). Это происходит следующим образом: затирание приводит к file1отсоединению оригинала, но поскольку он открыт, он на самом деле не удаляется. Однако он больше не занимает имя file1в этом каталоге. Новый file1создается в отдельном месте (используя правильное имя). Когда старый file1завершает выполнение и выходит, он удаляется. file1Однако у вас должен остаться новый существующий.

Предостережение: Это в значительной степени догадки, основанные на моих частичных знаниях. Возможно, кто-то здесь с большим количеством концепций файловых систем подтвердит или исправит это. Между тем, я предлагаю вам воспринимать этот ответ только как теоретический и не основывать на нем свои решения без дальнейшей экспериментальной проверки.

Связанный контент