Вывести количество строк файла в первую строку этого файла

GRUB не (в настоящее время )не поддерживает LUKS2, поэтому /boot не может быть зашифрован LUKS2.

cryptsetup (начиная с версии 2.1.0 )по умолчанию создает LUKS2, если иное не указано упаковщиком дистрибутива. Так что в настоящее время ArchLinux по умолчанию создает контейнеры LUKS2.

https://gitlab.com/cryptsetup/cryptsetup/blob/master/docs/v2.1.0-ReleaseNotes:

Cryptsetup 2.1 version uses a new on-disk LUKS2 format as the default LUKS format and increases default LUKS2 header size.

The legacy LUKS (referenced as LUKS1) will be fully supported forever as well as a traditional and fully backward compatible format.

When upgrading a stable distribution, please use configure option --with-default-luks-format=LUKS1 to maintain backward compatibility.

Вы можете проверить, используется ли LUKS2 по умолчанию для вашей разновидности cryptsetup:

$ cryptsetup --help
[...]
Default compiled-in metadata format is LUKS2 (for luksFormat action).

Default PBKDF for LUKS2: argon2i
    Iteration time: 2000, Memory required: 1048576kB, Parallel threads: 4

Как правило, нет веских причин избегать LUKS2, если вы знаете о предостережениях (, таких как совместимость с GRUB или чрезмерное использование ОЗУ на этапе luksOpen ).

Если по какой-либо причине вы хотите использовать LUKS1, просто укажите его:

# cryptsetup luksFormat --type luks1 /dev/sdx9

-1
21.06.2020, 16:54
3 ответа

Хм-м-м, похоже на сеанс "много -кошачьих -снятия шкуры". Предполагая, что требуется только исходное количество строк, как насчет....

sed 1i$(< file wc -l) file

или

sed 1i$(sed -n "$=" file ) file

просто sed -i 1i....сделать изменение постоянным

1
18.03.2021, 23:25

Использование GNU sed, , если количество строк для файла до добавления строки счетчика:

sed -i -n '1h;1!H;${=;x;p}' file

Как это работает:

  1. -n:отключить печать по умолчанию.

  2. 1h;1!H;:переместить каждую строку в hстарый буфер. (Простое Hсамо по себе почти сработало бы, но оно также привело бы к нежелательной пустой строке.)

  3. ${=;x;p}:когда sedдостигает последней строки, вывести количество строк =. Затем e xзамените полностью загруженный буфер хранения буфером шаблона и распечатайте его.

0
18.03.2021, 23:25

awk раствор:

Добавить после последней строки очень просто:

awk '1; END{print NR}' file

Мы можем использовать tac, чтобы добавить его в первую строку:

tac file | awk '1; END{print NR}' | tac

Это имеет то преимущество перед другими решениями, что файл открывается только один раз.


Альтернативаawk-only немного сложнее, нам нужно передать файл дважды, сначала для подсчета строк, затем для печати NR в начало:

awk 'FNR!=NR{if(FNR==1)print NR-1;print;}' file file

Другаяawk-единственная альтернатива (может быть только GNU):

awk -ireadfile 'NR==1{print split(readfile(FILENAME), l, "\n")-1}1' file
0
18.03.2021, 23:25

Теги

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