리눅스 file 명령어 가이드: 파일의 진짜 정체를 파악하는 방법
리눅스를 사용하다 보면 확장자가 없거나, .txt 파일임에도 불구하고 열리지 않는 당혹스러운 상황을 마주하게 됩니다. 윈도우와 달리 리눅스는 파일의 확장자에 의존하지 않기 때문입니다. 이때 필요한 것이 바로 file 명령어입니다.
파일 내부의 매직 넘버(Magic Number)를 분석하여 해당 파일이 텍스트인지, 실행 파일인지, 혹은 압축 파일인지 정확하게 알려주는 이 명령어의 활용법을 핵심 위주로 정리해 드립니다.
1. file 명령어는 어떻게 파일을 식별할까?
file 명령어는 단순히 이름만 보는 것이 아니라 세 가지 단계의 테스트를 거칩니다.
첫째는 시스템 호출을 통한 파일 시스템 테스트, 둘째는 파일 시작 부분의 특정 바이트 배열을 확인하는 매직 테스트, 마지막으로 언어셋을 확인하는 언어 테스트입니다.
이를 통해 파일의 인코딩(ASCII, UTF-8 등)과 라이브러리 의존성까지 파악할 수 있습니다.
2. file 명령어 주요 옵션 상세 비교
명령어의 효율을 높여주는 필수 옵션들을 정리했습니다.
| 옵션 | 설명 | 주요 특징 |
|---|---|---|
| -b | Brief 모드 (파일명을 출력하지 않음) | 스크립트에서 결과값만 추출할 때 유용 |
| -i | MIME 타입으로 출력 | text/plain, image/png 등 표준 형식 확인 |
| -z | 압축 파일 내부 확인 | 압축을 풀지 않고 내부 콘텐츠 유형 파악 |
| -L | 심볼릭 링크 참조 | 링크 자체가 아닌 원본 파일의 정보 표시 |
3. 실무 활용 예시 및 팁
① 기본 사용법
file mystery_file
출력 예:mystery_file: ELF 64-bit LSB executable, x86-64...(실행 파일임을 확인)
② 웹 개발 및 보안 점검 (MIME 타입)
파일 업로드 기능을 구현하거나 보안 점검 시 실제 파일 형식을 체크할 때 유용합니다.
file -i image.jpg
출력 예:image.jpg: image/jpeg; charset=binary
③ 여러 파일 한꺼번에 확인하기
file * : 현재 디렉토리 내 모든 파일의 형식을 리스트업합니다.
| 상황 | 권장 옵션 | 기대 결과 |
|---|---|---|
| 순수 텍스트 인코딩 확인 | 기본 사용 | ASCII, UTF-8 등 인코딩 확인 |
| HTTP 헤더용 타입 추출 | -i | 표준 MIME 타입 획득 |
| 결과값만 스크립트 변수 할당 | -b | 파일명 제외 깔끔한 데이터 |