[개발 환경] 리눅스 파일 시스템 구조
리눅스나 서버 환경에서 작업하다 보면 /data, ./data, ~/data처럼 비슷해 보이지만 서로 다른 경로 표현을 자주 보게 된다.
| 경로 표현 | 명칭 | 의미 | 실제 경로 예시 |
|---|---|---|---|
/data | 절대 경로 | Root 디렉토리 / 바로 아래에 있는 data 디렉토리 | /data |
./data | 상대 경로 | 현재 내가 위치한 디렉토리 안에 있는 data 디렉토리 | {현재 디렉토리 경로}/data |
~/data | 홈 디렉토리 기준 경로 | 현재 로그인한 사용자의 홈 디렉토리 안에 있는 data 디렉토리 | /home/{사용자 이름}/data |
위는 일반적인 서버의 구조를 표현한 것이다.
Root (/) 디렉토리
Root는 리눅스 파일 시스템의 최상위 디렉토리이다.
절대 경로는 항상 /에서 시작된다.
일반적으로 /bin, /etc처럼 시스템 운영에 필요한 디렉토리는 일반 사용자가 마음대로 수정할 수 없다.
이런 위치의 파일을 수정하려면 sudo와 같은 관리자 권한이 필요하다.
현재 (.) 디렉토리
.은 현재 내가 위치한 디렉토리를 의미한다.
예를 들어 현재 위치가 /home/suno/project라면, ./data는 다음 경로를 의미한다.
1
/home/suno/project/data
참고로 ./data와 data는 대부분 같은 의미로 사용된다.
Home (~) 디렉토리
Home은 사용자마다 할당된 개인 작업 공간이다.
예를 들어 사용자 이름이 suno라면 홈 디렉터리는 보통 다음과 같다.
1
/home/suno
쉘에서는 이 홈 디렉터리를 ~로 줄여서 표현할 수 있다.
1
~/data
위 경로는 실제로 다음 경로를 의미한다.
1
/home/suno/data
즉, ~/data는 현재 로그인한 사용자의 홈 디렉토리 안에 있는 data 디렉토리를 의미한다.
홈 디렉토리에는 보통 개인 문서, 프로젝트 코드, 설정 파일 등이 저장된다.
일반 사용자는 자신의 홈 디렉터리 안에서 파일을 자유롭게 만들고 삭제할 수 있다.
일반적인 서버 환경에서는 다른 사용자의 개인 파일에 접근하지 못하도록 권한이 제한되어 있다.
Symbolic Link
일반적인 서버에서는 /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에 저장되어 있는 구조이다.
