Понимание форматов исполняемых файлов Linux и пакетов распространения программного обеспечения

Вопрос или проблема

У меня возникают трудности с пониманием форматов исполняемых файлов Linux и пакетов программного обеспечения. Существует так много разных дистрибутивов самого Linux, и кажется, что каждый пакет программного обеспечения был скомпилирован отдельно для каждого дистрибутива. Почему это так? Я понимаю, что некоторые “пакеты” предназначены для установки на разных дистрибутивах, но отличается ли исполняемый формат программного обеспечения?

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

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

Различия: форматы пакетов и стратегии
Существует несколько различных менеджеров пакетов. Каждый был создан потому, что существующие не удовлетворяли потребности некоторых людей. Каждый менеджер пакетов требует пакеты в своем формате. Кроме того, разные дистрибутивы имеют разные требования к включенному программному обеспечению. Существуют несколько программ, которые могут иметь различные возможности в зависимости от опций, указанных при компиляции исходного кода в исполняемый файл. Некоторые дистрибутивы хотят предоставить полный набор функций и богатый опыт, в то время как другие стремятся предоставить как можно более простой и легковесный опыт, и существует все, что между ними. Также дистрибутив может решить отформатировать свою файловую структуру по-другому или использовать другую систему инициализации. Они могут решить организовать программное обеспечение по-разному: может быть пакет под названием “dev-utils” в двух разных дистрибутивах, но одна версия включает yacc, а другая – нет. Из-за этих различных потребностей дистрибутивы выбирают компиляцию программного обеспечения разными способами.

Вот почему даже если у вас есть пакет в правильном формате для вашего менеджера пакетов, он может не работать, если пакет был предназначен для другого дистрибутива. Например, этот пакет может зависеть от наличия yacc, и он выразил эту зависимость через требование установить пакет “dev-utils”, но ваш “dev-utils” не включает yacc. Теперь у вас установлен пакет с неудовлетворенной зависимостью.

Это не является большой проблемой.
Большая часть дистрибутива Linux заключается в поддержании центрального репозитория программного обеспечения. Дистрибутив заботится о поддержании всего этого для вас. Это на самом деле облегчает установку программного обеспечения. Обычно вы используете менеджер пакетов для поиска и выбора некоторых пакетов, а затем говорите ему установить их; он позаботится о остальном. Процесс установки программного обеспечения в Windows включает поиск программного обеспечения на сторонних веб-сайтах, попытку найти подходящую ссылку для загрузки, загрузку, проверку на вирусы и запуск программы установки, которая затем задает вам множество неуместных вопросов. Этот весь беспорядок не является стандартом в Linux.

Репозиторий не может содержать всего
Теперь могут быть случаи, когда программа, которую вы требуете, отсутствует в репозитории вашего дистрибутива. Пакеты, доступные в программном репозитории, являются одной из отличительных особенностей дистрибутивов. Когда вы не можете найти нужное вам программное обеспечение в репозиториях вашего дистрибутива, есть три возможных пути (на самом деле два плюс способ действительно все испортить).

Сообщество репозиториев
Многие дистрибутивы имеют неофициальные репозитории, которые поддерживаются людьми, не связанными с дистрибутивом. Ubuntu называет их PPAs, Fedora называет их репозиториями людей Fedora. Arch Linux не имеет конкретного названия для сторонних репозиториев, но у него есть AUR, который представляет собой коллекцию “рецептов” для пакетов (замечание: существует только один AUR). Вы можете сначала попробовать установить пакет из одного из этих источников, так как его легко удалить, если он не сработает.

