Skip to content

Commit

Permalink
feat: xdg-dir 환경변수에 대해 작성하다
Browse files Browse the repository at this point in the history
- 확인하는 김에 정리함.
  • Loading branch information
ujuc committed Jun 30, 2024
1 parent f46651a commit 9b33ddd
Showing 1 changed file with 97 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
Title: XDG에서 사용중인 기본 디렉토리 정리
Date: 2024-06-30 15:25:14
Modified: 2024-06-30 15:25:14
Category: Operation
Tags: xdg-utils, desktop, unix-like, os
Slug: xdg에서-사용중인-기본-디렉토리-정리
Summary: [dotrc](https://github.com/ujuc/dotrc) 정리중에 `tigrc` 파일을 `$XDG_CONFIG_HOME/tig/config` 부터 찾고 있는것을 보다보니 `$XDG_CONFIG_HOME` 이라는 것을 확인했고, [XDG-utils](https://en.wikipedia.org/wiki/Portland_Project)에서 사용중인 디렉토리에대해서 정리한다.

- 공식 문서: [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/latest/index.html)
- [freedesktop.org Specifications Wiki - Desktop base directories](https://www.freedesktop.org/wiki/Specifications/basedir-spec/)

---

[TOC]

`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 파일
```yml
.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` 비트를 설정해야함.
- 해당 변수가 설정되지 않은 경우
- 애플리케이션에서 유사한 기능을 가진 대체 디렉토리로 대체하고 경고 메시지를 출력하게 해야함.
- 통신, 동기화 목적으로 사용해야하며, 런타임 메모리에 상주가 가능하나 반드시 디스크로 스왑 아웃하지 않으니 대용량 파일을 저장해서는 안됨.

0 comments on commit 9b33ddd

Please sign in to comment.