소개
Windows 나 macOS 에서는 파일 확장자를 보고 파일의 종류를 판단하는 데 익숙합니다. 파일 이름이 .jpg로 끝나면 그림 파일이고, .exe로 끝나면 프로그램이라고 생각합니다.
하지만 Linux 에서 파일 이름은 단순한 표시일 뿐입니다. 현실의 라벨과 마찬가지로 잘못 표시될 수도 있습니다. 소금이 든 병에 "설탕"이라고 써 붙여도 내용물의 맛은 여전히 짭니다.
Linux 는 라벨, 즉 파일 이름을 그대로 믿지 않습니다. 대신 파일의 내용을 검사해 실제 형식을 확인합니다.
이는 Unix 의 더 넓은 개념과도 연결됩니다. 데이터의 의미는 이름만이 아니라 데이터가 어떻게 구성되고 사용되는지에서 나오는 경우가 많습니다. 파일 확장자는 사람이 편리하게 참고할 수 있는 정보지만, 최종적인 판단 기준은 아닙니다.
이 실습에서는 파일 이름과 관계없이 파일의 실제 형식을 확인하기 위해 file 명령을 사용합니다.
이 기술은 실제 운영 업무에서 중요합니다. 이름이 잘못 지정된 다운로드 파일, 로그, 덤프, 스크립트 또는 의심스러운 첨부 파일을 만날 수 있기 때문입니다. 파일을 열거나 실행하거나 편집하기 전에 실제 형식을 확인하는 것이 안전합니다.
텍스트 파일 확인하기
먼저 파일 이름이 나타내는 형식과 실제 형식이 일치하는 파일을 확인합니다.
먼저 프로젝트 디렉터리로 이동합니다.
cd ~/project
ls -l
출력에 welcome.txt가 표시됩니다. .txt 확장자는 이 파일이 텍스트 파일임을 나타내는 것처럼 보입니다. 하지만 라벨을 그대로 믿지 않는다는 점을 기억합니다.
file 명령으로 파일을 검사합니다.
file welcome.txt
다음과 비슷한 출력이 표시됩니다.
welcome.txt: ASCII text
file 명령이 파일 내용을 확인하고 다음과 같이 판단한 것입니다. "이 파일은 ASCII 텍스트입니다."
파일이 텍스트인지 미리 알고 있으면 cat, less 같은 명령과 텍스트 편집기를 더 안전하게 사용할 수 있습니다. file 명령은 이러한 판단을 내리는 데 도움을 줍니다.
이 파일은 텍스트이므로 안전하게 읽을 수 있습니다. 다음과 같이 cat 명령을 실행합니다.
cat welcome.txt
바이너리 파일 확인하기
ls, mkdir, cat 같은 시스템 프로그램은 텍스트 파일이 아닙니다. 이러한 파일은 컴퓨터 프로세서만 이해할 수 있는 언어로 작성된 바이너리 파일입니다.
이번에는 ls 명령 자체를 확인합니다. ls 명령은 /bin 디렉터리에 있습니다.
file 명령으로 형식을 확인합니다.
file /bin/ls
출력이 다소 복잡해 보여도 유용한 정보를 담고 있습니다.
/bin/ls: ELF 64-bit LSB pie executable, x86-64, ...
걱정하지 않아도 됩니다. 출력의 의미는 다음과 같습니다.
- ELF: Linux 프로그램의 표준 형식입니다 (Windows 의
.exe와 비슷합니다). - executable: 실행할 수 있는 프로그램입니다.
ELF 는 Executable and Linkable Format의 약자입니다. 많은 Linux 시스템에서 사용하는 표준 바이너리 형식입니다. 전체 이름을 외울 필요는 없지만, ELF 를 보면 "Linux 실행 파일"이라고 이해할 수 있어야 합니다.
핵심은 file 명령이 이 파일을 **실행 파일 (executable)**이라고 알려 주었다는 점입니다. /bin/ls에 cat을 실행하면 화면에 이상한 기호가 가득 표시됩니다. 파일이 바이너리라는 사실을 알면 다음과 같이 판단할 수 있습니다. "이 파일은 읽지 말고 실행해야 합니다."
알 수 없는 파일 식별하기
이제 탐정처럼 파일을 조사합니다. 프로젝트 디렉터리에 의심스러운 파일 두 개가 있습니다. mystery_file과 fake_image.jpg입니다.
사례 1: 이름 없는 파일
mystery_file에는 확장자가 없습니다. 텍스트 파일일까요? 프로그램일까요?
다음 명령으로 확인합니다.
file mystery_file
결과는 다음과 같습니다.
mystery_file: PNG image data, ...
확인 결과 이 파일은 PNG 이미지입니다. 파일 이름에 확장자가 없어도 Linux 는 파일 내부에 있는 PNG 이미지의 시그니처를 확인해 형식을 식별했습니다.
사례 2: 거짓말하는 파일
이번에는 fake_image.jpg를 확인합니다. 확장자는 "JPEG 이미지"라고 말하는 것처럼 보입니다. 실제로도 그럴까요?
file fake_image.jpg
결과는 다음과 같습니다.
fake_image.jpg: ASCII text
확장자가 잘못된 것입니다. 실제로는 텍스트 파일일 뿐입니다.
이 파일이 텍스트라는 것을 확인했으므로 안전하게 읽을 수 있습니다.
cat fake_image.jpg
이처럼 파일 이름이 아니라 파일 내용을 기준으로 파일을 식별하는 기술이 초보자와 숙련된 Linux 사용자를 구분하는 중요한 능력입니다.
이는 Linux 가 일부 데스크톱 운영 체제보다 확장자에 덜 의존하는 이유 중 하나이기도 합니다. 확장자는 유용한 관례이지만, Linux 는 파일 자체를 검사해 더 많은 정보를 확인할 수 있습니다.
요약
파일의 라벨을 그대로 믿지 않고 파일의 실제 형식을 확인하는 방법을 배웠습니다.
file filename: 파일의 실제 형식을 확인하는 명령입니다.- 확장자는 잘못될 수 있습니다:
.jpg라고 해서 항상 이미지 파일인 것은 아닙니다. - 확장자가 없어도 문제없습니다: Linux 는 파일 형식을 확인하는 데 확장자가 필요하지 않습니다.
이제 어디서든 마주칠 수 있는 알 수 없는 파일을 확인할 수 있습니다!



