XDG Base Directory Specification(XDG基础目录规范)是由freedesktop.org提出的一项标准,用于统一Linux和类Unix系统中应用程序配置文件、缓存文件、数据文件等的存储位置。该规范旨在改善文件系统的整洁性、支持用户和系统配置的分离,并使应用程序行为更可预测。
在未采用XDG规范的传统系统中,应用程序可能会将配置文件、数据文件、缓存等混杂存放在用户主目录的顶层,例如:
~/.vimrc
~/.mozilla/
~/.bash_history这会导致目录混乱、不便备份与迁移。XD 规范通过引入一套环境变量,使不同类型的数据归类存储到指定路径,提高了系统组织性。
核心环境变量
XDG规范定义了以下几个关键环境变量:
| 变量名 | 默认值 | 用途 |
|---|---|---|
XDG_CONFIG_HOME | $HOME/.config | 用户特定的配置文件存储位置 |
XDG_DATA_HOME | $HOME/.local/share | 用户特定的数据文件存储位置 |
XDG_CACHE_HOME | $HOME/.cache | 用户特定的缓存文件存储位置 |
XDG_STATE_HOME | $HOME/.local/state | 用户特定的状态文件,如历史记录 |
XDG_RUNTIME_DIR | 由系统设置(如 /run/user/1000) | 用户运行时临时文件的路径(权限受限) |
上面环境变量都是用户特定范围的,此外,还有两个用于系统范围默认路径的变量:
XDG_CONFIG_DIRS(默认/etc/xdg)XDG_DATA_DIRS(默认/usr/local/share:/usr/share)
示例
假设某应用名为 myapp,它可以在以下路径中存储数据:
- 配置文件:
$XDG_CONFIG_HOME/myapp/config.ini→~/.config/myapp/config.ini - 缓存文件:
$XDG_CACHE_HOME/myapp/cache.json→~/.cache/myapp/cache.json - 数据文件:
$XDG_DATA_HOME/myapp/data.db→~/.local/share/myapp/data.db
注意
应用程序需明确遵守此规范才会受益。某些老旧软件可能仍使用旧的配置路径(例如 ~/.<program>)。
XDG_BIN_HOME
XDG_BIN_HOME不是XDG Base Directory Specification标准规范中的一部分,但被很多开发者或构建系统作为一种惯例使用,用于指定用户本地的可执行文件目录。
XDG_BIN_HOME通常表示:$HOME/.local/bin,用于存放用户安装的本地可执行程序。
虽然XDG_BIN_HOME没有被官方规范所定义,但在构建工具、用户脚本、安装器中,常用它来统一可执行文件的路径,便于用户将其加入PATH中:
export PATH="$HOME/.local/bin:$PATH"示例
例如rust的cargo会将可执行文件安装在$HOME/.cargo/bin。我们就可以设置:
export XDG_BIN_HOME="$HOME/.local/bin"
ln -s ~/.cargo/bin/some_tool $XDG_BIN_HOME/