В продолжение моей темы http://linuxforum.ru/viewtopic.php?id=35019
Учту свою ошибку предыдущего поста - опишу подробнее:
Программа написанная мною в ходе своей работы генерит нечто вроде базы данных которая представлена в виде каталога с вложениями (XML файлы + графические файлы + звуковые файлы = большой суммарный объём). Хочу поместить этот каталог с базой данных в папку пользователя но так что бы не мозолила глаза, углубить в скрытые стандартные системные каталоги. Я почитал об устройстве каталогов Linux и предполагаю что вполне корректно поместить в: /home/usver/.local/Nazvanie_programmi. Прошу подсказать верно ли моё предположение и нужно ли углубляться относительно /home/usver/.local/ или корректно будет в её корне.
Куда правильно поместить рабочие данные программы
Многие программы хранят свои данные в $XDG_CONFIG_HOME/.config/app_name, например, для браузера links это будет /home/user/.config/links и т.д., и т.п, подробнее см. XDG Base Directory Specification.
yars, я уже читал этот материал с переводчиком на пару так как английским не владею, но ответа на свой вопрос не нащёл. Это действительно корректно помещать данные в $XDG_CONFIG_HOME/.config/app_name, это собственно не конфигурация, а рабочие данные, могу предположить что при нормальном использовании программы это будет от нескольких сотен мегабайт до нескольких десятков гигабайт.
Эти генерируемые данные, как я понимаю, временные? Если так, то я бы помещал их куда-нибудь в /tmp/.appname-$UID, к примеру. Так, например, поступают mc, wine. Можно (и, наверное, лучше) помещать данные в $XDG_DATA_HOME/appname, а не в $XDG_CONFIG_HOME, как я написал ранее, так как там хранятся конфигурационные файлы. Еще можно размещать файлы в $HOME/.appname, там можно хранить все что душе угодно. Так делают gimp, всякие проприетарные поделия вроде skype и флеш-плеера.
Нет, это не временные данные, это результат и цель работы программы.
Еще можно размещать файлы в $HOME/.appname
Лично мне не нравятся такие варианты, не люблю срачь из разрозненных по целевому применению данных в корне пользовательской папки.
Подытоживая: $XDG_CONFIG_HOME/.config/app_name - наиболее правильный вариант?
Нет, это не временные данные, это результат и цель работы программы.
обычно где хранить результат задаёт юзер...
по порядку:
$XDG_DATA_HOME (по дефолту ~/.local/share/<app_name>) — данные программы, преимущественно статические (установленные расширения, загружаемый контент), но и постоянно-промежуточные, например базы индексации итп
$XDG_CONFIG_HOME (по дефолту ~/.config/<app_name>) — конфиги программы, некоторые хранят тут и другое, но это скорее моветон ИМХО...
$XDG_CACHE_DIR (по дефолту ~/.cache/<app_name>) — для временных данных и промежуточных результатов...
$TMPDIR (по дефолту /tmp) — временные файлы, которые не должны пережить перезагрузку... [это часть POSIX, а не XDG-стандартов]
Димитрий, из того что ты сказал, я бы всё же положил в $XDG_DATA_HOME или, если юзеру может представлять интерес место хранения результатов, то спросил бы у него...
В продолжение моей темы http://linuxforum.ru/viewtopic.php?id=35019
Учту свою ошибку предыдущего поста - опишу подробнее:
Программа написанная мною в ходе своей работы генерит нечто вроде базы данных которая представлена в виде каталога с вложениями (XML файлы + графические файлы + звуковые файлы = большой суммарный объём). Хочу поместить этот каталог с базой данных в папку пользователя но так что бы не мозолила глаза, углубить в скрытые стандартные системные каталоги. Я почитал об устройстве каталогов Linux и предполагаю что вполне корректно поместить в: /home/usver/.local/Nazvanie_programmi. Прошу подсказать верно ли моё предположение и нужно ли углубляться относительно /home/usver/.local/ или корректно будет в её корне.
Зачем помещять программу/данные в каталог пользователя и прятать её при этом?
Поместите в /usr/local/xxx и сделайте симлинк на всё это куда хотите.
Димитрий, во первых, напишите, КАКИЕ файлы.
Никого не интересует, что у вас XML или XYZ, это не важно. Важно КАК они используются? КАК создаются? Как уничтожаются? И т.д.
Димитрий, во первых, напишите, КАКИЕ файлы.
Никого не интересует, что у вас XML или XYZ, это не важно. Важно КАК они используются? КАК создаются? Как уничтожаются? И т.д.
Дак я же и пишу, используются как база данных программы. При запуске создаётся папка "База", далее в программе пользователь создаёт проект, и в папке "База" появляется папка проекта, далее пользователь начинает работать над проектом и папка проекта наполняется. Удаляется всё аналогично из интерфейса программы, решил пользователь удалить проект, нажал кнопочку и вложенная папочка со всем содержимым проекта уничтожена.
Зачем помещять программу/данные в каталог пользователя...
Я говорю не о "программу/данные", а только о данных созданных программой, как раз это и позволяет размещать программу вообще где угодно. Это не временные файлы в момент исполнения программы, это результат и цель её работы, хранится на диске между сессиями. И если не в папку пользователя то куда? У каждого пользователя будут свои данные.
и прятать её при этом?
Во первых эстетики ради, я вот например не хочу что бы у меня в папке с документами, где всё ранжировано и упорядочено появилось "инородное тело". Во вторых это данные которые программой обрабатываются как единая база данных, но в то же время это просто каталог с файлами которые пользователь может "поправить" в ручную (например в блокноте), а это может привести к повреждению целостности данных для программы. Прятать конечно бесполезно, кому надо тот найдёт, но и искушать лишний раз не стоит.
Скорей всего, это не совсем корректно, но я бы сделал так:
Если потенциально база будет занимать пару мегабайт, то и конфиги, и базу в ~/.programma.
Если база будет большой и громоздкой, то конфиги в ~/.program, а базу в ~/.local/share/programma. Для искушенных, можно опционально в программе добавить где-нибудь в настройках чекбокс, добавляющий симлинк с ~/.local/share/program на ~/Document/program или ~/program.
В моем представлении это было бы удобно. А вам чем голову ломать, проще посоветоваться с кем-то из будущих пользователей. Конечно, есть стандарты и им надо следовать, но надо понимать, что программой пользоваться будет на автор стандарта, а Вася - пользователь, его мнение тоже надо учитывать.
вообще-то для временных данных, которые должны сохраняться между сессиями, есть каталог /var/tmp там можно и нужно хранить например такие данные, как "последние открытые документы", и т.п. Но это касается скорее серверного/системного ПО.Это не временные файлы в момент исполнения программы, это результат и цель её работы, хранится на диске между сессиями. И если не в папку пользователя то куда?
Если же вы пишете приложение для иксов(графическое), то данные надо класть в $XDG_DATA_HOME Подробности здесь: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
Вышеупомянутая переменная $XDG_DATA_HOME обычно установлена в $HOME/.local/share, т.ч.никаких "инородных тел" вы не увидите. Наверняка в вашей системе уже есть каталог $HOME/.local/share сделанный другими программами.я вот например не хочу что бы у меня в папке с документами, где всё ранжировано и упорядочено появилось "инородное тело".
[quote="Димитрий"]Это не временные файлы в момент исполнения программы, это результат и цель её работы...
вообще-то для временных данных...[/quote]
o_O *WALL* %)
в $HOME/.local/share
Думаю вот это мне и было нужно :) Спасибо.
Димитрий, к чему столько смайлов? Это именно временные данные, временные результаты.Как я понимаю, пользователь этих данных никогда не увидит. Только через вашу программу. А "результат" это то, что можно(и нужно) записать на флешку, и унести.
наверное. К тому же, на многих системах /var/tmp смонтирована в ОЗУ и теряется при перезагрузке.Думаю вот это мне и было нужно
drBatty, это не временные данные, пишу же чёрным по белому. Вот не всегда можно, нужно, а главное удобно, что бы результат болтался в виде файла. В данной программе реализована своего рода база данных (термин БД не подразумевает таблицы и SQL), и работает она только с этой базой данных.
пишите что хотите. Это нельзя назвать результатом работы, и нельзя назвать исходными данными. Значит это временные данные. Просто необязательно временный файл должен существовать недолго. Вот ваша велосипедная СУБД существует всё время жизни программы. :)это не временные данные, пишу же чёрным по белому.
конечно нет. Всегда можно навелосипедить самому СУБД, что-бы не использовать готовую *THUMBSUP*термин БД не подразумевает таблицы и SQL
Последние посты конечно чисты флуд, но всё же ещё один (не удержался уточнить суть религиозных канонов вашей религии по данному вопросу).
В свете утверждений в вашем последнем посте, точнее интерпретируя их на серверные СУБД: серверные СУБД существуют для хранения временных данных?
всё зависит от точки зрения. Ну и от определений.В свете утверждений в вашем последнем посте, точнее интерпретируя их на серверные СУБД: серверные СУБД существуют для хранения временных данных?
Вот вы почему-то считаете,что временные данные обязательно короткоживущие. А я считаю, что любые данные, которые можно всегда восстановить, являются временными. Даже если они годами лежат на диске.
Что да СУБД, то там разные данные есть, есть и временные, и их большая часть. Ну к примеру индексы занимают обычно больше половины БД. Эти индексы почти всегда можно убить и создать заново.
Я лично считаю что это зависит не от формы представления данных или времени их хранения. Если их создание является целью (результатом, продуктом) манипуляций пользователя с прогаммой - то это и есть цель и результат работы программы, а данные созданные побочно как служебные для обеспечения работоспособности и/или комфорта пользователя (и как правило без его участия) - это временные.