Привычный способ ставить программы для Windows-пользователя — бродить по интернету в поисках нужных приложений. В *nix-системах такой способ хоть и используется, но значительно реже. Для установки программ, особенно связанных с разработкой, придумали пакетные менеджеры. Далее, для всех примеров я буду использовать пакетный менеджер apt, который поставляется с Ubuntu.

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

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

Например, установка PHP в Ubuntu выглядит так:

$ sudo apt install php
# Здесь будет много текста и вопрос, устанавливать ли? Если да, то установится PHP
$ php -v
PHP 7.2.7 (cli) (built: Jun 22 2018 06:27:50) ( NTS )

Пакетный менеджер состоит из нескольких частей. Одна из них взаимодействует с пользователем напрямую — это консольная утилита apt. Для установки необходимой программы нужно набрать apt install и далее указать её имя. Почти всегда пакетные менеджеры требуют запуска от суперпользователя (root), так как установка программ происходит в системные директории, недоступные для записи обычному пользователю (но это не всегда так, в macOS не нужно использовать sudo).

$ apt install php
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

Установленные пакеты можно удалять. Для этого используется команда apt remove:

$ apt remove php
# Тут тоже много вывода и вопрос, удалять ли?

На другом конце провода находится каталог так называемых пакетов. Во время попытки установить программу утилита apt выполняет запрос в каталог и пытается понять, есть ли там пакет с таким именем. Если его нет, то вы об этом узнаете:

# Пакета wrongname не существует
$ sudo apt install wrongname
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package wrongname

Для экономии ресурсов (сети) и ускорения работы apt сохраняет индекс (список пакетов в каталоге) на локальный диск и использует его для своей работы. Иногда это может приводить к ситуациям, что пакет в реальности существует, но apt утверждает обратное. Если вы чувствуете подвох, то запустите ручное обновление локального индекса:

$ sudo apt update
# Теперь можно устанавливать
$ sudo apt install php

После прочтения первой части у вас должно возникнуть как минимум три вопроса:

  1. Как узнать какой пакет ставить?

    Когда появляется необходимость установить определённую программу, то самый очевидный способ сделать это, найти сайт программы и выполнить действия, указанные на странице "Скачать" (обычно Download). Как правило, на этой странице есть указание о том, как можно использовать пакетный менеджер, с примерами команд, включающих в себя названия пакета. Пример: Node.js.

    Другой способ: загуглить статьи в стиле php install ubuntu. В таких статьях установка всегда идёт через пакетный менеджер. Со временем вы запомните имена многих пакетов и сможете ставить их "на автомате".

  2. Чем пакет отличается от программы?

    Сама программа ничего не знает про существование пакетного менеджера. Но чтобы её можно было ставить через менеджер пакетов, она должна быть специальным образом "упакована". Это может сделать как автор программы, так и энтузиасты. В Ubuntu используется специальный формат пакетов, называемый deb. У этого формата есть подробная документация о том, как производить упаковку.

  3. Как программы попадают в каталог?

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

Пакетные менеджеры не являются прерогативой операционных систем: любая экосистема, внутри которой возможно распространение библиотек или программ, имеет свой пакетный менеджер. Пакетные менеджеры есть у всех языков программирования, иногда несколько, большинство из них включены в языки по умолчанию. В Node.js (серверный JavaScript) пакетный менеджер npm, в PHP — Composer, в Ruby — RubyGems, в Python — pip.

Самостоятельная работа

  • Установите программу tree, используя пакетный менеджер и запустите её. Она выводит список файлов в виде дерева.
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →