- XDG Base Directory Specification은 다양한 애플리케이션이 설정 파일, 캐시, 데이터 파일 등을 일관적인 위치에 저장하고 탐색할 수 있도록 하기 위해 제안된 표준이다.
- 각 파일이 어떤 목적을 가지며 어떤 환경 변수에 의해 그 위치가 결정되는지를 정의한다.
명세에 있는 주요 디렉터리 역할은 아래와 같다. 모든 환경 변수는 절대 경로를 가져야 하며, 상대 경로가 주어질 경우 해당 값은 무효로 간주된다.
목적 | 환경 변수 | 기본값 (설정되지 않은 경우) | 설명 |
---|---|---|---|
사용자 데이터 파일 저장 | $XDG_DATA_HOME | $HOME/.local/share | 문서, 미디어 썸네일 등 |
시스템/공통 데이터 탐색 경로 | $XDG_DATA_DIRS | /usr/local/share/:/usr/share/ | 데이터 파일 검색시 추가로 확인할 디렉토리 집합 우선 순위별로 추가하고 구분은 :를 이용 |
사용자 설정 파일 저장 | $XDG_CONFIG_HOME | $HOME/.config | 애플리케이션 설정 등 |
시스템/공통 설정 탐색 경로 | $XDG_CONFIG_DIRS | /etc/xdg | 구성 파일 검색시 추가로 확인할 디렉토리 집합 우선 순위별로 추가하고 구분은 :를 이용 |
사용자 상태 데이터 저장 | $XDG_STATE_HOME | $HOME/.local/state | 로그, 사용 기록, 뷰 상태 등 |
사용자 실행 파일 저장 | (고정 아님) | $HOME/.local/bin | 유저가 만든 실행 파일, 스크립트 등 |
사용자 캐시 데이터 저장 | $XDG_CACHE_HOME | $HOME/.cache | 재생성 가능한 임시 데이터 |
사용자 런타임 파일 저장 | $XDG_RUNTIME_DIR | (없음) | 로그인 세션과 수명 연동되는 소켓, 파이프 등 |
규칙
읽기/쓰기 작업
- 쓰기 작업 시 대상 디렉토리가 존재하지 않으면
0700
권한으로 생성을 시도한다. 실패 시 사용자에게 오류 메시지를 출력해도 된다. - 읽기 작업 시 대상 디렉토리나 파일이 없거나 접근할 수 없을 경우 해당 위치는 무시되며, 필요한 파일을 찾을 수 없을 경우 역시 오류를 사용자에게 알릴 수 있다.
경로 우선순위
- 설정 또는 데이터가 사용자 전용 디렉토리에 존재할 경우, 그 값을 우선한다.
- 설정 또는 데이터가 여러 시스템 디렉토리에 중복 존재할 경우:
- 각 스펙이 어떤 방식으로 병합 혹은 선택할지를 정의해야 한다.
- 보통 첫 번째 디렉토리가 가장 높은 우선순위를 가진다.
$XDG_RUNTIME_DIR
은 특별히 다음 조건을 만족해야 한다.
- 해당 디렉토리는 반드시 사용자가 소유하고 있어야 하며, 읽기 및 쓰기 권한도 사용자 본인만 가져야 한다.
- 퍼미션은 반드시
0700
으로 설정되어야 한다. - 사용자가 로그인했을 때 생성되고, 로그아웃 시 삭제되어야 하며, 여러 로그인 세션 간에는 공유되어야 한다.
- 시스템 재부팅 이후 해당 디렉토리에 저장된 파일은 보존되어선 안 된다.
- 디렉토리는 반드시 로컬 파일 시스템에 위치해야 하며, 유닉스 시스템 표준 기능(소켓, 심볼릭 링크, 메모리 매핑 등)을 지원해야 한다.
- 주기적인 청소가 가능하므로, 파일의 접근 시간을 6시간마다 갱신하거나 sticky bit를 설정해야 파일 유지가 보장된다.
다른 스펙에서의 참조 예시
-
데이터 파일을
$XDG_DATA_DIRS/subdir/filename
로 정의했다면:- 기본 파일은
/usr/share/subdir/filename
에 설치된다. - 사용자 정의 버전은
$XDG_DATA_HOME/subdir/filename
에 생성될 수 있다. - 탐색 시
$XDG_DATA_HOME
과$XDG_DATA_DIRS
를 모두 포함하여 순서대로 탐색해야 한다.
- 기본 파일은
-
설정 파일도 마찬가지로
$XDG_CONFIG_DIRS/subdir/filename
과 같은 형식을 따른다.
참고