강좌 & 팁
글 수 2,412
2014.03.27 19:00:09 (*.134.169.166)
40875
쉘 스크립트로 랜덤 수 를 만드는 방법을 검색해 보면 분명.
-------------------------------------------
number = $RANDOM
-------------------------------------------
이렇게 나올 것 입니다.
이게 랜덤이 아닌가??라고 생각 할텐데요. 사실 이 $RANDOM 으로 만들어진 숫자는 분명 랜덤 맞습니다.
단, 시스템이 구동되고 있는 도중 이라면 말입니다.
다시 말해. RTC 가 없는 보드에서 부팅 되자 마자 만들어낸 다면 , 같은 수만 나오므로 랜덤이라고 하긴 좀 애매 합니다.
결국 부팅 직 후 랜덤한 수를 만들어야 한다면, 이 $RANDOM 은 쓰면 랜덤이 아닌 것 입니다.
그럼 어떻게 해야 할까요?
바로 uuid 를 사용 하는 방법이 있습니다..
uuid 는 고유 식별자로 32개의 16진수로 표현하는 128비트 값 입니다.
uuid 를 생성 하는 방법은 아래와 같습니다.
/proc/sys/kernel/random/uuid
이제 이 랜덤하게 생성된 uuid 를 랜덤 숫자로 써 보겠습니다.
------------------------------------------------------------------------------
#!/bin/bash
number=0
proc_random=`cat /proc/sys/kernel/random/uuid`
number1=${proc_random:35:1}
number=$((0x$number1))
echo " $number Sec"
------------------------------------------------------------------------------
위 스크립트를 잘 해석해 보면,
랜덤으로 만들어진 uuid 의 맨마지막 1 자리 16진수 숫자를 정수로 만들어 보여 주는 스크립트임을
알 수 있습니다.
proc_random=`cat /proc/sys/kernel/random/uuid`
-> 랜덤 uuid 만들기
number1=${proc_random:35:1}
-> 맨마지막 16진수 1개를 가져온다.
number=$((0x$number1))
-> 가져온 16진수 1개를 정수로 바꾸기.
별것 아니지만, 위에서 설명한 바와 같이 RTC 가 없는 보드가 부팅 즉시 랜덤 수를 만들어야 하는 상황이라면
다소 유용 합니다.