본문 바로가기

리눅스

stdbuf 명령어

반응형

stdbuf 명령어

stdbuf는 GNU coreutils 패키지에 포함된 명령어로 프로그램의 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 에 대한 버퍼링 정책을 즉시 변경할 때 사용됩니다.

설치

Debian(Ubuntu) 계열

sudo apt update
sudo apt install coreutils

RHEL(CentOS) 계열

sudo yum install coreutils

기본 사용법

stdbuf [옵션] 명령어

주요 옵션

  • -i MODE : 표준 입력 버퍼링 설정
  • -o MODE : 표준 출력 버퍼링 설정
  • -e MODE : 표준 에러 버퍼링 설정

버퍼링 모드

  • L : 라인 버퍼링 (줄바꿈마다 flush)
  • 0 : 버퍼링 없음 (즉시 flush)
  • full : 완전 버퍼링 (기본값)
  • 1MB, 4K : 특정 크기로 버퍼링 지정

사용 예제

1. 실시간 로그 확인

일반적인 tail | grep 조합은 버퍼링 때문에 grep이 바로 출력하지 않는 경우가 있습니다.

stdbuf -o0 tail -f /var/log/syslog | stdbuf -o0 grep "error"
  • tail -f → 로그 계속 읽기
  • stdbuf -o0 → 출력 버퍼 제거하여 실시간으로 grep 결과 표시
stdbuf -o0 python script.py | stdbuf -o0 grep "pattern"

2. 라인 단위 버퍼링

한 줄씩 출력 (대화형 프로그램에 유용)

stdbuf -oL python interactive_script.py

입력도 라인 버퍼링

stdbuf -iL -oL my_program

3. 특정 버퍼 크기 지정

4KB 버퍼 사용

stdbuf -o4K data_processor

1MB 버퍼 사용

stdbuf -o1M large_file_processor

4. 모든 스트림 버퍼링 설정

입력: 라인 버퍼링, 출력: 버퍼링 없음, 에러: 라인 버퍼링

stdbuf -iL -o0 -eL my_application

로그 처리

실시간 로그 필터링

stdbuf -o0 tail -f application.log | stdbuf -o0 awk '/ERROR/ {print $0}'

데이터 처리 파이프라인

전체 파이프라인에 버퍼링 제어 적용

stdbuf -o0 generator | stdbuf -i0 -o0 processor | stdbuf -i0 -oL saver

unbuffer 명령어(expect 패키지)

Debian(Ubuntu) 계열

sudo apt install expect

사용법

unbuffer python3 app.py | grep "INFO"

 

참고URL

- Ubuntu Packages : coreutils 패키지

- Ubuntu Manuals : stdbuf 명령어

 

python3 app.py 버퍼링 해제 | "INFO"를 잡아
 
728x90
반응형