Используйте это для вывода списка доступных пакетов:
apk search --update 'node*'
выберите один и установите его следующим образом:
apk add nodejs-lts --update
(1/4) Installing libgcc (5.3.0-r0)
(2/4) Installing libstdc++ (5.3.0-r0)
(3/4) Installing libuv (1.9.1-r0)
(4/4) Installing nodejs-lts (4.4.4-r0)
Вы можете использовать od
, чтобы получить числа из ] / dev / random
и / dev / urandom
.
Например,
2 байтовых десятичных целых числа без знака,
$ od -vAn -N2 -tu2 < /dev/urandom
24352
1 байтовое десятичное целое число со знаком,
$ od -vAn -N1 -td1 < /dev/urandom
-78
4 байта без знака десятичные целые числа,
$ od -vAn -N4 -tu4 < /dev/urandom
3394619386
человек od
для получения дополнительной информации о od
.
Некоторые оболочки (например, bash (1)
) имеют "переменную" $ RANDOM
, которая дает случайные числа.
Вы можете сделать что-то вроде:
perl -le '
while (q(
c char, C unsigned char, s! short, S! unsigned short,
i! int, I! unsigned int, l! long, L! unsigned long,
f float, d double,) =~ /(\S+) (.*?),/gs) {
$size = length(pack $1, 0);
sysread STDIN, $data, $size;
print "$2($size): " . unpack($1, $data);
}' < /dev/urandom
Что в 64-битной системе даст вам что-то вроде:
char(1): -98
unsigned char(1): 62
short(2): -12526
unsigned short(2): 399
int(4): 499066219
unsigned int(4): 2312134917
long(8): -4889591208978026255
unsigned long(8): 2080566823379835456
float(4): 55.4727554321289
double(8): 8.6395690272822e-05
Гораздо эффективнее работать со встроенными -модулями Bash, чем использовать внешние команды, такие как od
. Вот, например, как вы можете получить 60 -битное случайное число:
((RND=((RANDOM<<15|RANDOM)<<15|RANDOM)<<15|RANDOM))
Это даст случайное число в диапазоне от 0 до 1 152 921 504 606 846 975. Вы можете масштабировать это с делением по модулю до любого диапазона, который вы хотите.
В качестве практического примера, скажем, я хочу прочитать один случайный сектор с моего жесткого диска, чтобы вывести диск из состояния ожидания. Я могу это сделать:
#!/bin/bash
DEV=/dev/sda # Let's say that this is the device we want to spin up.
# Get the device geometry...
read -d- SIZE64 BS <<<$(blockdev --getsize64 --getbsz $DEV)
((SECTORS=SIZE64/BS)) # The total number of $BS-sized sectors on that device.
((RND=(RANDOM<<15|RANDOM)<<15|RANDOM)) # Generate a 45-bit random number.
((SECT=RND%SECTORS)) # The random sector that we will now read...
dd if=$DEV of=/dev/null bs=$BS skip=$SECT count=1 >/dev/null 2>&1
Готово.
(Примечание :В этом примере я решил, что 45 -битного случайного числа будет более чем достаточно, а также немного быстрее, чем 60 -бит.)
Обновление:
В качестве количественного подтверждения приведенного выше заявления о скорости:
~# time for i in {1..10000} ;do RND=$(od -An -N7 -tu8 /dev/urandom) ;done
real 0m45.647s
user 0m17.540s
sys 0m28.807s
~# time for i in {1..10000} ;do ((RND=((RANDOM<<15|RANDOM)<<15|RANDOM)<<15|RANDOM)) ;done
real 0m0.112s
user 0m0.105s
sys 0m0.007s