리눅스/공통

디렉터리와 폴더 그리고 파일의 차이

씨실과 날실 2020. 9. 7. 09:00

디렉터리 / 폴더 / 파일

디렉터리와 파일에 대하여

어떤 OS를 사용하든 결국은 디렉터리와 파일 두 가지로 구성됩니다. 파일은 실제 정보(데이터)를 담고 있는 개별 문서를 의미하고 디렉터리는 그러한 파일을 분류해 한데 모아 놓은 일종의 서류철을 의미합니다.

서류철은 다시 문서 보관상자에 담고 보관 상자는 또다시 캐비빗 등에 분류해 보관할 수 있듯 디렉터리도 수직적 관계를 가질 수 있습니다. 즉 디렉터리는 단순 파일 뿐만 아니라 하위 디렉터리를 포함할 수 있습니다.

디렉터리에 대한 위의 설명은 적확한 설명은 아닙니다. 일반인의 보다 쉬운 이해를 돕기 위해 약간 왜곡된 설명입니다.

정확한 개념 설명은 아래 디렉터리와 폴더의 차이 파트의 내용을 참고하시기 바랍니다.


디렉터리와 폴더의 차이

윈도가 출현하기 전 즉 도스 시절에는 디렉터리가 파일을 모아 놓은 장소를 일컫는 일반적인 단어였습니다. 그러나 그래픽 인터페이스를 기반으로 한 윈도가 나타나면서 폴더라는 용어가 대중화되기 시작했습니다. 그래서 지금은 디렉터리와 폴더를 혼용되고 있습니다.

그러나 폴더와 디렉터리가 혼용되는 경우는 대부분 윈도를 사용하는 경우고 유닉스나 리눅스 계열 OS 사용자들은 대부분 디렉터리라는 단어를 쓰고 폴더라는 용어는 쓰지 않는 편입니다.

대중들은 양 단어의 차이에 대해 깊게 생각하지 않고 섞어 씁니다만 엄밀히 말하자면 디렉터리와 폴더는 그 개념을 달리 합니다.


디렉터리

디렉터리는 이름에서 알 수 있듯 전화번호부와 유사한 성격을 가지고 있습니다. 전화번호부는 각 사람의 이름이 적혀 있고 해당 이름을 지닌 사람의 단편적인 정보, 예를 들어 주소, 전화번호, 직장과 부서 등이 적혀 있습니다.

이렇듯 전화번호부는 각 사람을 다른 이들과 구별할 수 있는 최소한의 일부 속성을 담고 있을 뿐 그 사람에 대한 상세한 데이터가 담겨 있지는 않습니다. 디렉터리도 마찬가지입니다. 디렉터리에 실제 데이터가 있는 파일이 담겨져 있는 것이 아니라 하위 디렉터리나 파일의 구조화된 속성 정보(위치 등)만을 담아 해당 하위 디렉터리 또는 파일을 연결해주는 매개체라고 보는 것이 정확합니다.

우리는 흔히 디렉터리를 일반 파일과 따로 구별하지만 엄밀히 말하면 디렉터리도 파일의 일종입니다. 아래는 이것을 단적으료 표현한 문장입니다.


Everything is a file.


디렉터리는 파일일 뿐입니다. 단 그 안에 담긴 정보가 우리가 흔히 생각할 수 있는 일반적인 데이터가 아니라 해당 디렉터리와 연결된 하위 디렉터리와 파일들의 포인터 정보인 것이지요.

예를 들어 어떠한 파일이 A라는 디렉터리에서 B라는 디렉터리로 이동시켰다고 가정합시다. 디스크에서 파일 위치가 실제로 재배치되는 것이 아니라 디렉터리의 inode가 바뀌는 것일 뿐입니다.

디렉터리가 파일임을 눈으로 확인할 수 있는 예가 있습니다.

study@study-VirtualBox:~$ touch test
study@study-VirtualBox:~$ ls -F
test  공개/  다운로드/  문서/  바탕화면/  비디오/  사진/  음악/  템플릿/
study@study-VirtualBox:~$ mkdir test
mkdir: `test' 디렉토리를 만들 수 없습니다: 파일이 있습니다
study@study-VirtualBox:~$ 

위에서 보듯 같은 위치에 동명의 디렉터리와 파일을 만들 수 없습니다.

즉 디렉토리는 특수한 형태의 파일인 것입니다. 디렉터리 외에도 여러 특수 형태 파일이 존재합니다.

파일의 특수 형태

디렉터리(directory) / 링크(link) / 소켓(socket) / 장치(device)

디렉터리가 파일의 일종이라 할지라도 분명 특별한 속성이 있습니다. 그중 가장 핵심은 이 디렉터리는 수직적 구조, 트리 구조로 파악이 가능하다는 점일 것입니다.. 이러한 구조를 구축함으로써 각 파일들을 유의미하게 분류하고 관리할 수 있게 됩니다.


폴더

폴더는 GUI의 윈도 계열 OS에서 도입된 개념입니다. 많은 이들이 폴더를 디렉터리와 유사한 개념으로 이해하나 정확한 이해는 아닙니다.

폴더는 디렉터리를 넘어서는 일종의 가상 분류 개념입니다. 실제로 윈도의 탐색기를 훓어보면 일반 폴더(디렉터리와 동일)와 달리 제어판, 네트워크 환경, 프린터 등과 같은 다른 유형의 특수 폴더가 존재합니다. 이것들은 OS 사용자가 각 개별 항목들의 절대 경로를 알 필요 없이 유의미한 유개념별로 한데 모아 관리할 수 있는데 이것들을 폴더라는 이름으로 관리하는 것입니다. 즉 폴더는 특수 형태의 가상 폴더와 일반 폴더(=디렉터리)로 구성됩니다.

디렉터리가 절대경로 중심의 수직적 구조라면 폴더는 단순히 파일이나 디렉터리뿐만 아니라 파일에 해당하지 않는 Shell 네임 스페이스의 개체를 포함한 가상 분류 중심의 수평적 구조라고 볼 수 있습니다.


리눅스의 가상 디렉터리

윈도는 물리적인 디스크별로, 논리적인 파티션별로 각각의 드라이브명을 부여합니다. 시스템 드라이브는 C:\라는 이름을 부여받습니다. 즉 통일된 디렉터리 구조를 지니지 못하고 드라이브별로 디렉터리가 구성됩니다.

그러나 리눅스는 가상의 디렉터리를 구성하여 루트(/) 디렉터리 또는 하위 디렉터리에 물리적 장치, 원격 장치 등을 가리지 않고 마운트하여 마치 하나의 로컬 디스크에서 작업하는 것처럼 구성됩니다. 즉 리눅스에서는 드라이브라는 개념은 없고 모든 장치가 디렉터리와 파일로 인식됩니다. 따라서 리눅스에서는 마운트/언마운트와 포인터라는 개념이 중요합니다.


리눅스의 디렉터리 구조

리눅스의 디렉터리 구조는 파일시스템 계층구조 표준(FHS)를 따릅니다. 따라서 리눅스 디렉터리 구조를 알고자 한다면 F파일시스템 계층구조 표준(FHS)에 대해 학습할 필요가 있습니다. 그러나 이 내용이 방대하여 글을 따로 작성하였습니다.

 보다 리눅스의 디렉터리 구조에 대한 자세한 내용은 위 글을 참고하시기 바랍니다.