Я задаю этот вопрос, потому что я хотел бы иметь возможность распаковать архив, который может также содержать ту самую программу, которая вызывает 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
Однако у вас должен остаться новый существующий.
Предостережение: Это в значительной степени догадки, основанные на моих частичных знаниях. Возможно, кто-то здесь с большим количеством концепций файловых систем подтвердит или исправит это. Между тем, я предлагаю вам воспринимать этот ответ только как теоретический и не основывать на нем свои решения без дальнейшей экспериментальной проверки.