Вопрос или проблема
В MacOS приложение — это папка, либо в /Applications
, если установлено для всей системы, либо в ~/Applications
, если установлено только для конкретного пользователя. В ней содержится каталог MacOS
с исполняемым файлом и каталог Resources
, содержащий любые активы или дополнительные ресурсы, необходимые приложению для работы. Также есть другие файлы, такие как Info.plist
или Pkginfo
.
Мой вопрос в том, какова структура приложений в Ubuntu? Согласно этому, исполняемый файл хранится в /usr/bin
или где-то там. Но, похоже, это всего лишь исполняемый файл. Где приложения хранят активы, такие как иконка в доке, текстуры игр и т.д.? Или любые другие данные, которые являются частью приложения, но не исполняемого файла? В Mac приложения, кажется, являются самодостаточными пакетами, но не в Linux. Как все компоненты приложения структурированы в файловой системе?
P.S. Я ожидал, что это будет очень частый вопрос, но по какой-то причине все мои поиски не дали результата, кроме связанного вопроса.
Ответ или решение
В Ubuntu и в мире Linux в целом структура хранения и организации приложений отличается от подхода в MacOS, где каждое приложение оформлено в виде самодостаточного пакета. На Linux система организации файлов более распределённая, что обусловлено историческими и архитектурными причинами. Давайте рассмотрим это более подробно, используя метод TEA (Theory, Example, Application).
Теория
Начнем с теории. На Linux приложения устанавливаются в соответствии с Filesystem Hierarchy Standard (FHS). Это стандарт, который предписывает, где должен находиться каждый тип файлов в системе. В отличие от MacOS, где приложение зачастую выступает как единый пакет, Linux использует подход с централизованным размещением различных частей приложения.
-
Бинарные файлы: Основные исполняемые файлы, т.е. бинарные, обычно расположены в директориях
/usr/bin
или/usr/local/bin
. Эти места предназначены для исполняемых файлов, доступных для всех пользователей системы. -
Библиотеки: Динамические библиотеки, которые приложения подгружают во время исполнения, обычно размещаются в
/usr/lib
или/usr/local/lib
. Для 32-битных, 64-битных и архитектурно-зависимых библиотек могут быть использованы отдельные поддиректории. -
Конфигурационные файлы: Эти файлы, необходимые для настройки приложения, располагаются в
/etc
. Например, конфигурационные файлы веб-сервера Apache находятся в/etc/httpd
. -
Статические данные и ресурсы: Файлы, которые не изменяются во время работы приложения, включая изображения, иконки и прочие ресурсы, часто находятся в
/usr/share
. Внутри этой директории могут быть поддиректории, соответствующие конкретным приложениям или категориям данных. -
Временные файлы: Эти файлы находятся в
/tmp
или/var/tmp
. Разница в том, что/tmp
предназначен для временных файлов, которые могут быть удалены при перезагрузке системы, а содержимое/var/tmp
более долговечное. -
Журналы и файлы данных: В Ubuntu логи могут сохраняться в
/var/log
, а относящиеся к приложению данные в/var/lib
.
Пример
Возьмем для примера текстовый редактор Vim, который является одним из самых популярных в мире Linux.
- Бинарный файл Vim находится в
/usr/bin/vim
. - Связанные библиотеки хранятся в
/usr/lib/vim
. - Конфигурационный файл может находиться в
/etc/vim/vimrc
. - Документация и прочие статичные ресурсы — в
/usr/share/vim
. - Логи и прочие системные сообщения — в
/var/log
.
Применение
Различная структура хранения файлов в Ubuntu и других дистрибутивах Linux может сначала показаться сложной, однако она поощряет лучшие практики управления файлами и системами. Она помогает облегчить обновления и обеспечивает, что все версии и конфигурации системы синхронизированы без необходимости копирования каждого исполняемого файла. Более того, выдача прав доступа и управление ими оказывается более гибким.
Для разработчиков и системных администраторов знание и понимание этой структуры критически важно. Это позволяет правильно устанавливать, конфигурировать и отлаживать приложения. Например, при настройке нового сервера важно знать, где найти конфигурации и журналы, чтобы обеспечить работоспособность и безопасность приложения. Использование стандартов, таких как FHS, способствует совместимости между различными дистрибутивами Linux и делает переносимость приложений более простой.
Итак, Ubuntu и другие дистрибутивы Linux не используют самодостаточные пакеты для приложений, как это делает MacOS. В Linux используется распределённая файловая структура, которая предлагает свои преимущества в управляемости и гибкости.—— Эта структура привносит свои особенности в администрирование и разработку, и understanding её является важным аспектом управления современными системами Linux.