Post

[개발 환경] 리눅스 파일 시스템 구조

[개발 환경] 리눅스 파일 시스템 구조

리눅스나 서버 환경에서 작업하다 보면 /data, ./data, ~/data처럼 비슷해 보이지만 서로 다른 경로 표현을 자주 보게 된다.

경로 표현명칭의미실제 경로 예시
/data절대 경로Root 디렉토리 / 바로 아래에 있는 data 디렉토리/data
./data상대 경로현재 내가 위치한 디렉토리 안에 있는 data 디렉토리{현재 디렉토리 경로}/data
~/data홈 디렉토리 기준 경로현재 로그인한 사용자의 홈 디렉토리 안에 있는 data 디렉토리/home/{사용자 이름}/data

fig1

위는 일반적인 서버의 구조를 표현한 것이다.

Root (/) 디렉토리

Root는 리눅스 파일 시스템의 최상위 디렉토리이다.
절대 경로는 항상 /에서 시작된다.

일반적으로 /bin, /etc처럼 시스템 운영에 필요한 디렉토리는 일반 사용자가 마음대로 수정할 수 없다.
이런 위치의 파일을 수정하려면 sudo와 같은 관리자 권한이 필요하다.

현재 (.) 디렉토리

.은 현재 내가 위치한 디렉토리를 의미한다.

예를 들어 현재 위치가 /home/suno/project라면, ./data는 다음 경로를 의미한다.

1
/home/suno/project/data

참고로 ./datadata는 대부분 같은 의미로 사용된다.

Home (~) 디렉토리

Home은 사용자마다 할당된 개인 작업 공간이다.

예를 들어 사용자 이름이 suno라면 홈 디렉터리는 보통 다음과 같다.

1
/home/suno

쉘에서는 이 홈 디렉터리를 ~로 줄여서 표현할 수 있다.

1
~/data

위 경로는 실제로 다음 경로를 의미한다.

1
/home/suno/data

즉, ~/data는 현재 로그인한 사용자의 홈 디렉토리 안에 있는 data 디렉토리를 의미한다.

홈 디렉토리에는 보통 개인 문서, 프로젝트 코드, 설정 파일 등이 저장된다.
일반 사용자는 자신의 홈 디렉터리 안에서 파일을 자유롭게 만들고 삭제할 수 있다.

일반적인 서버 환경에서는 다른 사용자의 개인 파일에 접근하지 못하도록 권한이 제한되어 있다.

일반적인 서버에서는 /home에는 사용자별 개인 디렉터리를 두고, /data에는 대용량 데이터나 공유 데이터를 저장하는 식으로 구성하는 경우가 많다.
특히 데이터셋, 모델 체크포인트, Anaconda처럼 용량이 큰 파일은 /home이 아니라 /data에 저장하는 경우가 많다.

이때 홈 디렉토리에서도 해당 파일이나 프로그램을 편하게 사용하기 위해 심볼릭 링크 (Symbolic Link)를 사용할 수 있다.
심볼릭 링크는 실제 파일이나 디렉토리가 있는 위치를 가리키는 바로가기와 비슷한 개념이다.

예를 들어 위의 그림처럼, Anaconda의 실제 파일을 /data/suno/anaconda 위치에 저장했다고 하자.

그리고 홈 디렉토리에서 다음과 같은 심볼릭 링크를 만들었다고 하자.

1
/home/suno/anaconda -> /data/suno/anaconda

이 경우 /home/suno/anaconda는 실제 파일이 저장된 디렉토리가 아니라, /data/suno/anaconda를 가리키는 바로가기 역할을 한다.

즉, 사용자는 홈 디렉토리에서 Anaconda를 사용하는 것처럼 보이지만, 실제 파일은 /data에 저장되어 있는 구조이다.

This post is licensed under CC BY 4.0 by the author.