Является ли gzip атомарным?

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

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

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

Затем есть xterm и те, которые в какой-то степени эмулируют его, где они решили, что если приложение работает неправильно, вы можете, удерживая нажатой клавишу Shift, изменить действия мыши, именно так я копирую URL-адреса из aptitude, и однажды в голубой луне отправлять события мыши в кошку (Я думаю, что это все еще работает, я не делал этого годами ).

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

11
23.08.2019, 14:18
5 ответов

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

4
27.01.2020, 19:56

.txtфайлы, уже успешно обработанные gzip, будут заменены .txt.gzсжатыми файлами, поэтому вы можете безопасно запустить gzip *.txtснова -только файлы, которые еще не были обработаны, будут сжаты.

Файл, который обрабатывался gzip в момент нажатия клавиши Ctrl -C, не будет изменен -gzip не заменит его до после успешного сжатия.

3
27.01.2020, 19:56

Is gzip atomic?

Нет. Он создает сжатый файл, а затем удаляет несжатый оригинал.

В частности, он не сжимает файл на месте и существует период времени, когда файл сжимается,

  • сжатая цель неполная
  • частично сжатый файл и его источник существуют в файловой системе.

What happens if I stop the gzip process while it's in the middle of gzipping a file?

Если вы остановите процесс gzipперехватываемым сигналом(SIGINTот Ctrl C , например ), он очистит частично созданные файлы. В противном случае, в зависимости от точки остановки, вы можете получить частично сжатый файл вместе с нетронутым оригиналом.

If it's not atomic, if I already pressed Ctrl+C on a gzip *.txt process, how do i safely resume?

Вы удаляете частично сжатую версию (, если она все еще существует ), и перезапускаете gzip.

30
27.01.2020, 19:56

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

Если возникнет ошибка или вы прервете сжатие, исходный файл останется без изменений. Частично сжатый файл обычно удаляется.

Нет возможности возобновить его в середине, вы просто начинаете с самого начала.

15
27.01.2020, 19:56

Нет, это очень неатомарно. Это может привести к большим проблемам, если вы сжимаете файл, к которому время от времени добавляется добавление, например веб-журнал.

Gzip читает, создает файл.gz (с текущей отметкой времени ), копирует отметку времени исходного файла, затем удаляет оригинал.

Некоторые прерывания могут оставить незавершенный файл .txt.gzрядом с файлом .txt. Это создает проблему целостности данных. :Какой файл настоящий? Это

  • не удалось выполнить gzip, оставив неполный/поврежденный файл .txt.gz? Или
  • неудавшийся файл gunzip, оставивший неполный/усеченный .txtфайл? Или
  • Файл успешно заархивирован в txt.gzи недавно созданный файл .txt?

(В последний раз это происходит, когда вы заходите в каталог журнала HTTP и выбираетеgzip *).

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

К счастью, gzip обычно работает последовательно, поэтому у вас должна возникнуть эта проблема только с одним файлом. Распараллеливание gzip — плохая идея -, даже если он будет использовать ЦП более полно, он будет перегружать диск, заставляя читать несколько файлов одновременно, что сильно замедляет работу всех gzip. С другой стороны, SSD или RAM-диск...

0
27.01.2020, 19:56

Теги

Похожие вопросы