freedesktop.org 에서 2003년도에 정의한 내용인데… 난 지금 봤다. 이상하게 요즘 사용하는 툴에서 config 파일을 $HOME/.config로 넣고 있어서 확인한 내용 정리.

XDGCross Desktop Group의 줄임말.

환경 변수 설명

  • MacOS에서는 아래 변수가 정의되어있지 않기에 비어있음. Linux는 기본으로 들어가있을것같은데 찾지 않음.
  • 모든 경로는 절대 경로여야하며, 상대경로로 작성시 무시됨.
  • 디릭토리 우선순위: HOME 변수 >> DIRS

사용자 실행파일 DIR

  • $HOME/.local/bin 에 저장될 수 있으며, 리눅스 배포판에서는 UNIX $PATH 환경 변수에 적절한 위치로 보이게 설정해야함.
  • 왠만해서는 하나의 아키텍처 시스템에서 사용되는 $HOME이지만 다른 아키텍처 시스템에서 공유될 수 있으니 조심해서 사용할 것.

XDG_DATA_HOME

  • $XDG_DATA_HOME
  • 기본값: $HOME/.local/share
  • 사용자별 데이터 파일을 저장하는 기본 디렉토리

XDG_DATA_DIRS

  • $XDG_DATA_DIRS
  • 기본값: /usr/local/share/:/usr/share/
  • 데이터 파일 검색시 추가로 확인할 디렉토리 집합
  • 우선 순위별로 추가하고 구분은 :를 이용

XDG_CONFIG_HOME

  • $XDG_CONFIG_HOME
  • 기본값: $HOME/.config
  • 사용자별 구성 파일을 저장하는 기본 디렉토리

XDG_CONFIG_DIRS

  • $XDG_CONFIG_DIRS
  • 기본값: /etc/xdg
  • 구성 파일 검색시 추가로 확인할 디렉토리 집합
  • 우선 순위별로 추가하고 구분은 :를 이용

XDG_STATE_HOME

  • $XDG_STATE_HOME
  • 기본값: $HOME/.local/state
  • 사용자별 상태 파일을 저장하는 기본 디렉토리
  • 상태 파일?: 작업 기록, 애플리케이션 현재 상태 등등등…(?)

예제: gh state 파일

.local/state/gh
 cat state.yml 
───────┬─────────────────────────────────────────────────────────
        File: state.yml
───────┼─────────────────────────────────────────────────────────
   1    checked_for_update_at: 2024-06-30T11:43:11.458951+09:00
   2    latest_release:
   3        version: v2.52.0
   4        url: https://github.com/cli/cli/releases/tag/v2.52.0
   5        publishedat: 2024-06-24T19:10:40Z
───────┴─────────────────────────────────────────────────────────-

XDG_CACHE_HOME

  • $XDG_CACHE_HOME
  • 기본값: $HOME/.cache
  • 사용자별 캐시 데이터 파일을 저장하는 기본 디렉토리

XDG_RUNTIME_DIR

  • $XDG_RUNTIME_DIR
  • 사용자별 애플리케이션 런타입 파일 및 기타 파일 객체(소켓, 이름이 지정된 파이프 등)을 저장하는 기본 디렉토리
  • [MUST] 사용자만 읽기, 쓰기, 접근이 가능해야함 (Mode: 0700)
  • [MUST] 로컬 파일 시스템에만 존재해야하며, 공유되는 곳에 있어서는 안됨.
  • [MUST] 사용자 로그인시 생성되고, 로그아웃되면 제거됨.
  • [MAY] 주기적으로 정리 대상이 될 수 있음.
  • 파일을 삭제하지 않도록 하려면 6시간마다 access time timestamp를 수정하거나, 파일에 sticky 비트를 설정해야함.
  • 해당 변수가 설정되지 않은 경우
  • 애플리케이션에서 유사한 기능을 가진 대체 디렉토리로 대체하고 경고 메시지를 출력하게 해야함.
  • 통신, 동기화 목적으로 사용해야하며, 런타임 메모리에 상주가 가능하나 반드시 디스크로 스왑 아웃하지 않으니 대용량 파일을 저장해서는 안됨.