Специальная программа, о которой вы говорите, находится внутри initramfs ядра Linux. Initramfs содержит временную файловую систему / с дополнительными возможностями, необходимыми для монтирования реальной / файловой системы. В вашем случае он содержит, среди прочего, инструмент cryptsetup и скрипт (— специальную программу )для получения вашей парольной фразы.
Итак, чтобы выполнить то, что вы хотите, вам в основном нужно сделать ваш USB-диск разделом /boot вашей системы. /boot содержит ваше ядро Linux, initramfs, GRUB2 stage2 и т. д.
Для ясности: вы по-прежнему будете загружаться со своего внутреннего диска, но GRUB2 будет переустановлен так, что он загрузит свою конфигурацию, другие этапы и ваше ядро с вашего USB-диска. Процесс показан ниже, но прежде чем приступить к работе, убедитесь, что у вас есть альтернативный способ получить доступ к вашей системе, например, через LiveCD/USB-накопитель. Этот процесс изменит способ загрузки Linux, и если он пойдет не так, вы окажетесь без плана Б.
fdisk /dev/sdX
(, где sdX — это USB-диск ), создайте раздел на USB-диске. mkfs.ext3 /dev/sdX1
pushd /boot; tar -cvzf /root/boot-backup.tar.gz.; popd
grub-install /dev/sdY
. Причина, по которой его необходимо переустановить, заключается в том, что вы изменили расположение /boot.Эта команда также установит файлы в /boot/grub, поэтому ее необходимо смонтировать (и создать резервную копию ). grub-mkconfig -o /boot/grub/grub.cfg
Проверьте установку, загрузившись с подключенным USB-накопителем. Затем попробуйте загрузиться без USB-накопителя; что не должно работать.
глазеть:
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" )
}
}
Вот один из способов сделать это -используя хэш -из -хэшей в 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
вводится на ключевом слове, в то время как внутренние анонимные хэши вводятся на основе числового значения суффикса (минус один )и имеют значения, взятые из первого поля, разделенного запятыми, линия.
Обратите внимание, что внешний хэш не отсортирован, поэтому порядок строк вывода не гарантируется.
Это выходной формат 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";}}