Skip to content

XDG Base Directory

https://wiki.archlinux.org/title/XDG_Base_Directory

  • 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 권한으로 생성을 시도한다. 실패 시 사용자에게 오류 메시지를 출력해도 된다.
  • 읽기 작업 시 대상 디렉토리나 파일이 없거나 접근할 수 없을 경우 해당 위치는 무시되며, 필요한 파일을 찾을 수 없을 경우 역시 오류를 사용자에게 알릴 수 있다.

경로 우선순위

  1. 설정 또는 데이터가 사용자 전용 디렉토리에 존재할 경우, 그 값을 우선한다.
  2. 설정 또는 데이터가 여러 시스템 디렉토리에 중복 존재할 경우:
    • 각 스펙이 어떤 방식으로 병합 혹은 선택할지를 정의해야 한다.
    • 보통 첫 번째 디렉토리가 가장 높은 우선순위를 가진다.

$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과 같은 형식을 따른다.


참고