Linux系统XDG用户特定目录规范和环境变量
📅 2024-05-11 | 🖱️
🔖 linux
XDG Base Directory Specification(XDG基础目录规范)是由freedesktop.org提出的一项标准,用于统一Linux和类Unix系统中应用程序配置文件、缓存文件、数据文件等的存储位置。该规范旨在改善文件系统的整洁性、支持用户和系统配置的分离,并使应用程序行为更可预测。
在未采用XDG规范的传统系统中,应用程序可能会将配置文件、数据文件、缓存等混杂存放在用户主目录的顶层,例如:
1~/.vimrc
2~/.mozilla/
3~/.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
中:
1export PATH="$HOME/.local/bin:$PATH"
示例 #
例如rust的cargo会将可执行文件安装在$HOME/.cargo/bin
。我们就可以设置:
1export XDG_BIN_HOME="$HOME/.local/bin"
2ln -s ~/.cargo/bin/some_tool $XDG_BIN_HOME/