2018년 1월 24일 수요일

[File & File System - 1 ] 파일 개념

File & File System - 1 

1. 파일 기본 개념 - 파일(File)이란?

파일의 정의는 "컴퓨터 등의 디지털 기기에서 의미 있는 정보를 담고있는 논리적인 단위"이다.
사용자 관점에서 컴퓨터 파일은 사람이 보고, 수정하고, 실행할 수 있는 데이터이다. 수많은 종류와 다양한 형태로 사용되는 모든 파일들은 실제로는 0과 1로 이루어져 있다.
- text.txt파일은 평범한 문자열(This is a text file.)을 갖고있는 파일이다. 실제 데이터는 0, 1로 이루어진 바이너리 데이터(010101....1010)임을 볼 수 있다. 하지만 0과 1로 표현된 데이터는 사람이 보기 어렵기때문에 보통 날 것의 데이터(Raw data)는 16진수(Hex)로 표현하는게 일반적이다.

- 16진수(Hex)로 본 데이터

하지만 간단한 문자열을 갖고있는 이런 텍스트 파일 외에도, 컴퓨터에는 압축 파일, 실행 파일, 문서  파일, 이미지 파일, 동영상 파일 등 수많은 종류의 파일이 있다. 컴퓨터가 이러한 다양한 종류의 파일들을 구분하는데에는 두가지 방법이 있다.


2. 파일의 구분

사용자가 파일의 종류를 구분하는데는 보통 파일의 확장자를 사용할 수 있다. 파일의 확장자는 [파일명.확장자]와 같이 대부분의 운영체제에서 comma(.)를 사용하여 구분된 comma뒤의 문자를 말하는데, 사용자가 파일을 실행할 때, 이 파일의 확장자를 보고 운영체제가 이에 필요한(연결된) 응용프로그램을 실행한다.
예를들어 "한글.hwp" 파일을 실행하는 경우, hwp 확장자를 통해 운영체제는 이 파일이 한글 워드프로세서에서 사용하는 파일임을 알고(실제로는 설치 시 지정된다), 한글 워드프로세서를 실행하여 "한글.hwp"파일을 넘겨준다. 
한편 이미지 파일의 경우 GIF, JPEG, JPG, PNG 등의 여러 종류가 있다. 이렇게 각각 다른 알고리즘과 확장자를 갖고있는 이미지 파일이 윈도우즈 사진 뷰어나 그외 다양한 이미지 뷰어 소프트웨어에서 열 수 있는 까닭은, 해당 소프트웨어가 이 다양한 확장자의 이미지 파일을 모두 열 수 있도록 프로그래밍되어 있기 때문이다.

그렇다면 위의 내용을 통해 파일의 종류는 확장자로 구분되어 진다고 생각할 수도 있다. 하지만 실제로 파일의 확장자는 운영체제에서 해당 파일을 열기 위한 응용프로그램을 지정하는(연결시켜주는) 역할을 할 뿐이다. 
예를들어, 한글 워드프로세서로 작성된 파일 하나의 확장자를 hwp에서 jpeg로 변경해보자. 해당 파일의 아이콘이 이미지 파일의 아이콘으로 변경된다. 이 파일을 더블클릭하면, 이미지 뷰어 프로그램이 열리지만 아무것도 뜨지 않을 것이다. 그렇다면 한글 워드프로세서를 실행하여 확장자를 jpeg로 변경한 한글 파일을 한글 워드프로세서에 드래그&드롭 해보자. 아마 정상적으로 파일이 열릴 것이다. 한글 프로그램은 어떻게 확장자가 다른 파일을 정상적으로 열 수 있었을까?


 3. 파일 형식(File Format)

파일 형식(파일 포맷)은 간단히 말해 어떤 디지털 정보를 컴퓨터에 저장할 때 사용하는 방법이다. 파일 형식은 파일의 종류에 따라 각자 다른 고유한 구조를 사용하는데, 한글 파일은 한글 파일대로, 압축 파일은 압축 파일대로(Zip과 Alz는 다르다), 이미지 파일은 이미지 파일대로(JPG와 PNG는 다르다) 각자 다른 파일 형식을 가지고 있다.
이렇게 파일 형식을 다르게 사용하는 이유는 어떤 파일을 컴퓨터에 저장하고 이후 다시 사용하거나, 수정하는 등의 작업을 하는데 필요한 정보들이 모두 다르며, 프로그램 개발자가 이에 필요한 정보에 따라 임의의 형식을 만들었기 때문이다. 참고로 한글 파일의 파일 포맷은 한글 워드프로세서를 개발한 한컴에서 정한 것이고, 전세계적으로 사용하는 이미지 파일의 포맷인 제이펙(JPEG)은 국제 표준화 기구(ISO)와 국제 전기 통신 연합(ITU-T)에서 정한 것이다.

