---
name: "kdb"
section: "1"
platform: "linux"
package: "elektra-bin"
version: "0.7.1-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/kdb"
---

# kdb(1)

Elektra key database command line administration tool

## NAME

kdb - Elektra key database command line administration tool

## SYNOPSIS

**kdb get** \[**-dlr**\] key/name

**kdb set** \[**-t** **type**\] \[**-d**\] \[**-c** **"A comment about this key"**\] \[**-m** **mode**\] \[**-u** **uid**\] \[**-g** **gid**\] key/name "the value"

**kdb set** \[**-t** **type**\] \[**-m** **mode**\] \[**-c** **"A comment"**\] key/name -- "the value"

**kdb set** \[**-t** **type**\] \[**-b** **file**\] key/name

**kdb ls** \[**-lRfvs**\] \[key/dir \| key/name\]

**kdb ls** \[**-lRfvx**\] \[key/dir \| key/name\] \> keys.xml

**kdb edit** \[**-R**\] \[key/dir \| key/name\]

**kdb rm** key/name

**kdb mv** key/src key/dest

**kdb ln** key/src key/dest

**kdb export** \[**-f**\] system/some/tree.root \> \[file.xml\]

**kdb import** \< file.xml

**kdb import** file.xml

**kdb monitor** some/key/name Description.PP The **kdb** command provide ways to manipulate the Elektra keys database.

The subcommands implemented are very similar to regular UNIX commands like **ls**, and **rm**, specially in their output and options. Subcommands.PP **get**

Get the value from the specified key. Accepts options: **-d**, **-l**, **-f**, **-s**

**set**

Set the value to the specified key. Accepts options: **-c**, **-t**, **-d**, **-m**, **-b**

**ls**

As the [**ls**(1)](/ls/1.md) command, list key names for the specified key, or children keys, if specified a folder key. The **-v** argument will make it show also the values of each key. The **-d** (descriptive) will make it show the comment, key name and its value, as you are watching a plain text file. Accepts options: **-x**, **-d**, **-l**, **-f**, **-v**, **-R**, **-s**

**ln**

Creates a key that is a symbolic links to another key.

**mv**

Move, or renames a key. Currently it can't move keys across different filesystems.

**rm**

As the [**rm**(1)](/rm/1.md) command, removes the key specified.

**edit**

A very powerful subcommand that lets you edit an XML representation of the keys. The parameters it accepts is usually a parent key, so its child keys will be gathered. Can be used with the **-R** flag to work recursively. The editor used is the one set in the **$EDITOR** environment variable, or **vi**. After editing the keys, **kdb edit** will analyze them and commit only the changed keys, remove the keys removed, and add the keys added. This command is only available when /usr/lib/libelektratools.so is available.

**export**, **save**

Export a subtree of keys to XML. If no subtree is defined right after the **export** command, system and current user trees will be exported. Output is written to standard output. The output encoding will allways be UTF-8, regardeless of your system encoding. UTF-8 is the most universal charset you can get when exchanging data between multiple systems. Accepts **-f**.

**import**, **load**

Import an XML representation of keys and save it to the keys database. If no filename is passed right after the **import** command, standard input is used. This command is only available when /usr/lib/libelektratools.so is available.

**monitor**, **mon**

Monitor a key for some value change. It will block your command line until a change in the key value is detected, then return its new value.

Options.PP **-R**

Causes to work recursively. In **ls**, will list recursively.

**-x**

Makes **ls** output an XML representation of the keys, instead of an **ls**-compatible output.

**-l**

Causes to display long results. With **ls**, will generate lists similar to **ls -l**. With **get**, will show also the key name.

**-a**

Causes **ls** to display also inactive keys. Generate lists similar to **ls -a**. Inactive keys are keys which basename begins with a '.' (dot). An example of inactive key: system/sw/XFree/current/Monitor/.Monitor1

**-f**

Causes to work with full key names. A full key name makes sense only on user/\* keys, and differentiate from the regular key names in specifying the owner user. If the current user is someuser, the user/some/key full name is user:someuser/some/key. Makes effect in **ls**, **export** and **get** subcommands.

**-d**

Causes **get** to work descriptivelly. When requesting a key it will show the comment, key name and its value in a fancy format. Causes **set** to mark the key as a directory key.

