Elektra provides a universal and secure framework to store configuration parameters in a global, hierarchical key database.

The core is a small library implemented in C. The plugin-\/based framework fulfills many configuration-\/related tasks to avoid any unnecessary code duplication across applications while it still allows the core to stay without any external dependency. Elektra abstracts from cross-\/platform-\/related issues with an consistent A\+PI, and allows applications to be aware of other applications\textquotesingle{} configurations, leveraging easy application integration.

The man pages can also be viewed online at\+: \href{https://doc.libelektra.org/api/current/html/pages.html}{\tt https\+://doc.\+libelektra.\+org/api/current/html/pages.\+html}

And the page you are currently reading at\+: \href{https://doc.libelektra.org/api/current/html/md_doc_help_kdb.html}{\tt https\+://doc.\+libelektra.\+org/api/current/html/md\+\_\+doc\+\_\+help\+\_\+kdb.\+html}

Concepts are in man page section 7 and are prefixed with {\ttfamily elektra-\/}. You should start reading \hyperlink{md_doc_help_elektra-introduction_doc_help_elektra-introduction_md}{elektra-\/introduction(7)}.

Tools are in man page section 1 and are prefixed with {\ttfamily kdb-\/}. You should start reading \hyperlink{md_doc_help_kdb-introduction_doc_help_kdb-introduction_md}{kdb-\/introduction(1)}.

Documentation of plugins is available using the \hyperlink{md_doc_help_kdb-info_doc_help_kdb-info_md}{kdb-\/info(1)} tool. Run {\ttfamily kdb list} for a list of plugins.

\subsection*{B\+A\+S\+IC O\+P\+T\+I\+O\+NS}

Every core-\/tool has the following options\+:


\begin{DoxyItemize}
\item {\ttfamily -\/H}, {\ttfamily -\/-\/help}\+: Show the man page.
\item {\ttfamily -\/V}, {\ttfamily -\/-\/version}\+: Print version info.
\item {\ttfamily -\/p}, {\ttfamily -\/-\/profile $<$profile$>$}\+: Use a different kdb profile, see below.
\item {\ttfamily -\/C}, {\ttfamily -\/-\/color $<$when$>$}\+: Print never/auto(default)/always colored output.
\end{DoxyItemize}

\subsection*{C\+O\+M\+M\+ON O\+P\+T\+I\+O\+NS}

Most tools have the following options\+:


\begin{DoxyItemize}
\item {\ttfamily -\/v}, {\ttfamily -\/-\/verbose}\+: Explain what is happening.
\item {\ttfamily -\/q}, {\ttfamily -\/-\/quiet}\+: Suppress non-\/error messages.
\end{DoxyItemize}

\subsection*{K\+DB}

The {\ttfamily kdb} utility reads its own configuration from three sources within the K\+DB (key database)\+:


\begin{DoxyEnumerate}
\item /sw/kdb/$\ast$$\ast$profile$\ast$$\ast$/ (for legacy configuration)
\item /sw/elektra/kdb/\#0/\%/ (for empty profile)
\item /sw/elektra/kdb/\#0/$\ast$$\ast$profile$\ast$$\ast$/ (for current profile)
\end{DoxyEnumerate}

The last source where a configuration value is found, wins.

For example, to permanently change verbosity one can use\+:


\begin{DoxyItemize}
\item {\ttfamily kdb set /sw/elektra/kdb/\#0/current/verbose 1}\+: Be verbose for every tool.
\item {\ttfamily kdb set /sw/elektra/kdb/\#0/current/quiet 1}\+: Be quiet for every tool.
\end{DoxyItemize}

\subsection*{P\+R\+O\+F\+I\+L\+ES}

Profiles allow users to change many/all configuration options of a tool at once. It influences from where the K\+DB entries are read. For example if you use\+: {\ttfamily kdb export -\/p admin system}

It will read its format configuration from {\ttfamily /sw/elektra/kdb/\#0/admin/format}.

If you want different configuration per user or directories, you should prefer to use the {\ttfamily user} and {\ttfamily dir} namespaces. Then the correct configuration will be chosen automatically according to the current user or current working directory.

Sometimes it is useful to start with default options, for example it is not possible to invert the {\ttfamily -\/q} option. In such situations one can simply select a non-\/existing profile, then {\ttfamily -\/q} works as usual\+: {\ttfamily kdb mount -\/p nonexist -\/q /abc dir/abc}

\subsection*{B\+O\+O\+K\+M\+A\+R\+KS}

Elektra recommends \hyperlink{doc_tutorials_application-integration_md}{to use rather long paths} because it ensures flexibility in the future (e.\+g. to use profiles and have a compatible path for new major versions of configuration).

Long paths are, however, cumbersome to enter in the C\+LI. Thus one can define bookmarks. Bookmarks are keys whose key name starts with {\ttfamily +}. They are only recognized by the {\ttfamily kdb} tool or tools that explicit have support for it. Your applications should not depend on the presence of a bookmark.

Bookmarks are stored below\+: {\ttfamily /sw/elektra/kdb/\#0/current/bookmarks}

For every key found there, a new bookmark will be introduced.

Bookmarks can be used to start key names by using {\ttfamily +} (plus) as first character. The string until the first {\ttfamily /} will be considered as bookmark.

For example, if you set the bookmark kdb\+: \begin{DoxyVerb}    kdb set user/sw/elektra/kdb/#0/current/bookmarks
    kdb set user/sw/elektra/kdb/#0/current/bookmarks/kdb user/sw/elektra/kdb/#0/current
\end{DoxyVerb}


You are able to use\+: \begin{DoxyVerb}    kdb ls +kdb/bookmarks
    kdb get +kdb/format
\end{DoxyVerb}


\subsection*{R\+E\+T\+U\+RN V\+A\+L\+U\+ES}


\begin{DoxyItemize}
\item 0\+: successful.
\item 1\+: Invalid options passed.
\item 2\+: Invalid arguments passed.
\item 3\+: Command terminated unsuccessfully without specifying error code.
\item 4\+: Unknown command.
\item 5\+: K\+DB Error, could not read/write from/to K\+DB.
\item 6\+: Reserved error code.
\item 7\+: Unknown errors, wrong exceptions thrown.
\item 8-\/10\+: Reserved error codes.
\item 11-\/20\+: Command-\/specific error codes. See man page of specific command.
\end{DoxyItemize}

\subsection*{S\+EE A\+L\+SO}


\begin{DoxyItemize}
\item \hyperlink{md_doc_help_elektra-introduction_doc_help_elektra-introduction_md}{elektra-\/introduction(7)}
\item \hyperlink{md_doc_help_kdb-introduction_doc_help_kdb-introduction_md}{kdb-\/introduction(1)}
\item Get a \hyperlink{doc_BIGPICTURE_md}{big picture about Elektra} 
\end{DoxyItemize}