Linux에서 1GB 임의 파일을 작성하는 방법


88

나는 bash 쉘을 사용하고하고 명령의 출력 파이프에 원하는 openssl rand -base64 1000명령에 dd같은 dd if={output of openssl} of="sample.txt bs=1G count=1. 변수를 사용할 수 있다고 생각하지만 최선의 방법은 확실하지 않습니다. 파일을 만들고 싶은 이유는 임의의 텍스트가있는 1GB 파일을 원하기 때문입니다.

답변:


130

if=필요하지 않습니다. dd대신 무언가를 파이프로 넣을 수 있습니다 .

something... | dd of=sample.txt bs=1G count=1

openssl rand어쨌든 바이트 수를 지정해야하므로 여기 에서는 유용하지 않습니다 . 그래서 당신은 실제로 필요하지 않습니다 dd- 작동합니다 :

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))

1 기가 바이트는 일반적으로 2 30 바이트입니다 ( 대신 10**910 9 바이트에 사용할 수 있음 ). 이 * 3/4부품은 Base64 오버 헤드를 고려하여 인코딩 된 출력을 1GB로 만듭니다.

또는을 사용할 수 /dev/urandom있지만 OpenSSL보다 약간 느립니다.

dd if=/dev/urandom of=sample.txt bs=1G count=1

개인적으로, 나는 사용 bs=64M count=16하거나 비슷합니다.

dd if=/dev/urandom of=sample.txt bs=64M count=16

2
superuser.com/questions/467697/…에 대용량 파일 압축에 관한 질문을 게시했으며 사용 /dev/urandom하면 실제 텍스트 파일이 아닌 이진 파일 을 생성하는 것이 좋습니다 .
PeanutsMonkey

2
@PeanutsMonkey : 맞습니다; 당신은 같은 것이 필요합니다 dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt.
Scott

3
@PeanutsMonkey : 하나의 "실제 시나리오"가 없으며 일부 시나리오는 기가 바이트의 텍스트를 처리 할 수도 있고 다른 시나리오는 기가 바이트의 JPEG 또는 기가 바이트의 컴파일 된 소프트웨어를 처리 할 수도 있습니다. 많은 텍스트를 원할 경우 Wikipedia 덤프 를 다운로드하십시오. 예.
grawity

2
@PeanutsMonkey : dd에서 750,000,000 바이트를 읽어 /dev/urandom파이프에 넣습니다 uuencode. uuencode입력을 base64 인코딩 형식으로 인코딩합니다 (다른 프로그램과 반드시 ​​일치 할 필요는 없음). 즉, 이진 데이터를 텍스트로 변환합니다. 나는 base64 인코딩이 데이터를 33 %% 확장한다는 grawity의 진술을 믿었 기 때문에 750M을 사용했기 때문에 텍스트 파일에서 원하는만큼의 2 진 데이터를 요구해야한다.
Scott

3
잘린 파일dd: warning: partial read (33554431 bytes); suggest iflag=fullblock 을 만들 것이라고 말하면 플래그를 추가하면 작동합니다. iflag=fullblock
rogerdpack

25

1GB.bin 임의 컨텐츠 파일을 작성하십시오.

dd if = / dev / urandom = 1GB.bin bs = 64M count = 16 iflag = 풀 블록


3
iflag=fullblock에게 다른 답변과 비교할 때 필요한 추가 사항이있었습니다.
dojuba

2

정확히 1GB를 원하면 다음을 사용할 수 있습니다.

openssl rand -out $ testfile -base64 792917038; 잘라 내기 -s-1 $ testfile

openssl 명령은 파일을 정확히 1 바이트로 너무 크게 만듭니다. truncate 명령은 해당 바이트를 잘라냅니다.


그 여분의 바이트는 아마도 -base64. 파일을 제거하면 올바른 크기의 파일이 생성됩니다.
다니엘

-1

이 스크립트를 사용해보십시오.

#!/bin/bash
openssl rand -base64 1000 | dd of=sample.txt bs=1G count=1

이 스크립트는을 사용하지 않는 한 작동 할 수 있습니다 /dev/random.

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"

8
/dev/random그럴만한 이유가없는 한 이것을 낭비하지 않는 것이 좋습니다 . /dev/urandom훨씬 저렴합니다.
Ansgar Wiechers

1
또한 $var=(command)이 문맥에서 유효한 구문이 아닙니다.
grawity

@ grawity-당신이 유효하지 않다고 말할 때, 무슨 뜻입니까?
PeanutsMonkey

나는 정확하게 그것을 의미한다 – 그것은 틀렸다.
grawity

3
@grawity, @PeanutsMonkey : 그는 오타를 만들었습니다. 그는 의미했다 random=$(openssl rand -base64 1000). bash기가 바이트 길이의 값을 변수에 할당 할 수 있는지 여부는 의문 입니다. 그리고 당신이 말하더라도 random=$(openssl rand -base64 1000), 그 이후의 말 if=$random은 의미가 없습니다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.