2010-04-06 6 views

답변

18

dd 명령을 사용하여/dev/random에서 데이터를 읽습니다.

dd if=/dev/random of=random.dat bs=1000000 count=5000 

이렇게하면 무작위 데이터의 5000 1MB 블록, 즉 전체 5GB의 무작위 데이터가 읽힐 것입니다.

최적의 성능을 얻으려면 blocksize 인수로 실험하십시오.

+0

dd -bs = 1024 count = 1/dev/random of = 테스트 내가 원하는 파일 크기를 생성하지 않습니다 ... –

+0

@Tadeusz : MB가 아닌 MiB를 원한다면 대개 bs = 1M을 사용해야합니다. – wRAR

+0

@CKeven :'-bs'가 아닌'bs'. – wRAR

0

확률 변수는 다른 수의 당신에게 각 시간을 줄 것이다 : 무엇에

echo $RANDOM 
7
head -c 10 /dev/random > rand.txt 

변화 (10)./dev/random과/dev/urandom의 차이점에 대해서는 "man random"을 읽으십시오.

또는 만 64 기수 문자

head -c 10 /dev/random | base64 | head -c 10 > rand.txt 

는 base64로 당신이에 관심이있어 몇 가지 문자를 포함 할 수 있지만, 더 나은 단일 라이너 문자 변환을 마련 할 시간이 없었다위한 ... 는 (. 또한 우리는 DEV/임의 죄송합니다, 엔트로피 풀 /에서 너무 많은 바이트를 가지고있어!)

+0

죄송합니다. 문자와 숫자 부분을 놓친 경우, 영숫자를 의미하는 것으로 추측합니다 ... 수정해야합니다. –

+1

엔트로피 저축 : 자연 학자의 녹색 생활에 대한 최신 경향. :) –

3

좋은 시작이 될 것이다 :

http://linuxgazette.net/153/pfeiffer.html

#!/bin/bash 
# Created by Ben Okopnik on Wed Jul 16 18:04:33 EDT 2008 

######## User settings  ############ 
MAXDIRS=5 
MAXDEPTH=2 
MAXFILES=10 
MAXSIZE=1000 
######## End of user settings ############ 

# How deep in the file system are we now? 
TOP=`pwd|tr -cd '/'|wc -c` 

populate() { 
    cd $1 
    curdir=$PWD 

    files=$(($RANDOM*$MAXFILES/32767)) 
    for n in `seq $files` 
    do 
     f=`mktemp XXXXXX` 
     size=$(($RANDOM*$MAXSIZE/32767)) 
     head -c $size /dev/urandom > $f 
    done 

    depth=`pwd|tr -cd '/'|wc -c` 
    if [ $(($depth-$TOP)) -ge $MAXDEPTH ] 
    then 
     return 
    fi 

    unset dirlist 
    dirs=$(($RANDOM*$MAXDIRS/32767)) 
    for n in `seq $dirs` 
    do 
     d=`mktemp -d XXXXXX` 
     dirlist="$dirlist${dirlist:+ }$PWD/$d" 
    done 

    for dir in $dirlist 
    do 
     populate "$dir" 
    done 
} 

populate $PWD 
0

"script.sh"로 저장하고 ./script.sh SIZE로 실행하십시오. printf 코드가 http://mywiki.wooledge.org/BashFAQ/071에서 해제되었습니다. 물론 mychars 배열을 무차별 적으로 초기화 할 수 있습니다. mychars = ("0" "1"... "A"... "Z" "a"... "z") 재미있을거야, 그렇지?

#!/bin/bash 
declare -a mychars 
for ((I=0; I<62; I++)); do 
    if [ $I -lt 10 ]; then 
     mychars[I]=$I 
    elif [ $I -lt 36 ]; then 
     D=$((I+55)) 
     mychars[I]=$(printf \\$(($D/64*100+$D%64/8*10+$D%8))) 
    else 
     D=$((I+61)) 
     mychars[I]=$(printf \\$(($D/64*100+$D%64/8*10+$D%8))) 
    fi 
done 
for ((I=$1; I>0; I--)); do 
    echo -n ${mychars[$((RANDOM%62))]} 
done 
echo 
+0

/dev/random & base64 접근법은 "tr -d -c [: alnum :]"을 통해 base64 파이프를 통해 파이프하는 대신에 좋습니다. 그러면 여러분이 나올 때까지 나오는 좋은 문자들을 계산할 필요가 있습니다 다시 끝났어. – nortally

1

각 크기에 50메가바이트의 100 개 무작위라는 이름의 파일을 생성합니다 : 어떤 문자가 출력 파일에 사용할 수 있습니다

for i in `seq 1 100`; do echo $i; dd if=/dev/urandom bs=1024 count=50000 > `echo $RANDOM`; done 

+0

mktemp를 사용하여 임의의 파일을 만드는 것이 좋습니다. for i seq 1 100; do myfile ='mktemp --tmpdir =. ' dd if =/dev/urandom bs = 1024 count = 50000> $ myfile done –

관련 문제