Преобразование данных в формат на основе общих ключевых слов.

Специальная программа, о которой вы говорите, находится внутри initramfs ядра Linux. Initramfs содержит временную файловую систему / с дополнительными возможностями, необходимыми для монтирования реальной / файловой системы. В вашем случае он содержит, среди прочего, инструмент cryptsetup и скрипт (— специальную программу )для получения вашей парольной фразы.

Итак, чтобы выполнить то, что вы хотите, вам в основном нужно сделать ваш USB-диск разделом /boot вашей системы. /boot содержит ваше ядро ​​Linux, initramfs, GRUB2 stage2 и т. д.

Для ясности: вы по-прежнему будете загружаться со своего внутреннего диска, но GRUB2 будет переустановлен так, что он загрузит свою конфигурацию, другие этапы и ваше ядро ​​с вашего USB-диска. Процесс показан ниже, но прежде чем приступить к работе, убедитесь, что у вас есть альтернативный способ получить доступ к вашей системе, например, через LiveCD/USB-накопитель. Этот процесс изменит способ загрузки Linux, и если он пойдет не так, вы окажетесь без плана Б.

  1. Используя fdisk /dev/sdX(, где sdX — это USB-диск ), создайте раздел на USB-диске.
  2. Отформатируйте вышеупомянутый раздел в файловой системе Linux (, такой как ext2, 3 или 4 ). Бывший.mkfs.ext3 /dev/sdX1
  3. Сделайте резервную копию существующего файла /boot. Это важно, так что лучше перестраховаться, чем потом сожалеть. Например,pushd /boot; tar -cvzf /root/boot-backup.tar.gz.; popd
  4. Где-нибудь смонтируйте новую файловую систему и скопируйте в нее содержимое текущей /boot.
  5. Размонтируйте новую файловую систему и повторно -смонтируйте ее как новую /boot, обновив /etc/fstab, пока вы это делаете. Для следующего шага необходимо смонтировать новый /boot.
  6. Повторно -установите GRUB2, используя ту MBR, которая в данный момент переустановлена ​​в:grub-install /dev/sdY. Причина, по которой его необходимо переустановить, заключается в том, что вы изменили расположение /boot.Эта команда также установит файлы в /boot/grub, поэтому ее необходимо смонтировать (и создать резервную копию ).
  7. Восстановить файл конфигурации GRUB2:grub-mkconfig -o /boot/grub/grub.cfg
  8. Просмотрите сгенерированный файл конфигурации в /boot/grub/grub.cfg . Вы должны увидеть ссылку на USB-диск (. Я не помню, использует ли он UID диска или файловой системы ).

Проверьте установку, загрузившись с подключенным USB-накопителем. Затем попробуйте загрузиться без USB-накопителя; что не должно работать.

-1
24.05.2019, 21:12
3 ответа

глазеть:

BEGIN{

    # split by, or.mp4
    FS=",|\\.mp4"

    # sort array by numeric value
    PROCINFO["sorted_in"] = "@val_num_asc"
}

# store count in a, store others as key, value pair in d[keyword]
{ a[$2]++; d[$2][$3]= $1 }

END{
    for( keyword in d ){
        printf( "a:%d:{", a[keyword] )
        for( i in d[keyword] )
            printf( "i:%d;s:4:\"%d\";", i-1, d[keyword][i] )
        printf( "}\n" )
    }
}

обновление

Для сохранения порядка ключевых слов:

BEGIN {
    # split by, or.mp4
    FS=",|\\.mp4"

    # sort array by numeric value
    PROCINFO["sorted_in"] = "@val_num_asc"
}

{
    # insert next ordered number into loop_order upon new keyword
    if(!($2 in d))
        loop_order[k++] = $2

    # store count in a, store others as key, value pair in d[$2]
    a[$2]++; d[$2][$3]= $1
}

END{
    for (j = 0; j < length(loop_order); ++j) {
        keyword = loop_order[j]
        printf( "a:%d:{", a[keyword] )
        for( i in d[keyword] )
            printf( "i:%d;s:4:\"%d\";", i-1, d[keyword][i] )
        printf( "}\n" )
    }
}
2
28.04.2021, 23:33

Вот один из способов сделать это -используя хэш -из -хэшей в Perl:

perl -F, -lne '
  ($k,$i) = split(/\.mp4/, $F[1]); 
  $s{$k}->{$i-1} = $F[0]
  }{
  foreach $k (keys %s) {
    $hr = $s{$k};
    printf "a:%d:{", keys %$hr;
    foreach $i (sort {$a <=> $b} keys %$hr) {
      printf "i:%d;s:4:\"%s\";", $i, $hr->{$i}; 
    }
    printf "}\n";
  }  
' file
a:1:{i:0;s:4:"12334";i:1;s:4:"12335";i:2;s:4:"12336";}
a:0:{i:0;s:4:"12347";i:1;s:4:"12348";}

«Внешний» хэш %sвводится на ключевом слове, в то время как внутренние анонимные хэши вводятся на основе числового значения суффикса (минус один )и имеют значения, взятые из первого поля, разделенного запятыми, линия.

Обратите внимание, что внешний хэш не отсортирован, поэтому порядок строк вывода не гарантируется.

1
28.04.2021, 23:33

Это выходной формат php serialize(), поэтому:

php -r '
  while ($line = fgets(STDIN)) {
    $n = strtok($line, ",");
    $image = strtok(".\n");
    $a[$image][] = $n;
  }
  foreach ($a as $v) echo serialize($v). "\n";' < file.list

По вашему мнению, это дает:

a:3:{i:0;s:5:"12334";i:1;s:5:"12335";i:2;s:5:"12336";}
a:2:{i:0;s:5:"12347";i:1;s:5:"12348";}

(обратите внимание на s:5вместо s:4, поскольку эти строки имеют длину 5 байтов, а не 4 ).

Чтобы отсортировать список массивов на основе ключевого слова (лексически ), вставьте ksort($a);перед циклом foreach, тогда массив для catsбудет отображаться перед массивом для dogimageпотому что catsлексически предшествует dogimage.

Или, возможно, сериализовать весь ассоциативный массив, чтобы не потерять информацию о том, какой массив соответствует какому ключевому слову, например:

php -r '
  while ($line = fgets(STDIN)) {
    $n = strtok($line, ",");
    $image = strtok(".\n");
    $a[$image][] = $n;
  }
  echo serialize($a). "\n";' < file.list

Что дает:

a:2:{s:8:"dogimage";a:3:{i:0;s:5:"12334";i:1;s:5:"12335";i:2;s:5:"12336";}s:4:"cats";a:2:{i:0;s:5:"12347";i:1;s:5:"12348";}}
2
28.04.2021, 23:33

Теги

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