Linux에서 프로그램이나 쉘 스크립트를 실행할 때 Exec format error라는 오류가 발생하며 실행되지 않는 경우가 있습니다. 이 오류는 실행 파일의 형식이 현재 운영체제나 CPU 아키텍처와 맞지 않거나, 스크립트의 실행 방식에 문제가 있을 때 발생하는 대표적인 실행 오류입니다.
특히 ARM에서 컴파일한 프로그램을 x86 서버에서 실행하거나, Windows에서 작성한 스크립트를 Linux에서 그대로 실행하는 경우 자주 발생합니다. Docker 이미지의 플랫폼이 맞지 않는 경우에도 흔히 볼 수 있는 오류입니다.
이번 글에서는 Exec format error 오류의 원인과 해결 방법을 실무 중심으로 알아보겠습니다.
Exec format error란 무엇인가?
Exec format error는 운영체제가 실행 파일을 정상적인 실행 형식으로 인식하지 못할 때 발생하는 오류입니다.
대표적인 오류는 다음과 같습니다.
bash: ./program: cannot execute binary file: Exec format error
또는
cannot execute binary file
또는
Exec format error
이 오류는 프로그램 자체의 문제라기보다 실행 환경과 파일 형식이 맞지 않는 경우가 대부분입니다.
Exec format error가 발생하는 대표적인 원인
다음과 같은 경우 자주 발생합니다.
- CPU 아키텍처 불일치
- ARM 실행 파일을 x86에서 실행
- x86 실행 파일을 ARM에서 실행
- Windows 실행 파일(EXE) 실행
- 잘못된 Shebang(
#!) - 실행 권한 부족
- 손상된 실행 파일
- Windows 줄바꿈(CRLF)
- Docker 플랫폼 불일치
- ELF 파일 손상
실무에서는 실행 파일 형식을 가장 먼저 확인해야 합니다.
1. 실행 파일 형식 확인하기
다음 명령으로 실행 파일의 형식을 확인합니다.
file 프로그램명
예시
file app
출력 예
ELF 64-bit LSB executable, x86-64
또는
ELF 64-bit LSB executable, ARM aarch64
현재 서버의 CPU와 일치하는지 확인합니다.
2. CPU 아키텍처 확인하기
현재 서버의 CPU 정보를 확인합니다.
uname -m
또는
lscpu
예시
x86_64
또는
aarch64
실행 파일과 CPU 아키텍처가 같아야 합니다.
3. 실행 권한 확인하기
실행 권한이 있는지 확인합니다.
ls -l 프로그램명
권한이 없다면
chmod +x 프로그램명
을 실행합니다.
4. Shebang 확인하기
쉘 스크립트라면 첫 줄을 확인합니다.
head -1 script.sh
예시
#!/bin/bash
또는
#!/usr/bin/env python3
잘못된 경로나 존재하지 않는 인터프리터를 지정하면 실행되지 않습니다.
5. Windows 줄바꿈(CRLF) 확인하기
Windows에서 작성한 스크립트는 CRLF 때문에 실행 오류가 발생할 수 있습니다.
확인
cat -A script.sh
^M 문자가 보인다면 Windows 줄바꿈입니다.
변환
dos2unix script.sh
6. 라이브러리 확인하기
필요한 라이브러리가 있는지 확인합니다.
ldd 프로그램명
누락된 라이브러리가 있다면 설치하거나 다시 빌드해야 합니다.
7. Docker 플랫폼 확인하기
Docker 환경에서는 이미지 플랫폼을 확인합니다.
docker image inspect 이미지명
또는
docker inspect 컨테이너명
ARM 이미지를 x86 서버에서 실행하는 경우 오류가 발생할 수 있습니다.
8. 바이너리 손상 여부 확인하기
파일 크기와 체크섬을 확인합니다.
sha256sum 프로그램명
또는
md5sum 프로그램명
정상 파일과 비교하여 손상 여부를 확인합니다.
9. 시스템 로그 확인하기
커널 로그를 확인합니다.
dmesg
또는
journalctl -xe
실행 실패 원인과 관련된 로그가 기록되어 있을 수 있습니다.
10. 다시 컴파일 또는 재다운로드하기
실행 파일이 손상되었거나 잘못된 플랫폼에서 빌드되었다면 현재 서버 환경에 맞게 다시 컴파일하거나 올바른 바이너리를 다운로드합니다.
예시
gcc source.c -o app
또는
go build
환경에 맞게 다시 빌드하면 대부분 해결됩니다.
Exec format error 문제를 확인하는 순서
실무에서는 다음 순서대로 점검하는 것이 가장 효율적입니다.
file명령 확인uname -m확인- 실행 권한 확인
- Shebang 확인
- CRLF 확인
ldd확인- Docker 플랫폼 확인
- 파일 무결성 확인
- 시스템 로그 확인
- 재컴파일 또는 재다운로드
이 순서대로 점검하면 대부분의 원인을 빠르게 찾을 수 있습니다.
자주 묻는 질문
Windows에서 만든 쉘 스크립트가 Linux에서 실행되지 않습니다.
Windows의 CRLF 줄바꿈이 원인일 가능성이 높습니다. dos2unix로 변환한 후 다시 실행해 보세요.
ARM 서버에서 x86 프로그램을 실행할 수 있나요?
기본적으로는 실행할 수 없습니다. QEMU와 같은 에뮬레이션 환경이 필요하거나 ARM용으로 다시 빌드해야 합니다.
Docker에서만 Exec format error가 발생합니다.
컨테이너 이미지의 플랫폼과 호스트 서버의 CPU 아키텍처가 일치하는지 확인하세요. ARM 이미지를 x86 서버에서 실행하면 이 오류가 발생할 수 있습니다.
마무리
Exec format error는 Linux에서 실행 파일의 형식이나 CPU 아키텍처가 현재 환경과 맞지 않을 때 발생하는 대표적인 오류입니다. file, uname, ldd, dos2unix, Docker 플랫폼 확인 등을 통해 원인을 빠르게 파악할 수 있으며, 대부분은 올바른 실행 파일을 사용하거나 현재 환경에 맞게 다시 빌드하면 해결됩니다.