.exe, .zip, .jpg, .mp4, .bgeo.sc, .py, .java, .class ...

생각해보면 컴퓨터를 켜면 반드시 확장자를 만나게되고, 무엇을 하던 확장자명을 신경써야되는 상황이 많이 있습니다.

어떤 때에는 .abc 확장자명을 첨부할 수 없어서 일단 허용되는 .zxc파일로 업로드하고, 다운로드 받는 수신자에게 '확장자를 .abc로 바꾸어 확인하세요 !' 하는 경우도 있습니다.

어떻게 이런것들이 가능한지, 확장자명에 대해 간단히 알아봅니다.


파일 확장자명(Extension)

: 파일의 종류와 형식을 나타내는 문자열로, 파일 이름 끝에 붙습니다. 일반적으로 마침표(.)뒤에 오는 문자조합으로 표시됩니다.

 

확장자명이 왜 중요한가 ?

  • 파일 형식 구분: 운영체제나 프로그램이 파일을 어떤 방식으로 열고 처리할지 결정합니다.
  • 연관 프로그램 연결: 더블 클릭하면 알맞은 프로그램으로 자동 실행됩니다.
  • 보안: 의심스러운 .exe 같은 실행 파일은 주의할 수 있습니다.

어떻게 운영체제나 프로그램이 결정하나 ?

운영체제는 파일을 식별할 때 크게 두 가지 방법을 사용합니다.

 

1. 확장자(Extension) 기반 식별 (Windows의 경우)

  • Windows 운영체제는 파일 확장자를 기반으로 해당 파일을 처리할 프로그램을 결정합니다.
  • 예를 들어, .txt 파일은 메모장(notepad.exe), .jpg 파일은 사진 뷰어 등으로 연결됩니다.
  • 레지스트리를 통해 어떤 확장자명이 어떤 기본프로그램으로 연결되는지 확인할 수 있습니다.
HKEY_CLASSES_ROOT\.pdf
HKEY_CLASSES_ROOT\AcroExch.Document
    (.pdf는 Acrobat Reader와 연결되어 있다면, Acrobat Reader를 실행합니다.)

윈도우의 기본 앱 설정 창

2. 마법 숫자(Magic Number) 기반 식별 (Linux/Unix 중심)

  • Linux, MacOS 등은 파일 내용의 헤더 정보(파일의 첫 몇 바이트)를 분석하여 파일 유형을 식별합니다.
  • 예: JPEG 파일은 항상 'FF D8 FF'로 시작, PNG 파일은 항상 '89 50 4E 47'로 시작
  • file 명령어를 사용하면 확장자 없어도 파일 유형을 파악할 수 있습니다.

 

이후, 프로그램이 확장자를 해석하는 방법은 다음과 같습니다.

  1. 프로그램 내부의 MIME 타입 파악
    • 프로그램은 MIME 타입을 통해 파일 유형을 확인합니다. (예: application/pdf, image/jpeg, text/plain)
    • MIME 타입은 보통 파일 내용의 (Header) 정보를 읽어 구분합니다.
  2. 파일 파서(Parser)
    • 프로그램은 특정 파일 형식을 해석하는 파서(Parser)를 가지고 있습니다. (예: .mp4 파일 → 비디오 코덱 파서(H.264, AAC 등)

정리해보자면 운영체제별 확장자와 프로그램 연결 방식은 아래와 같습니다.

구분 Windows macOS Linux(Ubuntu)
파일 식별 주로 확장자로 식별 확장자 + MIME 타입 및 UTI기반 Magic Number(헤더) 및 MIME 타입 기반
프로그램 연결 레지스트리에 확장자-프로그램 연결 Launch Services에 UTI기반 연결 .desktop 파일 및 MIME설정
(/etc/mime.types)
명령어 확인 assoc, ftype mdls, duti file, xdg-mime

 

윈도우 명령 프롬프트로 특정 파일 확인 예시입니다.

# 1. 확장자 연결 확인
assoc .txt
# 출력 예시: .txt=txtfile

# 2. 연결된 프로그램 확인
ftype txtfile
# 출력 예시: txtfile="%SystemRoot%\system32\NOTEPAD.EXE" %1

# 3. 연결 프로그램 변경
assoc .txt=wordpadfile
ftype wordpadfile="%ProgramFiles%\Windows NT\Tools\wordpad.exe" %1

 

리눅스 환경에선 아래와 같습니다.

# 1. 파일 유형 확인
file image.jpg
# 출력 예시: image.jpg: JPEG image data

# 2. MIME 타입 확인
xdg-mime query filetype image.jpg
# 출력 예시: image/jpeg

# 3. 기본 프로그램 연결 확인 및 변경
xdg-mimg query default image/jpeg
xdg-mime default eog.desktop image/jpeg

 

파일의 바이트코드(16진수) 직접 확인해보기

윈도우 운영체제에서는 내장된 'certutil' 명령어로 파일의 16진수 바이트코드를 직접 확인 할 수 있습니다.

간단한 이미지를 만들어 image01.png 파일로 저장했습니다.

 

certutil -dump 이미지파일 명령어로 바이트코드를 확인해봅니다.

(파일이 너무 커서 프롬프트창에서 첫 줄을 확인하기 어렵다면 'certutil -dump 이미지파일 | more' 명령어로 페이지를 넘기듯 확인할 수 있습니다.)

명령어를 사용하면 이렇게 Hex dump를 볼 수 있습니다.

Hex Dump는 0과 1의 바이너리 데이터를 사람이 읽기 쉽게 16진수(Hex)로, 파일을 메모리 구조처럼 볼 수 있도록 정렬한 형식입니다. (Hex Dump 알아보기 →)

 

Hex Dump를 바탕으로 예시로 사용한 png 파일의 정보가 어떻게 담겨있는지 확인합니다.

바이트 코드 의미
89 비ASCII 문자(파일 손상 방지 목적)
50 4E 47 "PNG" 문자열(파일이 PNG 포맷임을 식별)
0D 0A Windows 개행 문자(CR LF)
1A EOF(파일 종료 신호)
OA Unix 개행 문자

 

바이트 코드 의미
00 00 00 0D 청크 크기(13바이트)
49 48 44 52 "IHDR"(파일 헤더)

 


(추가)

'certutil -dump 파일이름' 으로 볼 출력 결과를 파일로 저장해서 확인하는 방법

'certutil -dump 파일명 > dump_output(혹은 원하는 파일명).txt' 명령어를 사용하면 텍스트 편집기로 확인할 수 있습니다.

+ Recent posts