이처럼 여러가지 정보가 모여 하나의 파일을 이루며, 이러한 구조를 파일 형식(File Format)이라고 한다. 
실제로 파일의 구조가 어떻게 이루어져 있는지 알아보기 위해 ZIP 압축 파일을 예로 들겠다. ZIP 파일의 구조는 다음과 같다. 

- wikipedia.org/wiki/ZIP_(file_format)

ZIP 파일은 크게 Local File Header, Central Directory, 그림에는 없는 End of central directory record로 3개의 파일 구조로 되어 있다.
본 글은 파일 구조를 분석하는 것이 목적이 아니므로 파일을 구분할 때 사용되는 파일 시그니처(Magic Number)를 포함하는 Local File Header의 구조를 살펴보자.

 Local File Header(30 bytes+가변 길이)
필드 자료형 / 레코드 이름 크기 (단위: 바이트)
signature(Magic Number) char frSignature[4] 4
version ushort frVersion 2
bit flag ushort frFlags 2
compression method enum COMPTYPE frCompression 2
last modification time DOSTIME frFileTime 2
last modification date DOSTIME frFileDate 2
crc-32 checksum uint frCrc 4
compressed size uint frCompressedSize 4
uncompressed size uint frUncompressedSize 4
file name length ushort frFileNameLength 2
Extra field length ushort frExtraFieldLength 2
File name char frFileName 가변적
Extra field uchar frExtraField 가변적
- Zip파일의 Local File Header는 위와 같으며 실제로 ZIP파일의 Hex데이터를 보면 다음과 같다.

각 레코드가 의미하는 데이터와 ZIP 구조를 분석하려면 [http://blog.naver.com/PostView.nhn?blogId=koromoon&logNo=220612641115&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView] 를 참고하기 바란다.







- 회색으로 BOLD된 시작 부분 36 Bytes가 Zip 파일의 Local File Header이다(한 바이트씩 띄어쓰기 되어있다. 50 4B = 2 bytes)

결론부터 말하자면 파일의 시그니처가 있는 처음 4bytes의 값이 "50 4B 03 04" 인 것을 볼 수 있다. 이 값은 해당 파일이 압축 파일 구조임을 가리키며 이 부분이 파일 시그니처(Magic Number)에 해당한다. 시그니처의 크기는 각 파일마다 크기가 다를 수 있으나 파일의 시작 부분에 있는 것은 동일하다. 파일의 전체 구조를 분석하지 않더라도 이 파일 시그니처를 보고 해당 파일이 어떤 파일인지를 알 수 있다. 그 외 다양한 파일의 시그니처 모음은 [http://forensic-proof.com/archives/300] 에 정리되어 있다.


4. 정리

본 글에서는 디지털 기기에서의 파일과 파일이 실제로는 어떻게 이루어져있는지를 간단하게 설명하였다. 다음 글에서는 이러한 파일이 어떻게 저장 장치(하드디스크)에 저장되어 있는지를 작성할 예정이다.



Reference
[1] https://ko.wikipedia.org/wiki/컴퓨터_파일
[2] wikipedia.org/wiki/ZIP_(file_format)
[3] http://blog.naver.com/PostView.nhn?blogId=koromoon&logNo=220612641115&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
------------------------
Copyright 2018. s3h0 all rights reserved.
최초 작성일 : 2018-01-22
최종 수정일 : 2018-01-24
-copied from tistory

댓글 없음:

댓글 쓰기

find로 찾은 파일을 특정 디렉터리로 복사하기(macOS)

환경 : macOS 10.13.6(High Sierra), macOS 10.14 (Mojave) 리눅스에서 사용하던 몇 가지 방법이 안먹혀서 정리 홈 디렉터리(~/)에서 모든 pdf확장자 파일을 찾아 홈 디렉터리의 Pdf_Files 디렉터리로 복...