Стандартное хранилище данных ключа/значения для Unix

Вот сценарий удара, я раньше запускал приложение с другой темой. Не использовали его в течение многих лет, хотя, таким образом, я не знаю, будет ли это работать с текущим GTK.

#!/bin/bash
# lauch a gtk application with a different theme
# set GTKRCFILE variable to your favourite theme
GTKRCFILE=Clearlooks
GTK2_RC_FILES=/usr/share/themes/"$GTKRCFILE"/gtk-2.0/gtkrc "$@"

Вот немного информации, я вышел из архивов форм человечности. Не уверенный, если это будет проблема. (здесь) существует также сообщение в блоге, подробно излагающее этот метод немного больше. (здесь) и (здесь). Существует также подобный вопрос на этом сайте, которому уже ответили. (здесь)

При гноме приложения получают свою тему от гнома-демона настроек. Это мгновенно применяет любое изменение темы во всех активных приложениях, делающих на - appplication тема, изменяющаяся невозможный.

16
03.10.2011, 15:42
4 ответа

Я не думаю, что существует стандартный инструмент для этого. За исключением grep/awk/sed и т.д. Но использование этого необходимо будет заботиться о партии других проблем как блокировка, формат, специальные символы, и т.д.

Я предлагаю использовать sqlite. Определите простую таблицу и затем создайте tool_get() и tool_put() функции оболочки. sqlite является портативным, быстро.

Вы получите дополнительную гибкость бесплатно. Можно определить, ограничивает, индекс, чтобы настроить сценарий или использовать тот DB на других языках однажды.

10
27.01.2020, 19:48
  • 1
    . Я быстро записал инструмент с sqlite API. Это хорошо работает. –  Pierre 04.10.2011, 00:22

dbmutil мог бы получить Вас, что Вы хотите. Это имеет утилиты оболочки для операций, которые Вы описываете в вопросе. Я не сказал бы, что это точно стандартно, но это действительно имеет средства, которые Вы хотите.

7
27.01.2020, 19:48

Если Ваша база данных является достаточно маленькой, то можно использовать файловую систему. Преимущество этого подхода состоит в том, что это является очень не использующим высокие технологии, и будет работать везде с очень небольшим количеством кода. Если ключи состоят из печатаемых символов и не содержат /, затем можно использовать их в качестве имен файлов:

put () { key=$1; value=$2; printf %s "$value" >"datastore.db/$key"; }
get () { key=$1; cat "datastore.db/$key"; }
remove () { key=$1; rm "datastore.db/$key"; }

Для размещения произвольных ключей используйте контрольную сумму ключа как имя файла и дополнительно сохраните копию ключа (если Вы не довольны неспособностью перечислить ключи или сказать то, что ключ для данной записи).

put () {
  key=$1; value=$2; set $(printf %s "$key" | sha1sum); sum=$1
  printf %s "$key" >"datastore.db/$sum.key"
  printf %s "$value" >"datastore.db/$sum.value"
}
get () {
  key=$1; set $(printf %s "$key" | sha1sum); sum=$1
  cat "datastore.db/$1.value"
}
remove () {
  key=$1; set $(printf %s "$key" | sha1sum); sum=$1
  rm "datastore.db/$1.key" "datastore.db/$1.value"
}

Обратите внимание, что игрушечные реализации выше не являются целой историей: у них нет полезного транзакционного свойства, такого как атомарность. Основные операции файловой системы, такие как создание файла и переименование являются атомарными однако, и возможно создать атомарные версии из функций выше.

Эти реализации прямо к файловой системе подходят с типичными файловыми системами только для маленьких баз данных до нескольких тысяч файлов. Вне этой точки большинству файловых систем нелегко справляться с большими каталогами. Можно адаптировать схему к большим базам данных при помощи многоуровневого расположения. Например, вместо того, чтобы хранить все файлы в одном каталоге, сохраните их в отдельных подкаталогах на основе первых нескольких символов их имен. Это - то, что мерзавец делает, например: его объекты, индексированные хешами SHA-1, хранятся в названных файлах .git/objects/01/2345679abcdef0123456789abcdef01234567. Другими примерами программ, которые используют семантическое разделение на уровни, является сеть, кэширующая прокси Wwwoffle и polipo; оба хранят кэшируемую копию страницы, найденной в URL в названном файле www.example.com/HASH где ХЕШ является некоторым кодированием некоторого хеша URL. ¹

Другой источник неэффективности - то, что большинство файловых систем тратит впустую много пространства, храня маленькие файлы — существуют отходы до 2 КБ за файл в типичных файловых системах, независимо от размера файла.

Если Вы принимаете решение пойти с реальной базой данных, Вы не должны предшествовать удобству прозрачного доступа к файловой системе. Существует несколько файловых систем FUSE для доступа к базам данных включая Беркли DB (с dbfs Jeff Garzik), Oracle (с Oracle DBFS), MySQL (с mysqlfs), и т.д.

¹ Для URL как http://unix.stackexchange.com/questions/21943/standard-key-value-datastore-for-unix, Polipo использует файл unix.stackexchange.com/M0pPbpRufiErf4DLFcWlhw==, с добавленным заголовком в файле, указывающем на фактический URL в открытом тексте; имя файла является кодированием base64 хеша MD5 (в двоичном файле) URL. Wwwoffle использует файл http/unix.stackexchange.com/DM0pPbpRufiErf4DLFcWlhw; название файла является кодированием собственной разработки хеша MD5 и сопутствующим файлом http/unix.stackexchange.com/UM0pPbpRufiErf4DLFcWlhw содержит URL.

9
27.01.2020, 19:48

Так как Вы назвали его, у типичного клиента советов есть интерфейс командной строки через redis-cli. Некоторые примеры от redis-cli -h:

 cat /etc/passwd | redis-cli -x set mypasswd
 redis-cli get mypasswd
 redis-cli -r 100 lpush mylist x

(И если Вы хотите получить доступ к дб через файловую систему, можно использовать сокеты с -s. Инструмент, который считал бы индекс дб непосредственно на каждом вызове, будет отчасти очень неэффективен.)

5
27.01.2020, 19:48

Теги

Похожие вопросы