Linux에서 프로그램 출력을 파일로 저장하는 데 따른 제한 사항

Linux에서 프로그램 출력을 파일로 저장하는 데 따른 제한 사항

다음을 사용할 수 있다는 것을 알고 있습니다.

$ 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

이는 파이프라인의 실제 제한을 보여줍니다(리디렉션과 동일한 제한).

관련 정보