Location of ini/config files in linux/unix?

前端 未结 7 1074
自闭症患者
自闭症患者 2020-12-04 06:05

Two questions, really:

  1. Is there a standard/convention regarding the placement on configuration files?

    For system or quasi-system programs they see

7条回答
  •  旧巷少年郎
    2020-12-04 06:42

    You should adhere your application to the XDG Base Directory Specification. Most answers here are either obsolete or wrong.

    Your application should store and load data and configuration files to/from the directories pointed by the following environment variables:

    • $XDG_DATA_HOME (default: "$HOME/.local/share"): user-specific data files.
    • $XDG_CONFIG_HOME (default: "$HOME/.config"): user-specific configuration files.
    • $XDG_DATA_DIRS (default: "/usr/local/share/:/usr/share/"): precedence-ordered set of system data directories.
    • $XDG_CONFIG_DIRS (default: "/etc/xdg"): precedence-ordered set of system configuration directories.
    • $XDG_CACHE_HOME (default: "$HOME/.cache"): user-specific non-essential data files.

    You should first determine if the file in question is:

    1. A configuration file ($XDG_CONFIG_HOME:$XDG_CONFIG_DIRS);
    2. A data file ($XDG_DATA_HOME:$XDG_DATA_DIRS); or
    3. A non-essential (cache) file ($XDG_CACHE_HOME).

    It is recommended that your application put its files in a subdirectory of the above directories. Usually, something like $XDG_DATA_DIRS//filename or $XDG_DATA_DIRS///filename.

    When loading, you first try to load the file from the user-specific directories ($XDG_*_HOME) and, if failed, from system directories ($XDG_*_DIRS). When saving, save to user-specific directories only (since the user probably won't have write access to system directories).

    For other, more user-oriented directories, refer to the XDG User Directories Specification. It defines directories for the Desktop, downloads, documents, videos, etc.

提交回复
热议问题