[OS] 파일시스템

adam adam·2022년 9월 13일
0

기본 개념 : 파일 (저장) 시스템

(TO ME) 한글에서 기계어로의 저장 체계
(EX)
텍스트 파일이름이 '나는 UTF-8'
텍스트 파일내용은 '나는 Windows가 기본 UTF-8, 그리고 사용자가 설정가능, cp949는 커널레벨'인 텍스트 파일을 0101010...의 기계어로 전환해주는 함수

윈도우의 파일 저장 시스템

NTFS : New Technology File System, NT File System

  • 최근 윈도우 운영체제의 파일 저장 시스템. MS 공식문서에 의하면 22년 윈도우 운영체제에도 적용되었다.
  • 위키피디아 문서의 Structure와 History 그리고 MS Windows API 문서에 의하면 filename 등의 metadata를 유니코드로 저장하는 MFT 방식을 2001년의 3.1 version부터 적용하였고, Windows OS의 유니코드 업데이트에 기여해왔다.
  • MS 공식문서에서는 2008년 윈도우 서버부터 applied to 되었다고 언급된다. 다만, 위키피디아 문서의 History에 의하면 Windows XP 이상의 Windows에 MFT가 포함된 NTFS가 적용되었다. 이는 2001년부터이다.

이러한 파일 저장 시스템에 의해 저장된 파일들은 리눅스 서버로 전송해도 제목, 날짜와 같은 핵심적인 데이터들은 메타데이터로서 유니코드(가령, utf-8, utf-16)으로 저장되기 때문에 파일 이름의 한글이 깨지지 않는다.

윈도우 XP만 해도 NTFS 3.1 이상이 탑재되므로, 현 실습 시스템 환경인 윈도우10 노트북은 NTFS 3.1 이상이 보장된다.

그리고, 22년 윈도우10의 경우 파일 내용과 같은 기본 데이터들의 인코딩도 기본값은 utf-8이다. 이는 메모장과 노트패드로 확인가능하다.

!! 유의 !!

  • 리눅스 쉘에서 file 명령어의 한계로 charset이 iso-8859-1로 조회되나, 사전에 Windows 상에서 cp949로 인코딩된 파일이다.

또한, file 명령어의 한계로, Windows 에서 UTF-8로 인코딩된 파일이더라도, 파일 내용에 한글이 탐색되지 않으면 en-ascii로 charset이 조회된다. 이때 인코딩 변경없이 파일에 한글 내용을 추가하면 utf-8로 정상 조회된다.

윈도우 파일 저장 시스템의 보급과 호환

공식 문서들에 따르면, 파일 이름의 한글이 깨지는 에러는 MFT가 보급된 이래로 발생하지 않아야 한다. 왜냐하면 유니코드, 가령 UTF-8,로 저장된다고 하기 때문이다.

하지만, 대체로 5~10년 전 글에서 윈도우의 파일명, 파일내용이 리눅스로 보내지면 둘다 깨졌다고한다.

여기서부터는 EUC-KR로의 회귀나, putty나 powershell 같은 접근 툴 상의 인코딩 설정 오류, unzip과 같은 명령어별 버전의 문제 등이 연관된것으로 판단한다.

윈도우 운영체제에서 파일 인코딩 조회법

  • 메모장이나 노트패드 방식
    메모장이나 노트패드 편집기로 파일 열고, 다른 이름으로 저장할 때, 인코딩 조회 및 변경이 가능하다. 윈도우 운영체제에서의 인코딩 확인법은 cli가 아니라 GUI로 이해가능-출처

  • git 존재 시 git bash 활용
    해당 폴더에서 git bash를 열어서 linux와 같이 'file -i *' 하면 해당 폴더의 인코딩 정보를 조회가능하다, 하지만 영문 파일의 경우 utf-8 인코딩이 en-ascii로 조회되는 버그가 있다. -출처

  • 프로그래밍 언어의 I/O함수를 통한 인코딩 확인 방법, 다만 해당 글은 함수 인코딩이 파일과 맞지 않아 실패 - 출처

  • 포렌식 툴을 활용한 디스크 속 기계어 해석, 거의 현미경으로 조회하는 법이다. 포렌식의 영역이다.
    포렌식 툴 소개, 디스크 조회와 NTFS의 MTF 구조 , 디지털 포렌식의 NTFS 조회 사례

리눅스의 파일 저장 시스템

EXT4 : EXTended file system 4

  • 최근 리눅스, 가령 Ubuntu, 에서 쓰이는 파일 시스템 중 하나 - 출처
  • 위키피디아 문서의 역사의 따르면 2008년 ext4의 안정화 버전이 리눅스 커널 버전 2.6.28에 포함
  • 이 자체로 인코딩을 결정하진 않더라도, UTF-8을 기본으로 하는 Linux와 함께 UTF-8로 파일들이 저장된다고 볼 수 있다. - 출처

이러한 리눅스의 파일 저장 시스템으로 파일을 보낼 때, OS Kernel 수준에서 기계어를 UTF-8로 저장하기 때문에,

Filezillar, putty 같은 접근 툴의 인코딩을 UTF-8로 설정해야, 서버의 파일 이름들이 왜곡없이 조회가능하다.

번외 : 파일 저장 시스템과 인코딩은 독립이다?

의외로 파일시스템(혹은 이를 품는 운영체제)과 인코딩은 별개의 영역이나 의존 관계가 아니라고 말하는 글도 있다.

  • On Unix-like systems, the encoding of file names is not set at the filesystem level, but rather in the user environment. - 출처

  • The Windows file system (NTFS) doesn't store any metadata for a file beyond the trivial stuff like name, extension, last written date, etcetera. Nothing that's specific for the file type. - 출처

  • The unix/posix layer of linux doesn't care which encoding you use. - 출처

그러나,
운영체제별로 기본적인 인코딩은 존재하고 명령어를 통해 조회가능하고 변경가능하다. 특히 리눅스는 locale에 명확히 제시된다.

정리하자면,
이들은 파일시스템을 사용자가 변경할 수 없는 영역으로 엄밀하게 정의하여 위와 같은 말을 하는 것으로 추측하고,

사용자가 쉘이나 ftp 툴과 같은 응용어플리케이션 단에서 사용자가 인코딩을 자유롭게 설정하기에 인코딩 기능을 애당초 파일 저장 시스템의 고정적인 부분보다 관련 변수로 이해하기에 이러한 표현을 쓰는 것으로 추측한다.

추가 : 윈도우-리눅스 명령어 비교대조

win , linux cmd 차이
https://bbaek-gwi-story.tistory.com/17

참고자료

0개의 댓글