shuf 명령의 무작위성은 얼마나 신뢰할 수 있나요?

shuf 명령의 무작위성은 얼마나 신뢰할 수 있나요?

10억 개의 난수를 생성하기 위해 다음 명령을 실행했습니다.

time shuf -i 1-1000000000 > "SHUF TEST 1"

놀랍게도 이 작업은 10분 이내에 완료되었습니다. 그런 다음 생성된 숫자 중 몇 개가 중복되었는지 확인하기 위해 출력 파일을 실행했고 uniq -d, 0으로 밝혀졌을 때 다시 놀랐습니다. 또한 출력 파일을 실행하여 uniq -u이러한 sort -u결과를 확인했습니다.

shuf명령이 상대적으로 짧은 시간에 10억 개의 난수를 생성할 수 있는 이유는 무엇이며 , 그 무작위성에 의존할 수 있습니까? 내 필요에 따라 암호화된 보안 난수 생성기가 필요하지 않으며 항상 고유 번호를 반환하기에 충분한 것입니다.

답변1

유틸리티 shuf는 입력 라인의 무작위 순열을 출력하여 입력을 섞습니다. 맨페이지에 따르면 "각 출력 순열의 가능성은 동일합니다"입니다. 비유하자면 카드 한 벌을 섞는 것입니다.

입력 줄에 중복 항목이 포함되어 있으면 출력 shuf에도 중복 항목이 포함됩니다. 왜? 왜냐하면 shuf입력의 무작위 순열을 수행하기 때문입니다. 입력 줄에 중복 항목이 없으면 출력에도 shuf중복 항목이 포함되지 않습니다.

귀하의 예에서 shuf -i 1-1000000000옵션 은 부호 없는 십진수 정수 1부터 1000000000까지의 범위(한 줄에 하나의 부호 없는 정수)를 포함하는 파일에서 입력이 나온 것처럼 작동합니다 -i. shuf즉, shuf각 줄에 고유한 부호 없는 정수가 포함된 1000000000줄의 입력이 있는 것처럼 작동합니다. 따라서 출력에서 ​​중복 항목이 발견되지 않습니다.

관련 정보