- 공식 문서: XDG Base Directory Specification
- freedesktop.org Specifications Wiki - Desktop base directories
freedesktop.org
에서 2003년도에 정의한 내용인데… 난 지금 봤다. 이상하게 요즘 사용하는 툴에서 config
파일을 $HOME/.config
로 넣고 있어서 확인한 내용 정리.
XDG
는 Cross 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
비트를 설정해야함. - 해당 변수가 설정되지 않은 경우
- 애플리케이션에서 유사한 기능을 가진 대체 디렉토리로 대체하고 경고 메시지를 출력하게 해야함.
- 통신, 동기화 목적으로 사용해야하며, 런타임 메모리에 상주가 가능하나 반드시 디스크로 스왑 아웃하지 않으니 대용량 파일을 저장해서는 안됨.