Пути жесткого кодирования в Linux - PullRequest
5 голосов
/ 16 сентября 2010

Исходя из фона Windows здесь.

Является ли приемлемой практикой для приложений Linux с графическим интерфейсом пользователя сохранять свои файлы данных (не специфичные для пользователя) в жестко заданных местах (например, / etc / myapp / stuff)?Я не смог найти никаких системных вызовов, которые бы возвращали предпочтительный каталог для данных приложения.Существует ли соглашение о том, что и куда идет?

Ответы [ 6 ]

5 голосов
/ 16 сентября 2010

/opt/appname/stuff в соответствии со стандартом иерархии файловых систем Linux

Система упаковки вашего дистрибутива, вероятно, предоставляет способы обработки общих путей установки.Какой дистрибутив вы используете?

4 голосов
/ 16 сентября 2010

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

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

3 голосов
/ 16 сентября 2010

Файлы конфигурации для процессов с повышенными привилегиями обычно хранятся в /etc. Файлы данных для процессов с повышенными привилегиями (веб-сервер, почтовый сервер, чат-сервер и т. Д.) Обычно хранятся в /var. И на этом последовательность заканчивается. Некоторые люди говорят, что вы начинаете с местоположения для их хранения (/etc | /var), затем создаете подпапку appname для своего приложения, а затем продолжаете оттуда по мере необходимости.

Если вы не системный демон с повышенными привилегиями, ваш единственный непротиворечивый выбор - это точка в домашнем каталоге запускающего пользователя. Я думаю, что в стандартах свободных рабочих столов (XDG) указано ~/.config для конфигурации для каждого пользователя и ~/.cache для сменных статических и / или сгенерированных данных, которые необходимо сохранить.

Глядя на мой Домашний каталог, у меня есть несколько ключевых каталогов: ~/.cache ~/.config ~/.irssi ~/.maildir ~/.mozilla ~/.kde ~/.ssh ~/.vnc

[править]
Хотя это и не системный вызов, спецификации XDG, на которые я ссылаюсь, находятся на http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

2 голосов
/ 17 сентября 2010

Существуют определенные соглашения.

  • Общесистемные, читаемые / редактируемые (текстовые) файлы конфигурации находятся в /etc/appname/.
  • Общесистемные файлы двоичных данных для каждой машины, которые изменяются (например, двоичные базы данных), входят в /var/*/appname/ - /var/cache/appname/, /var/spool/appname/ и /var/lib/appname/ - наиболее распространенные.
  • Общесистемные файлы двоичных данных, которые могут быть условно предоставлены машинам (например, графические и звуковые файлы), помещаются в /usr/share/appname/.
1 голос
/ 17 сентября 2010

Полные пути, которые приложения Unix / Linux / GNU используют для хранения файлов конфигурации и других данных, обычно задаются при настройке приложения перед компиляцией.Эти пути затем жестко кодируются в скомпилированный двоичный файл (вы можете увидеть примеры этого, запустив strings(1) над некоторыми существующими исполняемыми файлами).

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

0 голосов
/ 16 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...