Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

curl 오류 23? 파일·파이프·래퍼 중 어디가 출력을 거부했는지 증명하세요

“Failure writing output to destination”은 로컬 쓰기 실패이지 서버나 네트워크 실패의 증거가 아닙니다. 명령과 종료 상태를 보존하고 파일 출력과 파이프를 분리한 뒤 실제 경계만 수정하세요.

Original technical diagram separating curl exit 23 evidence into file, pipeline and wrapper checks.
원본 일러스트: 권한 변경이나 재설치 전에 쓰기 목적지를 분리하세요. Watch at Ease

curl 종료 코드 23은 받은 데이터를 로컬 파일에 쓰지 못했거나 쓰기 콜백이 오류를 반환했다는 뜻입니다. 하류 프로그램의 조기 종료, 없는 경로, 가득 찬 파일 시스템, 다른 임시 경로를 쓰는 래퍼가 모두 원인이 될 수 있습니다.

sudo, 재설치, stderr 숨기기부터 시작하지 마세요. 전체 명령과 파이프 각 단계의 상태를 저장하고 같은 URL을 통제된 파일에 한 번 써서 파일 분기와 소비자 분기를 나누세요.

명령을 보존하고 목적지 분류

전체 명령, curl --version, type -a curl, 출력 옵션, 리디렉션, 파이프 각 프로그램과 스크립트 작업 디렉터리를 저장합니다.

Bash에서는 즉시 ${PIPESTATUS[@]}를 기록해 마지막 명령의 0이 curl 23을 숨기지 않게 하고, 완전한 파일인지 조기 일치인지 목표를 정합니다.

통제된 파일로 한 번 분리

같은 URL과 필요한 옵션을 유지한 채 head, grep, 설치기를 빼고 소유한 디렉터리의 새 파일에 --output 합니다.

성공하면 원래 소비자나 래퍼를 조사하고 실패하면 23 직전 경고를 저장한 뒤 경로를 확인합니다.

실제 파일 목적지 감사

부모 디렉터리, 해당 파일 시스템의 블록과 inode를 확인하고 같은 사용자로 작은 임시 파일을 만듭니다.

필요한 부모만 만들고 심볼릭 링크, 읽기 전용 마운트, bind mount, 샌드박스 범위를 확인합니다.

파이프와 조기 종료 감사

head와 grep -q는 충분한 입력 후 종료해 쓰기 쪽에 끊긴 파이프를 만들 수 있습니다. curl은 의도 여부를 알 수 없습니다.

완전한 페이로드가 필요하면 임시 파일에 받고 검증한 뒤 소비자에 전달하며 23을 숨기지 않습니다.

래퍼 확인 후 좁게 수정

패키지 버전만 실패하면 실제 curl, 제한, 임시 경로와 /usr/bin/curl을 비교하고 다른 사용자의 Snap 사례만으로 삭제하지 않습니다.

좁게 수정한 뒤 한 번 재실행해 curl과 소비자 상태, 크기, 체크섬을 확인하고 불완전 파일을 제거합니다.

Original decision diagram for early-closing pipes, file destinations, wrappers and verification after curl error 23.
원본 일러스트: 의도적 조기 읽기와 완전 다운로드 실패는 다르게 검증합니다. Watch at Ease