**-s**

Causes **get** and **ls** to be more friendly to Shell scripts. For example, when requesting user/env/env2/PATH, the output will be PATH="the value", that is, only the basename of the key will be showed and the value will be surrounded by ' " '.

**-t type**

When **set**ting a key's value, you can specify the type with this switch. Currently accepted types are **string** for plain text, **bin** for binary as-is values, **dir** to create folder keys and **link** to create symbolic links between keys. Plain text are always stored as **UTF-8**(7) in Elektra, regardeless of your current encoding (**$LANG**). If you want to force a value to be stored without the **UTF-8**(7) encoding (a bad idea), you can set it as binary. Binary values should be avoided, because they are black boxes for system administrators.

**-b filename**

Set the key value as the content of file filename. This option is more useful when setting binary keys.

**-m mode**

For the **set** command. Will set the key access permission to **mode**, which must be an octal number as for [**chmod**(1)](/chmod/1.md).

**-u uid**

Create the key with **uid** user ID. It can be a user name or a uid number.

**-g gid**

Create the key with **gid** group ID. It can be a group name or a gid number

**-c comment**

When **set**ting keys, you can use this argument to set a descriptive comment for it. This comment is exactly as a comment in a plain text configuration file. The comment is stored as **UTF-8**(7) regardeless of your current encoding (**$LANG**).

**-v**

With the **ls** subcommand, will make it show also the value stored in the key.

**--**

With the **set** subcommand, everything after it will be considered the value, even text with dashes (-).

Best Practices When Creating Keys.PP When using Elektra to store your application's configuration and state, please keep in mind the following rules:

• You are not allowed to create keys right under system or user.

• You are not allowed to create folder keys right under system or user. They are reserved for very essential OS subsystems.

• The keys for your application, called say *MyApp*, should be created under system/sw/MyApp and/or user/sw/MyApp.

## ENVIRONMENT

**KDB\_ROOT** if defined, prepends it to key names.

**KDB\_BACKEND** defines the name of another backend plugin library to use ExamplesSetting Keys.PP bash$**kdb set -c "My first key" user/example/key "Some nice value"**

bash$**kdb set user:luciana/example/key -- "Some - nice - value with dashes"**

bash#**KDB\_ROOT=user:http/sw/httpd kdb set -u nobody -g http key "Some value"**

bash$**kdb set -b image.png -t bin user/example/binaryKey**

bash$**kdb set -b file.txt user/example/regularKey**

bash#**kdb set -t link system/sw/XFree/current system/sw/XFree/handmade** Getting Keys.PP bash$**KDB\_ROOT=user/example kdb get some/key/name**

bash$**eval \`kdb get -s user/env/env1/PS1\`**

bash$**KDB\_BACKEND=gconf kdb get user/sw/gnome-terminal/global/active\_encodings** Listing.PP bash$**kdb ls -laR user:valeria**

bash$**kdb ls -lR system/sw/xorg/current**

bash$**KDB\_ROOT=system/sw kdb ls -lR xorg**

bash$**KDB\_BACKEND=fstab kdb ls -Rv system/filesystems**

bash$**eval \`kdb ls -Rvs user/env/env2\`** Miscelaneous.PP bash#**kdb ln system/sw/xorg/handmade system/sw/xorg/current**

bash#**kdb mv system/sw/xorg/current system/sw/xorg/old**

bash#**kdb rm system/inittab/rc4**

bash$**KDB\_BACKEND=gconf kdb rm user/gconfKey** XML Import and Export.PP bash#**kdb export user/sw/app \| sed -e 's\|/app/\|/app2/\|g' \| kdb import**

bash#**KDB\_ROOT=system/sw kdb export myapp \> myappconf.xml**

bash#**kdb import myappconf.xml**

bash$**KDB\_BACKEND=gconf kdb export user/sw**

## SEE ALSO

[**elektra**(7)](/elektra/7.md), [**elektra**(5)](/elektra/5.md)

## AUTHOR

**Avi Alkalay** \<avi at unix.sh\>\
 Linux Market Developer, Senior IT and Software Architect, IBM Linux Impact Team :: **ibm.com/linux**

Author.

## COPYRIGHT

Copyright © 2004 Avi Alkalay\
