GNU/Linux >> Linux Esercitazione >  >> Linux

Come riempire un file con un flusso da /dev/urandom con un numero specificato di righe?

Sto cercando di riempire un file con una sequenza di 0 e 1 casuali con un numero di righe definito dall'utente e un numero di caratteri per riga.

il primo passo è ottenere un flusso casuale di 0 e 1:

cat /dev/urandom | tr -dc 01

quindi ho provato a riempire un file con questo flusso (e terminare il processo di riempimento con ctrl+c)

cat /dev/urandom | tr -dc 01 > foo

quando conto il numero di righe del file foo così creato ottengo 0 righe.

cat foo | wc -l
0

Ora ho provato a controllare il flusso, quindi ho creato una pipe denominata e indirizzato il flusso in essa. Quindi ho effettuato una connessione alla named pipe con il comando dd sperando invano di controllare in questo modo la quantità di caratteri per riga e il numero di righe nel file.

makefifo namedpipe
cat /dev/urandom | tr -dc 01 > namedpipe
dd if=namedpipe of=foo bs=10 count=5

il file foo è stato effettivamente riempito con 50 byte di 0 e 1 , ma il numero di righe era ancora 0.

Come posso risolverlo, immagino che forse devo inserire ogni numero di caratteri una nuova riga nel file, ma se è così, non so come.

Risposta accettata:

Che ne dici di fold ? Fa parte di coreutils...

$ tr -dc 01 < /dev/urandom | fold -w 30 | head -n 5
001010000111110001100101101101
000101110011011100100101111000
111010101011100101010110111001
111011000000000101111110110100
110011010111001110011010100011

O se non è disponibile, un po' di awk :

$ tr -dc 01 < /dev/urandom | awk $0=RT RS=.{,30} | head -n 5
000100010010001110100110100111
101010010100100110111010001110
100011100101001010111101001111
010010100111100101101100010100
001101100000101001111011011000

Oppure potresti semplicemente fare qualcosa con un ciclo...

$ for line in $(seq 1 5)
> do
>     echo $(tr -dc 01 < /dev/urandom | head -c 30)
> done
100101100111011110010010100000
000000010000010010110111101011
010000111110010010000000010100
001110110001111011101011001001
001010111011000111110001100110

Sono sicuro che ci sono altri modi... Ho pensato che forse hexdump con un formato personalizzato potesse farlo, ma a quanto pare no... 😉


Linux
  1. Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

  2. Come eseguire il file sh da un altro file sh

  3. Come si scambia /dev/sda con /dev/sdb?

  4. DD da /dev/zero a /dev/null... cosa succede realmente

  5. Come determinare quali processi utilizzano quanta entropia da /dev/urandom

Come codificare in base64 /dev/random o /dev/urandom?

Come creare un file in Linux dalla finestra del terminale?

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

Come Linux usa /dev/tty e /dev/tty0

Perché sono necessari < o > per usare /dev/tcp