Создание устройства, подобного/dev/random из сценария

[

]Видимо, это проблема/осложнение было введено в версию Samba, включенную (по крайней мере) в первоначальный релиз Ubuntu 12.04. Я не знаю, было ли обновление для 12.04, чтобы исправить это -- обновления кажутся недоступными для Udoobuntu.[

] [

]Я решил это, следуя []Комментарию #17[] из ошибки пусковой площадки [] "доступ запрещен принтерам Samba после точного обновления"[]. [

] [

]Выдержка из сервера smb.conf:[

] [

[global]
   map to guest = bad user
########## Printing ##########
   load printers = yes
   printing = cups
   printcap name = cups
   use client driver = yes

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   public = yes
   guest ok = yes
   read only = yes
   create mask = 0700

] [

]Казалось, что ключ был [] использовать клиентский драйвер = да[].[

].

1
28.01.2015, 00:32
2 ответа

На самом деле невозможно сделать устройство без помощи ядра (написав свой собственный модуль драйвера ядра); хотя существует FUSE, и менее известная и не очень поддерживаемая CUSE для символьных устройств в пользовательском пространстве, а для блочных устройств можно использовать NBD.

Если достаточно быть похожим, можно использовать именованные каналы, используя mkfifo, а затем запустить какой-нибудь процесс, который записывает "случайные" данные на это устройство, позволяя другим процессам считывать с него те же самые данные. Вы могли бы заменить /dev/random и /dev/urandom на такой именованный канал, и большинство программ с удовольствием читали бы из него свои "случайные" данные, так как немногие программы думают, что они действительно разговаривают с реальным случайным устройством. (до тех пор, пока случайный ioctl не получит более широкое применение)

# mkfifo /dev/foobar
# while true; do dd if=/dev/urandom of=/dev/foobar; done &
# hexdump -C -n 16 /dev/foobar
00000000  ec ec 91 4b 9a 62 95 b0  95 7f 44 16 21 8d cd de  |...K.b....D.!...|
2
27.01.2020, 23:37

(это не совсем то, о чем вы просили, но...) Иногда бэш $RANDOM может сделать работу...

Ex: сгенерировать 20 кубиков

for a in {1..20}; do echo "$(($RANDOM % 6 + 1))"; done

Или, если вы предпочитаете

declare -a A=(⚀  ⚁  ⚂  ⚃  ⚄  ⚅ )
for a in {1..20}; do echo ${A[$(($RANDOM % 6))]}; done
0
27.01.2020, 23:37

Теги

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