랜덤한 문자열을 뽑고 싶습니다. 어떻게 하면 좋을까요? python에서는 random.choices와 비슷하게 뽑고 싶다는 이야기입니다. 즉, 같은 문자가 여러 번 나와도 됩니다.
이 때 쓸 수 있는 것이 /dev/random, /dev/urandom을 이용하는 방법입니다.
그러면, 이런 이상한 문자들이 끝도 없이 생성됨을 알 수 있어요. 이들을 적절히 정제한 다음에 상위 x개만 자른다면 비슷한 기능을 구현할 수 있겠네요.
여담으로, /dev/urandom의 file type을 보면 character special이라고 되어 있네요.
문자열 중에서 특정 문자만을 삭제하는 경우 tr 명령어를 잘 쓰게 되는데요. -c 옵션을 붙이면 complement를 의미합니다. 반전의 의미입니다. 예를 들어, ^%123asadf^&*&"에서 숫자와 대소문자만 나오게 하고 싶어요.
이 경우, tr -dc "a-zA-Z0-9"를 입력해 주면 됩니다. 문자 집합을 삭제할 것인데요. -c 옵션이 붙었기 때문에, "a-zA-Z0-9"가 아닌 것을 삭제할 문자 집합으로 삼게 됩니다. 대소문자, digit가 아닌 것은 ^, %, ^, &, *, . 이므로 이들을 제거한 결과인 123asadf를 출력하게 됩니다.
적용 후에 출력되는 것을 보면, F9LNoY... 가 출력됩니다. 상당히 긴 문자열이 끝없이 출력됨을 볼 수 있어요. 우리가 원하는 것은 앞에 n byte입니다. 예를 들어, 알파벳 대소문자나 숫자로만 이루어진 랜덤한 15자의 문자가 있을 겁니다.
이 때, head -c 옵션을 쓰면 유용합니다. -c는 첫 n byte를 출력합니다. 예를 들어, head -c 15는 첫 15바이트를 출력해 줍니다.
그래서, cat /dev/urandom | tr -dc "a-zA-Z0-9" | head -c 15를 입력하면, 대소문자와 숫자로만 이루어진 랜덤한 문자열 15자를 출력하게 됩니다. Pgu3zy9Mnk1TktF의 길이와 zHvV4f9HbUuBV9m의 길이는 15입니다.
당연한 이야기겠지만, 이 방법대로 하면, 같은 문자가 반복해서 나올 수도 있습니다. 위 그림은 이를 보여줍니다. 정리하면, 캐릭터 장치 파일인 /dev/urandom과 tr -dc, 그리고 head -c 명령어를 이용해서 랜덤한 문자열을 만들 수 있다. 정도를 보시면 될 듯 합니다.
'OS > 리눅스' 카테고리의 다른 글
리눅스 xargs 명령어에 대해 알아봅시다. (0) | 2022.12.05 |
---|---|
grep 폴더 제외와 파일 제외와 결과에 나올 확장자를 설정하는 방법을 알아봅시다. (0) | 2022.12.04 |
리눅스 shuf 명령어로 랜덤한 permutation을 뽑아봅시다. (1) | 2022.11.27 |
리눅스 다중 명령어 && || ; 에 대해 알아봅시다 (0) | 2022.10.31 |
우분투 서버 현재 시간을 date 명령어를 이용해서 출력해 봅시다. (0) | 2022.10.09 |
최근댓글