명령 행에서 특정 크기의 파일을 작성하는 방법 : 명령 또는 다른 유사한 방법 사용

touch특정 크기 (예 : 14MB) 의 파일을 어떻게 만들 수 있습니까 (예 : 명령 또는 다른 유사한 방법 사용 )?

사용 사례는 다양한 파일 크기로 FTP를 테스트하는 것입니다. 특정 크기의 파일을 만들 수 있다면 FTP 전송 등을 확인하는 것이 좋습니다.



답변

사용 truncate:

truncate -s 14M filename

보낸 사람 man truncate:

DESCRIPTION
   Shrink or extend the size of each FILE to the specified size

[...]

 -s, --size=SIZE
          set or adjust the file size by SIZE

참고 : truncate시스템에서 사용하지 못할 수 있습니다 (예 : Mac OS X에서는 기본적으로 설치되지 않음) (예 : macports를 사용하여 쉽게 설치할 수 있음). 이 경우 dd또는 head대신 사용해야 할 수도 있습니다 .


답변

편집 : 가장 간단한 방법은 아마도 truncateAshutosh Vishwa Bandhu의 대답 일 것입니다. 그러나 @ offby1 이 지적한대로 스파 스 파일 을 생성 하여 원하는 파일 이 아닐 수도 있습니다. 아래 솔루션은 정상적인 전체 파일을 만듭니다.


다음 명령은라는 14MB 파일을 만듭니다 foo.

  1. fallocate( 의견에 의견을 제안한 @Breakthrough 에게 감사하고 아래에 언급 한 Ahmed Masud의 답변에 투표 하십시오.)

    fallocate -l 14000000 foo
    

    이 명령은 truncate원하는 파일 크기에 관계없이 (즉시 큰) 빠르며 (대용량 파일의 경우 느린 다른 솔루션과 달리) 스파 스 파일이 아닌 일반 파일을 생성하기 때문에 특히 인상적 입니다.

    $ truncate -s 14MB foo1.txt
    $ fallocate -l 14000000 foo2.txt
    $ ls -ls foo?.txt
        0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
    13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
    
  2. 임의의 데이터로 채워진 파일 만들기

    dd if=/dev/urandom of=foo bs=14MB count=1
    

                                                                              또는

    head -c 14MB /dev/urandom > foo
    
  3. \0s로 채워진 파일을 작성하십시오 .

    dd if=/dev/zero of=foo.txt bs=14MB count=1
    

                                                                              또는

    head -c 14MB /dev/zero > foo
    
  4. 다른 파일의 첫 14MB 데이터로 채워진 파일을 작성하십시오.

    head -c 14MB bar.txt > foo
    
  5. 다른 파일의 마지막 14MB 데이터로 채워진 파일을 작성하십시오.

    tail -c 14MB bar.txt > foo
    

위의 모든 예에서 파일은 14*1000*1000원하는 14*1024*1024경우로 대체 MB됩니다 M. 예를 들면 다음과 같습니다.

dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo

fallocate 바이트 단위로만 처리되므로 (14 * 1024 * 1024 = 14680064)

fallocate -l 14680064 foo


답변

dd bs=1MB count=14 if=/dev/zero of=<yourfilename>

경고 dd 는 사용자가 임의로 또는 실수로 작성할 수있는 권한을 가진 모든 것을 자동으로 덮어 씁니다 . dd예를 들어 이해해야 합니다. 독서와 함께 dd --help, 당신은 당신의 dd 명령 라인을 망치하지 않거나 다른 당신은 쉽게 되돌릴 수없는 데이터 손실을 만들 수 있습니다 – 총도 .

개시 내용 if=은 IS 입력 파일of=는 IS 출력 파일 . 명령을 실행하기 전에 항상 올바른지 다시 확인하십시오. 🙂


답변

마술 사용 dd😉 맨 페이지

$ dd if=/dev/zero of=output.dat  bs=1024  count=14336

14MB * 1024 = 14336KB가 발생하거나

$ dd if=/dev/zero of=output.dat  bs=1MB  count=14

그리고 14MB output.dat 파일이 0으로 채워집니다. : D


답변

가장 빠른 방법입니다.

SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1

그렇지 않으면 정확한 위치를 찾고 단일 바이트를 쓰는 빠르고 더러운 C 또는 perl 프로그램을 작성하십시오. 이것은 실제로 데이터를 블록에 덤프하는 것보다 훨씬 빠릅니다.

스파 스 파일을 피하려면 Linux (및 다른 시스템) fallocate -l <length>에서 사용할 수 있습니다 util-linux.

그것이 불가능하고 POSIX 호환 시스템을 가지고 있다면 posix_fallocate () 라이브러리 호출을 사용하여 빠르고 더러운 프로그램을 작성할 수 있습니다. posix_fallocate는 지정된 범위의 할당을 보장하므로 범위가 성공적으로 반환되면 이후에 범위를 사용할 때 디스크가 가득 차지 않게됩니다.


답변

동안은 dd그것을 할 수있는 휴대용 방법, 명령입니다 mkfilexfs_mkfile이 목적을 위해 특별히 작성된 빠르다 있습니다 :

mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename

중요한 것은 어느 명령도 보편적으로 사용할 수 없으므로 이식 가능한 스크립트를 작성하는 데 좋지 않습니다. 그러나 명령 줄을 통해 대화 형으로 수행하는 경우 내가 사용하는 명령입니다.

기본적으로 이들은 채워지지 않은 파일을 생성하고 스파 스 (또는 “홀리”) 파일은 생성하지 않습니다 . 둘 다 -n스파 스 파일을 만드는 옵션을 대신 사용합니다.


답변

Perl에는 또 다른 옵션이 있습니다.

perl -e 'print "a" x 1024' > file.txt

1KB 파일이 생성됩니다. 1024를 원하는 숫자로 바꾸십시오.