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

기술 · 실용 가이드

Linux “Argument list too long”? 배치 전에 argv와 환경 바이트를 재세요

E2BIG는 argv와 환경의 합계, 너무 긴 한 문자열, 또는 래퍼가 만든 거대한 인수에서 발생합니다. 경계를 분류한 뒤 파일명을 보존하는 제한된 전송을 고르세요.

argv, 환경, 단일 문자열 E2BIG 분기 그림.
Watch at Ease 원본 일러스트레이션: 수집, 분류하고 제한된 전송을 고릅니다. Watch at Ease

E2BIG는 argv와 환경의 합계, 너무 긴 한 문자열, 또는 래퍼가 만든 거대한 인수에서 발생합니다. 경계를 분류한 뒤 파일명을 보존하는 제한된 전송을 고르세요.

E2BIG는 argv와 환경 합계, 너무 긴 한 문자열, 다른 exec 경로 제한을 포함합니다.

1. 시도한 exec 고정

glob을 바꾸기 전에 정확한 명령, 셸, 작업 디렉터리와 오류를 저장하세요. 작은 대표 확장과 생성 스크립트 또는 make 규칙을 기록하고 수많은 이름을 다른 진단 명령에 다시 넣지 마세요.

대상 프로그램이 시작되기 전에 셸이 오류를 냈는지 확인하세요. 애플리케이션 로그나 프로세스가 없다면 실패는 rm, cp, grep 내부가 아니라 exec 경계입니다.

2. 모든 바이트 예산 측정

getconf ARG_MAX, 스택 제한, 환경 바이트, 인수 수, 추정 argv 바이트와 가장 긴 문자열을 기록하세요. 실패한 서비스, 컨테이너, CI 또는 스케줄러와 같은 문맥에서 측정합니다.

값을 보장이 아닌 예산으로 보세요. Linux는 종료 NUL과 포인터 비용을 세고 환경도 새 프로세스로 넘깁니다. 합계가 ARG_MAX 아래로 보여도 한 인수가 실패할 수 있습니다.

3. 실패 형태 분류

세 가지로 나눕니다. 많은 일반 항목이 합계를 소진하거나, 한 경로나 생성된 셸 명령이 문자열 한도를 넘거나, 래퍼가 전체 레시피를 한 sh -c 인수에 넣습니다. 매우 큰 상속 환경은 네 번째입니다.

파일 수가 원인이라고 단정하지 마세요. 시험 환경 변수를 줄이고 가장 긴 항목을 확인한 뒤 비파괴 명령으로 재현하고 운영 동작을 바꾸세요.

4. 안전한 전송 선택

배치 위치가 맞으면 find -exec utility … {} + 또는 find -print0와 xargs -0를 쓰세요. GNU xargs에서는 --show-limits를 보고 보수적인 -s를 지정할 수 있습니다.

줄바꿈 구분 이름을 xargs에 넣거나 명령 치환으로 거대한 목록을 다시 만들지 마세요. 표준 입력, manifest, response file을 받는 API가 한 논리 작업을 더 잘 보존할 수 있습니다.

5. 배치 결과 증명

공백, 줄바꿈, 선행 하이픈과 가장 긴 이름을 가진 비파괴 샘플로 시험하세요. 민감한 경로를 숨기면서 호출별 종료 상태와 항목 수를 기록합니다.

입력과 처리 수가 맞고 모든 오류가 보이며 모든 배치가 예산 안이고 중단 후 영구 잔여 집합에서 재개할 수 있을 때만 승인하세요. 파괴 작업에는 백업도 필요합니다.

파일명 안전 제한 배치 승인 단계.
Watch at Ease 원본 일러스트레이션: 이름, 예산, 결과가 모두 통과해야 합니다. Watch at Ease