Я создаю приложение командной строки, и мне нужно сохранить некоторые временные данные в файлы. Я не знаю, где соглашение о том, чтобы приложения хранили свой кеш на Unix-системах (в данном случае Ubuntu 12.0.4)?
«Системы на основе Unix» - это слишком общая категория, чтобы делать какие-либо общеприменимые определения, применимые ко всем системам на основе Unix. Проблема в том, что структура файловой системы (и «правильное» / «обычное» место для размещения вещей) настолько сильно различается между разными разновидностями «Unix» (если вы можете даже назвать это так), что вам в значительной степени придется справиться с этим на индивидуальной основе.
Несколько примеров:
Ответ заключается в том, что каноническое, социально приемлемое, хорошо интегрированное соглашение о том, где хранить что-либо в любой операционной системе, будь то дистрибутив Linux, BSD, Solaris, HP-UX и т. Д., Зависит от конкретных обстоятельств . В частности:
apt-get
или yum
установить ее напрямую, не загружая установщик с веб-сайта?На это нет однозначного ответа без учета всех факторов. Однако, в частности, для Ubuntu 12.04 , если вы встраиваете свой пакет в .deb
файл для распространения в PPA или для отправки в собственные репозитории пакетов ( main
или universe
) Ubuntu , я бы порекомендовал хранить кэш в /var/cache
. Но это только для Ubuntu, и вы, конечно, не должны применять предположение, что все дистрибутивы или ОС на базе Unix сочтут это приемлемым.
Кроме того, если нет никаких преимуществ в сохранении данных кэша при загрузке системы, я думаю, что они также могут быть в / tmp.
Обратите внимание, что вы столкнетесь с этими проблемами соглашения о путях для каждого типа файлов, которые использует ваша программа: общие данные, исполняемые файлы, библиотеки, файлы справки, изображения, звук, веб-страницы и так далее. Поэтому мне интересно, если вы спрашиваете о файлах кэша, как вы планируете обрабатывать файлы других типов. Вы просто делаете наивные предположения и надеетесь, что никто не согласится с вами? Если вы не читали никаких документов или стандартов по Ubuntu, в которых предлагалось бы их разместить, плохая идея просто предполагать одно или другое. Например, всегда вставлять библиотеки в / usr / lib может быть ошибкой, так как в зависимости от ситуации они могут находиться в другом месте.
Кроме того, как разработчик программного обеспечения, я думаю, что самое ответственное, что нужно сделать, это позволить конечному пользователю решить, куда поместить свои файлы. Вы можете установить значения по умолчанию, но пользователи (и дистрибьюторы) могут и будут настраивать сборку под свой дистрибутив.
Самый простой способ сделать это - создать свою программу с использованием GNU Autoconf . Autoconf - это система сборки, в которой пользователь может передавать аргументы командной строки в сценарий сборки, чтобы изменить пути различных «типов каталогов» по умолчанию. Почти в каждом дистрибутиве есть скрипт сборки для каждого пакета Autoconf, который устанавливает дистрибутивные обычные каталоги для каждого типа. Они даже специально имеют тип каталога для кеша: sharedstatedir .
/tmp
папкой. Ответы на ваши вопросы будут (скачать, нет, нет, нет, нет, нет, нет). Наверное, кажется нормальным для большинства людей сделать вывод,/tmp
но я новичок в системах Unix, и соглашения на основе Ubuntu OS мне незнакомы. Это открывает для gem интересную идею разрешить независимое кэширование диска (независимость от пользователя). Спасибо, +1 от меня.gem
инструментом. Однако, вероятно, было бы неуместно создавать файлы во время выполнения в том же каталоге, куда ваше приложение загружается гемом. С другой стороны, если вы запускаете приложение как пользователь, вам нужен каталог, доступный для чтения и записи для пользователей , и это означает либо изменение разрешений (что требует еще большей работы по интеграции системы во время установки, такой как создание группы). и т. д.) или используя глобальный каталог для чтения и записи, например / tmp./usr
,/lib
или/bin
из приложения.