다음을 사용할 수 있다는 것을 알고 있습니다.
$ my_program > output.txt
출력을 파일로 리디렉션하는데 문제는 파일이 64에 도달하면 Kb
더 이상 파일에 아무 것도 기록되지 않고 뒤따르는 모든 정보가 손실된다는 것입니다.
어떡해?
답변1
출력을 확인하십시오 ulimit -f
. 현재 파일 제한 값에 의해 제한될 수 있습니다. 그렇다면 를 실행하여 제한을 제거할 수 있습니다 ulimit -f unlimited
.
답변2
셸은 몇 가지 내부 제한 사항을 사용합니다. Bash(사용 중인 셸)에서 이 명령은 ulimit
목록을 나열하는 데 사용됩니다(-a는 모두를 의미함).
$ ulimit -a
>
그러나 "파이프 크기"(redirect() 또는 파이프()의 한계)를 |
더 낮은 값으로 설정하더라도 이 Linux 시스템에서는 8(-p)로 설정되어 있어도 스트림의 크기와 전송되는 데이터가 파이프를 통한 크기는 매우 클 수 있습니다(1천만 바이트 이상).
$ printf '%0*d' 11000111 0 | wc -c
11000111
파이프에 적용되는 또 다른 제한 사항이자 실제적인 제한 사항은 다음에서 읽는다는 것입니다.
$ cat /proc/sys/fs/pipe-max-size
65536
동일한 파일에 설정합니다.
$ sudo echo $((4 * 1024)) > /proc/sys/fs/pipe-max-size
그러나 위에서 설정한 아주 작은 값이라도 파이프의 흐름을 제한하지는 않습니다. 위 명령은 여전히 1천만 바이트 이상에서 작동합니다.
그 이유는 제한 사항이 적용되는 이유입니다.하나블록을 전송할 수 있습니다.
이런 도구가 필요해요Perl과 Bash를 혼합한 스크립트글을 쓰다하나막혔습니다.
$ ./pipesize 128 1
write size: 128; bytes successfully before error: 4096
이는 파이프라인의 실제 제한을 보여줍니다(리디렉션과 동일한 제한).