awk -F, -vOFS=, '$2 ~ /\.app$/ { for (i = NF + 1; i > 2; --i) $i = $(i-1); $2 = "INVALID" } 1' file >newfile
Это создаст newfile
из file
. Команда awk
устанавливает разделитель поля ввода и вывода в виде запятой, а затем проверяет значение второго столбца на соответствие регулярному выражению, которое соответствует строке .app
в конце значения. Если тест проходит успешно, поля записи сдвигаются вправо на один шаг, освобождая место для строки INVALID
в качестве нового второго поля.
Завершающую строку 1
можно заменить на { print }
(, так будет выводиться каждая строка ).
С данным примером данных выходной файл будет содержать
DOM,PROJ,APP,USER,DATE,TIME,STATUS
www,test,biz.app,bob,6-1-18,09:33,OK
www,INVALID,biz.app,tony,7-11-17,06:22,ok
cryptsetup
расшифровка устройства LUKS2 плохо документирована и включает несколько невероятно плохой выбор дизайна, который поможет вам уничтожить ваши данные.
Проблема, описанная в OP, заключается в том, что cryptsetup
предполагается, что вы используя отдельный заголовок, но нигде четко не указывает это. Это не включает любые базовые проверки работоспособности, чтобы предотвратить эту ошибку, и их тесты не покрывают этот сценарий.
Если вы отметите, тесты для этого используют устройство, созданное с отсоединенным заголовком. Также похоже, что они тестируют только онлайн-расшифровку, хотя команда позволяет автономная расшифровка.
Я протестировал дешифрование для устройства LUKS2 с отсоединенным заголовком, и оно сработало. После расшифровки было обнаружено, что раздел отформатирован в файловой системе ext4.
Обратите внимание, что для cryptsetup было бы тривиально проверить, что устройство уже заголовок и, по крайней мере, предупредить пользователя, что это так. В автономном режиме это может также легко определить, что зашифрованное блочное устройство также было передано в качестве --header
и либо обработайте это изящно, либо откажитесь продолжать. Но это не так.
Расшифровка (возможна только в автономном режиме )работает для LUKS1, но для этого вам не используйте cryptsetup reencrypt --decrypt
(, что само по себе сбивает с толку использование ), а вместо этого необходимо использовать отдельную команду с именем cryptsetup-reencrypt
. Эта команда поддерживает LUKS1, но не LUKS2, естественно. Что еще хуже, по крайней мере, в Fedora эта команда упакована не как часть cryptsetup
, а как отдельный пакет cryptsetup-reencrypt
, который не устанавливается по умолчанию.
Резюме:
--header
не вызовет ошибки, и cryptsetup приступит к тихому уничтожению ваших данных. cryptsetup-reencrypt
для расшифровки. Я не проверял это, но это должно работать. Я пытался сообщить об этой проблеме вверх по течению, но gitlab не позволяет пользователям, которые пытаются зарегистрироваться с некоторой анонимностью.