разность gzipped tarball против каталога?

Я отправлю это как ответ так, чтобы было некоторое разрешение, если это оказывается проблемой.

Статус выхода 0 означает нормальный выход из успешной программы. Программа выхода может выбрать любое целое число между 0 и 255 как его статус выхода. Традиционно, программы используют маленькие значения. Значения 126 и выше используются оболочкой для создания отчетов об особых условиях, поэтому лучше избегать их.

На уровне API C программы сообщают о 16-разрядном состоянии ¹, который кодирует и статус выхода программы и сигнал, который уничтожил его, если таковые имеются.

В оболочке, статус выхода команды (сохраненный в $?) объединяет фактический статус выхода программы и значения сигналов: если программа закрыта сигналом, $? установлен на значение, больше, чем 128 (с большинством оболочек, это значение 128 плюс число сигнала; ATT ksh использует 256 +, число сигнала и yash используют 384 + число сигнала, которое избегает неоднозначности, но другие оболочки не следовали примеру).

В частности, если $? 0, Ваша программа, из которой выходят обычно.

Обратите внимание, что это включает случай процесса, который получает SIGTERM, но имеет обработчик сигналов для него и в конечном счете обычно выходит (возможно, как косвенное последствие сигнала SIGTERM, возможно, не).


Для ответа на вопрос в заголовке SIGTERM никогда не отправляется автоматически системой. Существует несколько сигналов, которые отправляются автоматически как SIGHUP, когда терминал уходит, SIGSEGV/SIGBUS/SIGILL, когда процесс делает вещи, он не должен делать, SIGPIPE, когда он пишет в поврежденный канал/сокет и т.д. И существует несколько сигналов, которые отправляются из-за нажатия клавиши в терминале, главным образом SIGINT для Ctrl+C, SIGQUIT для Ctrl +\и SIGTSTP для Ctrl+Z, но SIGTERM не является одним из тех. Если процесс получает SIGTERM, некоторый другой процесс отправил тот сигнал.

¹ примерно разговор

6
15.07.2011, 22:08
3 ответа

Смонтируйте tarball как каталог, например, с AVFS. Затем используйте diff -r на реальном каталоге и точке, где tarball смонтирован.

mountavfs
diff -r ~/.avfs/path/to/foo.tar.gz\# real-directory
3
27.01.2020, 20:27
  • 1
    Что \# для? –  AnnanFay 03.10.2012, 20:59
  • 2
    @Annan AVFS выставляет содержание архива как каталог, имя которого является названием архивного файла с a # добавленный. Обратная косая черта является ненужной в большинстве оболочек. –  Gilles 'SO- stop being evil' 03.10.2012, 21:05

Оказывается, что tar GNU создали разность в (-d):

$ #Create the archive and a difference:
$ echo one>file1;echo two>file2;tar -czf archive.tgz file*;echo changing>>file1
$ tar -dzf archive.tgz
file1: Size differs

Если Вы работаете с tar, который не имеет этой попытки:

$ for F in `tar -tzf archive.tgz`;do tar -xzOf archive.tgz $F|diff --brief - $F;done
Files - and file1 differ
4
27.01.2020, 20:27

Вот новый инструмент: http://diffoscope.org/

Старый инструмент: http://tardiff.sourceforge.net/

0
27.01.2020, 20:27

Теги

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