Безопасное сжатие файла tar во время его обновления - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно сжать файл на Linux, используя tar из потока в процессе. Файл обновляется, как раз в секунду.

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

tar -cvzf /destination/compressed_files.tar.gz /directory/to/archive

Она работает хорошо. Проблем не найдено. Но у меня есть следующий вопрос:

Основной вопрос:
Я пытаюсь быть немного безопаснее и надежнее с моим кодом. Является ли вышеуказанный способ безопасным "в перспективе команды tar". Неявно ли tar заботится о том, что файлы обновляются и сжимают все, что возможно? Создает ли tar копию содержимого для внутреннего использования?

Вторичный вопрос:
Я обнаружил, что следующий способ является также и для tar

    tar -cvzf /destination/compressed_files.tar.gz -C /destination /directory/to/archive

Похоже -C опция меняет каталог? Безопаснее ли использовать -C здесь?

1 Ответ

1 голос
/ 07 апреля 2020

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

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

In Вообще, было бы лучше не полагаться на это. Типичный подход состоит в том, чтобы «свернуть» файл очень часто, закрыв старый и начав писать новый. Затем вы можете архивировать только «полные» файлы, которые автор закрыл (и, возможно, переименовал, чтобы указать, что они завершены).

...