Компиляция из исходников
Если вы не можете найти неофициальный репозиторий с тем, что вам нужно, компиляция из исходников не является сложной задачей. Вам необходимо установить пакет разработки вашего дистрибутива; это включает в себя базовые вещи, такие как компилятор, компоновщик, парсер и другие инструменты, которые обычно необходимы для компиляции программного обеспечения. Затем вам нужно найти исходный код проекта (который почти всегда упакован в формате .tgz или .tbz (называемым “tarball”). Скачайте его в отдельную директорию, извлеките (используя tar -xf filename.tgz) и обычно войдите в одну директорию, которую он создал. В этой директории может быть файл под названием README или INSTALL. Если такой файл существует, прочтите его; большинство из них говорят сделать то же самое. Последующие шаги выполняются в командной строке. Запустите ls и посмотрите, есть ли исполняемый файл под названием configure. Если он существует, запустите его командой ./configure; это может занять несколько минут. Обычно эта команда выполняет некоторые тесты, чтобы определить, как ваш дистрибутив настроен, и проверяет, есть ли у вас необходимые инструменты для компиляции этого программного обеспечения. Следующий шаг – запустить make. Это действительно компилирует программное обеспечение, и это может занять некоторое время – от нескольких минут до часов в зависимости от размера программного обеспечения, которое вы компилируете. После этого выполните make install. Это устанавливает программное обеспечение, которое включает в себя копирование результатов компиляции в соответствующие места вашей файловой системы. После этого программное обеспечение становится доступным для использования.

Это была длинная секция, но в общем виде это можно резюмировать как “README, ./configure, make, make install”. Это рутина, которую нужно запомнить.

Установка пакета из другого дистрибутива (не делайте этого)
Я упоминаю это только потому, что это альтернатива, но, почти наверняка, это не завершится хорошо. Установить пакеты для других дистрибутивов возможно, и вам может захотеться это сделать. Что ж, не делайте этого. Не делайте этого, пока не поймете свою систему очень хорошо. На самом деле, я даже не собираюсь показывать здесь команды, как это сделать, даже если это возможно. Если вы дойдете до того момента, когда это кажется единственным вариантом, не устанавливайте пакет с помощью менеджера пакетов; вместо этого извлеките содержимое пакета и поместите его в свою систему вручную, записывая заметки о том, что вы сделали, чтобы в случае необходимости вы могли это отменить.

Командная строка
Некоторые люди предпочитают командную строку за те преимущества, которые она дает. Эти преимущества можно резюмировать в три момента:

Легкость автоматизации
Скорость (по сравнению с нажатием кнопок в графическом интерфейсе)
Выразительность

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

Извините за длинный ответ. Если вам нужна краткая и понятная информация, просто прочтите резюме.

Резюме

Исполняемый формат одинаков.
Существуют разные менеджеры пакетов, которые не совместимы, даже если упакованные программы совместимы. (Вы можете рассматривать пакет как файл установщика, такой как .msi файлы).
В основном разные дистрибутивы/версии имеют разные версии основных библиотек, и по соображениям согласованности и стабильности приложения нужно строить в соответствии с этими версиями. (Версия Linux адского ада DLL).
Разные дистрибутивы делают вещи немного по-разному, и это может в некоторых случаях привести к проблемам совместимости.
Командная строка может быть быстрее, а командная строка Unix значительно лучше, чем командная строка Windows.

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

Разные менеджеры пакетов
Существуют различные менеджеры пакетов с разными сильными и слабыми сторонами. Примеры: rpm и менеджер пакетов debian (.deb файлы), но есть и другие. Эти менеджеры пакетов, очевидно, требуют разных форматов и, следовательно, не совместимы.

Разные дистрибутивы или версии
Так как большинство дистрибутивов Linux является открытым исходным кодом, существует гораздо больше повторного использования кода, чем в системах Windows. Программа может использовать несколько библиотек для различных частей своей функциональности. Эти библиотеки сами тоже часто так делают, иногда даже одну и ту же библиотеку. К сожалению, библиотеки существуют в разных версиях, и некоторые из них несовместимы (особенно бинарная совместимость для предварительно скомпилированных исполняемых файлов). Несколько версий могут хорошо сосуществовать в системах Unix (меньше ада DLL с этой точки зрения), но в большинстве случаев использование двух разных версий библиотеки в одной работающей программе является гарантией сбоев.

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

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

Командная строка
Unix в первую очередь является операционной системой для рабочих станций и серверов. Это означает, что она разрабатывалась с учетом профессиональных системных администраторов. Автоматизация является важной частью инструментов системного администрирования, и оболочка скриптов – это способ ее реализации. Попробуйте добавить ведущий 0 к 1000 имен файлов в графическом файловом менеджере. Поскольку администраторы часто управляют многими машинами, им необходимо выполнять одни и те же действия на нескольких системах. Используя такие инструменты, как ssh, чрезвычайно легко выполнять задачу на нескольких системах одновременно и просто ждать, пока компьютер сделает работу.

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

Microsoft на самом деле хорошо это понимает и предлагает PowerShell в качестве замены командной строки, а также последняя версия сервера Windows в основном администрируется через командную строку.

Исполняемые форматы во всех дистрибутивах одинаковы, но исполняемые файлы могут требовать дополнительного программного обеспечения для корректной работы. Если вы посмотрите на дистрибутивы на основе Redhat, продукт установки – это rpm, который включает все требования для данного программного обеспечения и по умолчанию не установит это программное обеспечение, если требования не выполнены. (yum является альтернативой rpm и используется некоторыми версиями на основе Redhat). По определению, графический интерфейс должен занимать гораздо больше места, чем интерфейс командной строки. Основная философия UNIX заключается в том, чтобы упростить все, чтобы данная задача работала максимально эффективно. Вот почему так много утилит выполняют одну задачу, вывод этой задачи можно использовать в качестве ввода для другой задачи, чтобы сделать что-то еще.

Разные дистрибутивы имеют разные требования к установке. Однако существуют RPM или DEB (или другие пакеты для систем управления пакетами), которые работают для более чем одного дистрибутива. Философия Linux делает исходный код легко доступным. При компиляции собственного программного обеспечения это практически одинаковая рутина для всех дистрибутивов, и это всегда один и тот же архив .tar.gz, который вы используете.

Скомпилированные RPM представляют собой большее, чем часть системы; приложение само по себе, как самостоятельный объект, предназначено для распространения и компиляции на каждой целевой системе.

Ваш второй вопрос совершенно другой… Что ж, “много пользователей Linux” предпочитают CLI-приложения по многим причинам, небольшой объем памяти – только одна из причин. При использовании SSH CLI-приложения имеют больше смысла, особенно когда вы работаете вне сайта на серверах. Чаще всего на этих серверах не установлены графические окружения. Когда вы запускаете недемонизированные программы, их очень легко прервать. Ctrl – c, и программа исчезла. Кроме того, многие программы записывают в консоль, так что отлаживать их проще. При программировании вы выполняете большую часть компиляции в консоли. Это просто имеет больше смысла для быстрой отладки компиляции. Это либо так, либо чтение файлов журналов, иногда чтение консоли быстрее.

Arch. Или FreeBSD, который разрабатывается целиком. (RHEL, SLES и подобные являются поддерживаемыми в целом.)

Использование ноутбука: Mint

Использование возможностей: Arch.

Садистская настраиваемость: Genoo.

Развлекательная настраиваемость: LFS.

Поддерживаемость (сервер): RHEL, Ubuntu LTS, FreeBSD (отличается от Linux).

Ваш вопрос больше напоминает 5 вопросов. Эти ответы могут ответить на некоторые из них:
Графические интерфейсы могут подвисать.
Команда в командной строке – нет.
Вместо того чтобы каждое приложение имело свой собственный графический интерфейс, гораздо проще и удобнее, чтобы все программы использовали один общий хорошо сделанный терминал (терминал macOS с профилем Pro – лучший на мой взгляд).
Командная строка может использоваться удаленно по SSH без проблем.
Удаленные графические решения (то есть VNC) тормозят и плохи.
Графические интерфейсы часто не имеют функциональности, присутствующей в версии командной строки.
Например, в графическом интерфейсе Livepatch нет эквивалента команды sudo canonical-livepatch refresh.
Обновление системы через графический интерфейс вызвало у меня проблемы в прошлом. Обновление через командную строку (возможно, с использованием скрипта, который я создал) – это правильный путь.
Unix полностью основан на командной строке.
Например, я на 99,9% уверен, что утилита архивации macOS является просто оболочкой для команды tar.
Более того, я уверен, что графический интерфейс обновления Ubuntu просто запускает команды терминала, такие как sudo apt update; насколько я вижу, он сам по себе ничего не делает.

Ответ или решение

Понимание форматов исполняемых файлов Linux и пакетов распределения программного обеспечения

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

Исполняемые форматы и дистрибутивы

Исполняемые файлы в Linux, как правило, имеют одинаковый базовый формат — это Executable and Linkable Format (ELF), который является стандартом для Linux и Unix систем. Однако, несмотря на единообразие формата, проблема совместимости возникает из-за различий в пакетах, которые используются для установки и управления программами, а также в зависимости от библиотек и системных компонентов, которые разные дистрибутивы могут требовать.

Дистрибутивы Linux, такие как Ubuntu, Fedora, Arch Linux и другие, используют различные менеджеры пакетов: apt, yum, dnf, pacman и т.д. Каждый из этих менеджеров требует свои собственные пакеты — например, .deb для Debian/Ubuntu и .rpm для Red Hat/Fedora. Эти пакеты содержат исполняемые файлы и информацию о зависимостях, которые необходимы для того, чтобы программа работала корректно. Это делает невозможным использование пакета, собранного для одного дистрибутива, в другом, если он не совместим с используемым менеджером пакетов.

Менеджеры пакетов и зависимости

Менеджеры пакетов — это основные инструменты для установки и удаления программного обеспечения в Linux. Они обеспечивают проекты, содержащие местные и удаленные репозитории, где размещены пакеты. Когда вы устанавливаете пакет, менеджер автоматически управляет зависимостями, чтобы гарантировать, что все необходимые библиотеки и компоненты установлены.

В зависимости от дистрибутива, менеджеры пакетов могут иметь разные подходы к обработке зависимостей:

  • Debian/Ubuntu: Используют apt или dpkg, где зависимости строго контролируются и могут быть автоматически устанавливаны.
  • Fedora/Red Hat: Используют yum или dnf, которые аналогичным образом обрабатывают зависимости.

Некоторые пакеты могут зависеть от определённых библиотек или компонентов, которые могут изменяться в зависимости от конфигурации системы или версии дистрибутива, что порождает "дьявольские проблемы зависимостей", иногда называемые "адом DLL".

Различия в разделении и пакетировании

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

Также стоит отметить, что дистрибутивы могут иметь различия в структуре каталогов и системах инициализации, что также может повлиять на установку и функционирование программ. Например, пакет, который в одном дистрибутиве относится к группе "dev-utils" и содержит определенные утилиты, может в другом дистрибутиве иметь совершенно другой состав.

Почему многие пользователи Linux предпочитают текстовые интерфейсы

Хотя ресурсы и место на диске имеют значение, основные причины, по которым пользователи Linux часто выбирают текстовые интерфейсы (CLI) вместо графических (GUI), можно свести к нескольким аспектам:

  1. Автоматизация: С помощью командной строки можно легко создавать скрипты для автоматизации повторяющихся задач.

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

  3. Высокая выразительность: Командная строка предоставляет возможность выполнения сложных операций и комбинаций команд, которые невозможно или неэффективно реализовать с GUI.

  4. Удалённый доступ: При работе с серверами, где графический интерфейс может быть недоступен, CLI обеспечивает функционирование и управление.

  5. Легкость отладки: Многие программы выводят логи и сообщения об ошибках в консоль, что делает отладку более простой.

Заключение

В заключение, понимание различий в форматах исполняемых файлов и системах управления программным обеспечением в Linux требует учета множества факторов — от менеджеров пакетов до особенностей самих дистрибутивов. Хотя исполняемые форматы могут быть универсальными, различия в библиотечных зависимостях и способах пакетирования создают необходимость в индивидуальной сборке программ для каждого дистрибутива. Тем не менее, command-line интерфейсы предоставляют множество преимуществ, делающих их популярным выбором среди пользователей системы.

SEO-оптимизация

Ключевые слова: Linux, исполняемые форматы, дистрибутивы, менеджеры пакетов, командная строка, GUI, зависимости, автоматизация, отладка, репозиторий, .deb, .rpm, APT, YUM, DNF.

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

Оцените материал
Добавить комментарий

Капча загружается...