리눅스에서 **파일(File)**과 **디렉터리(Directory)**는 시스템의 중요한 구성 요소이다.
리눅스는 하드웨어 장치, 네트워크 소켓, 프로세스 정보 같은 시스템 자원들을 모두 파일로 관리하고 디렉터리는 이러한 파일들을 체계적으로 구성하여 사용자가 쉽게 접근하고 관리할 수 있도록 도와준다. 따라서 리눅스를 이해하기 위해서는 필수적으로 파일과 디렉터리의 역할과 구조를 이해해야 한다.
**파일(File)**은 의미가 있는 정보를 모아둔 논리적인 단위로 종이 문서의 묶음을 말하는 파일에서 유래한 용어이다. 텍스트 파일, 실행 파일, 이미지 파일 등 목적에 따라 다양한 파일들이 존재하며, 각 파일의 이름은 일반적으로 <파일이름>.<확장자명>으로 구성된다.
확장자(예: .png, .jpg, .docx, .exe 등)로 파일의 종류를 GUI로 보여주는 macOS나 Windows와 달리 우리가 사용하고 있는 CLI 환경에서는 큰 상관이 없다. 또한 운영체제는 파일의 맨 처음 특정 bytes만큼을 읽어 구분하기 때문에 반드시 확장자명을 설정할 필요가 없다.
파일의 맨 앞에 특정한 바이트로 해당 파일의 종류를 나타내는 값을 매직 넘버(Magic Number) 혹은 **파일 시그니쳐(File Signature)**라 부른다.
예를 들어, Windows에서 report.docx라는 파일이 있으면 확장자인 .docx를 보고 워드 문서로 인식한다. 하지만 리눅스에서는 확장자가 없어도 파일 내부 데이터를 확인해 워드 문서인지 판별하기 때문에 파일 이름에 .docx라는 확장자가 없어도 워드 문서로 인식된다.
리눅스에서 확장자가 필수는 아니지만 파일 이름만 보고 쉽게 구분할 수 있도록 .sh(셸 스크립트), .log(로그 파일)같은 확장자를 붙이는 것이 일반적이다.
**디렉터리(Directory)**는 파일을 구분하기 위해 사용하는 **네임스페이스(Namespace)**이며 Windows와 같은 환경에서는 주로 폴더라고 부른다.
디렉터리는 다른 디렉터리 혹은 파일을 내부에 포함할 수 있으며, 이 때 포함되는 디렉터리를 **하위 디렉터리(Child Directory/Sub Directory)**라 부른다.
하위 디렉터리를 포함하는 디렉터리는 하위 디렉터리 관점에서 위에 있으므로 **상위 디렉터리(Parent Directory)**라 부른다. 리눅스에서는 디렉터리를 특수한 파일로 취급하여 관리하고, 디렉터리와 파일들은 일반적으로 트리 구조를 형성한다.
/ 루트 디렉터리 기준으로 하위에는 아래와 같은 경로들이 존재한다.
| 디렉터리 경로 | 목적 |
|---|---|
| /bin | 기본 실행 프로그램 저장 |
| /boot | 리눅스 커널과 부트로더 저장 |
| /dev | 디바이스 장치 파일 |
| /etc | 시스템 환경 설정 파일 저장 |
| /home | 사용자 별 홈 디렉터리 담는 디렉터리 |
| /lib | 공유 라이브러리 파일 저장 |
| /lost+found | 부팅 시 파일 시스템에 문제가 생기는 경우 복구에 사용하기 위함 |
| /media | 물리적 저장 장치들을 **마운트(Mount)**하기 위해 사용 |
| /mnt | 물리적 저장 장치들을 **마운트(Mount)**하기 위해 사용 |
| /opt | 추가적인 프로그램들을 설치하기 위해 사용 |
| /proc | 커널 관련 정보를 저장하기 위한 디렉터리이며, 현재 실행되고 있는 시스템의 모든 프로세스 정보가 저장됨 |
| /root | 루트(최고 관리자)의 홈 디렉터리. 일반 사용자와 홈 디렉터리가 분리되어 있음 |
| /sbin | 시스템 관리자를 위한 프로그램 저장 |
| /srv | 서버 시스템에서 사용되는 데이터 저장 |
| /tmp | 임시 파일 저장 |
| /usr | 사용자 어플리케이션들을 지원하기 위한 파일들을 저장 |
| /var | 로그 파일 저장 |
최상위 디렉터리는 /로 표기하며, 그 하위 디렉터리는 /<directory 1>, 그 하위 디렉터리는 /<directory 1>/<directory 2>와 같이 표기한다. 어떤 폴더나 디렉터리의 경로를 최상위 디렉터리부터 표시한 경로를 절대 경로라 부른다.
반면 사용한 경로가 /부터 시작하지 않은 경우 상대 경로라 부른다.