Синтаксис и опции apt
Синтаксис команды apt очень простой и похож на другие команды Linux:
$ apt опции команда параметры_команды
Опции указывают общее поведение утилиты, команда — действие, которое надо выполнить, а в параметрах команды обычно передается имя пакета, с которым следует работать, например, установить или удалить. Вот основные опции утилиты:
- -v, —version — выводит версию утилиты;
- -h, —help — выводит справку по использованию утилиты;
- -y, —yes — автоматически отвечать «да» на все возникающие вопросы;
- —assume-no — автоматически отвечать «нет» на все возникающие вопросы;
- -d, —download-only — только скачать пакеты и больше ничего не делать;
- -f, —fix-broken — исправить недостающие зависимости;
- —no-download — ничего не загружать, использовать только пакеты из кэша;
- -s, —simulate — режим симуляции, никакие операции не выполняются, только выводится информация на экран;
- —allow-unauthenticated — позволяет установить пакеты, из репозиториев, для которых нет GPG подписи;
- —no-install-recommends — не устанавливать рекомендованные пакеты, по умолчанию будут установлены;
- -m, —ignore-missing — игнорировать пакеты, которые существует;
- -q, —quiet — выводить минимум информации, не показывать прогресс бар;
- -V, —verbose-versions — показывать полные версии обновленных пакетов;
- —only-upgrade — не устанавливать новые пакеты, только обновлять;
- —allow-downgrades — разрешить откатывать версию пакетов;
- —reinstall — переустановить пакет если он уже установлен;
А теперь давайте пройдёмся по командам apt, которые вы можете использовать:
- install — установить пакет;
- remove — удалить пакет, конфигурационные файлы, которые были изменены в вашей системе удалены не будут;
- purge — полностью удалить пакет, вместе со всеми его конфигурационными файлами;
- autoremove — очистить ненужные пакеты;
- autoclean — очистить кэш пакетов;
- update — обновить списки пакетов из репозиториев;
- upgrade — обновить версию пакета до последней, если пакет не указан будут обновлены все пакеты;
- full-upgrade — полное обновление системы, включая удаление несовместимых или больше ненужных пакетов;
- list — список установленных пакетов;
- search — поиск пакетов;
- show — посмотреть информацию о пакете;
- download — скачать пакет в текущую папку;
- edit-sources — открыть с настройками репозиториев в текстовом редакторе.
- source — скачать исходный код пакета в текущую папку;
- build-dep — установить зависимости необходимые для сборки выбранного пакета;
Дальше рассмотрим несколько примеров работы с apt, которые пригодятся как начинающим, так и более опытным пользователям.
Как исправить Unable to lock the administration directory /var/lib/dpkg
Существует несколько способов решения данной проблемы. Рассмотрим все возможные варианты. Первый способ этой найти запущенный процесс apt и завершить его. Для этого сначала необходимо выполнить команду в терминале:
Данная команда отобразит идентификатор процесса, выполняющего процесс apt. В приведенном выше примере идентификатор процесса — 28382.
Можно использовать идентификатор процесса, чтобы завершить его. Необходимо заменить идентификатор процесса числом, которое было получено в выводе предыдущей команды. В данном примере это число 28382. Команда будет выглядеть следующем образом:
Далее необходимо проверить, был ли процесс остановлен, запустив команду ps aux | grep -i apt еще раз. Если процесс все еще работает, его необходимо принудительно уничтожить при помощи команды:
Другой, более простой способ — использовать команду killall, она завершит все экземпляры запущенной программы. Для этого необходимо выполнить команду:
Второй способ заключается в удаление файлов блокировки. Но, прежде чем удалять данные файлы, необходимо остановить процессы, использующие файлы блокировки. Для этого необходимо выполнить одну из следующих команд ориентируясь на ту, которая вернет число:
Возможно, команды ничего не будут возвращать или вернут только одно число. Полученное число из вывода необходимо использовать чтобы завершить процесс (необходимо заменить process_id числом, полученным из приведенных выше команд):
И только после этого можно безопасно удалить файлы блокировки, используя следующие команды:
После удаления файлов блокировки необходимо переконфигурировать пакеты при помощи команды:
Концепция репозиториев в Ubuntu
Итак, вы уже знаете, что для установки программного обеспечения в Ubuntu вы можете использовать команду apt. Это тот же диспетчер пакетов APT, который используется под Ubuntu Software Center. Таким образом, все программное обеспечение (кроме пакетов Snap), которое вы видите в Центре программного обеспечения, в основном от APT.
Вы когда-нибудь задумывались, откуда программа apt устанавливает программы? Как он узнает, какие пакеты доступны, а какие нет?
Apt в основном работает на хранилище. Хранилище – это не что иное, как сервер, содержащий набор программного обеспечения. Ubuntu предоставляет набор репозиториев, так что вам не придется искать в Интернете установочный файл различного программного обеспечения, которое вам нужно. Этот централизованный способ предоставления программного обеспечения является одним из основных преимуществ использования Linux.
Менеджер пакетов APT получает информацию о репозитории из файла /etc/apt/sources.list и файлов, перечисленных в каталоге /etc/apt/sources.list.d. Информация о репозитории обычно представлена в следующем формате:
Фактически, вы можете перейти по указанному выше адресу сервера и посмотреть как устроен репозиторий.
Когда вы обновляете Ubuntu с помощью команды apt update, менеджер пакетов apt получает информацию о доступных пакетах (и их версии) из репозиториев и сохраняет их в локальном кэше. Вы можете увидеть это в каталоге /var/lib/apt/lists.
Хранение этой информации локально ускоряет процесс поиска, потому что вам не нужно проходить через сеть и искать в базе данных доступных пакетов, просто чтобы проверить, доступен ли определенный пакет или нет.
Теперь вы знаете, как хранилища играют важную роль, давайте посмотрим, почему в Ubuntu есть несколько хранилищ.
Обновление пакетов Ubuntu через терминал
Для обновления через терминал обычно используется инструмент командной строки apt. Эта утилита позволяет не только обновлять пакеты, но и устанавливать и удалять программное обеспечение, искать программы, настраивать репозитории и т д.
Первым делом, нам необходимо выполнить обновление репозиториев ubuntu, для этого используется такая команда обновления ubuntu:
Утилита нам сразу подсказывает, что есть обновления и мы можем узнать, какие пакеты будут обновлены:
Теперь непосредственно обновление системы Ubuntu. Для этого есть две опции upgrade и full-upgrade (раньше dist-upgrade). Рассмотрим в чем разница между upgrade и dist upgrade:
- upgrade — устанавливает самые новые версии всех пакетов доступные в репозиториях. Использует все репозитории их /etc/apt/souces.list и /etc/apt/souces.list.d/*. То есть обновляются пакеты не только из официальных репозиториев, но и из PPA. Обновляются только установленные пакеты, если же для обновления пакета необходимо установить или удалить другой пакет, такие пакеты обновлены не будут.
- full-upgrade — кроме всего, что делает upgrade, здесь поддерживается умное разрешение зависимостей для новых версий пакетов. Конфликтующие пакеты могут быть удалены, а новые, дополнительные — установлены.
Таким образом, установка обновлений Ubuntu может быть выполнена одной из команд:
Причем рекомендуется именно вторая команда обновления ubuntu, поскольку она более продумана и обновляет больше пакетов.
Здесь не обязательно обновлять все пакеты, мы можем обновить только один определенный пакет, например браузер:
Опцию full-update мы используем чтобы обновить включая установку новых зависимостей.
Отключение unattended-upgrades
Кроме автоматического запуска apt, в системах на базе Debian имеются включенные по умолчанию unattended-upgrades – те же самые автоматические обновления.
Из описания данного пакета непонятно, автоматически устанавливаются только критические обновления, связанные с безопасностью, или все.
Для изменения этих настроек можно отредактировать файл /etc/apt/apt.conf.d/20auto-upgrades, в нём имеются следующие строки:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
Первая отвечает за обновление списка пакетов, а вторая – за обновления самих пакетов в системе. Этот файл можно изменить вручную (чтобы остановить автоматическое обновление, вместо 1 впишите ) либо запустить конфигуратор:
sudo dpkg-reconfigure -plow unattended-upgrades
Переключения между кнопками, используйте клавишу <TAB>, для выбора используйте <ENTER>.
Что характерно, в Kali Linux по умолчанию отключены автоматические службы apt как и вообще все сетевые службы, которые так или иначе используют доступ в сеть, но почему-то включены unattended-upgrades – либо авторы известного дистрибутива забыли о них, либо считают эти обновления важными.
Что значит эта ошибка
В операционной системе Ubuntu 20.04 получить данную ошибку можно при выполнении таких команд как apt update, apt upgrade или apt install. А полный текст ошибки выглядит вот так:
- E: Could not get lock /var/lib/apt/lists/lock. It is held by process 4746 (aptd)
- N: Be aware that removing the lock file is not a solution and may break your system.
- E: Unable to lock directory /var/lib/apt/lists/
Так же можно получить следующую ошибку:
Waiting for cache lock: Coud not get lock /var/lib/dpkg/lock-frontend. It is held by process
Если дословно перевести значение данной ошибки, то утилита сообщает что не может создать файл блокировки /var/lib/apt/lists/lock далее утилита спрашивает нет ли уже запущенного второго экземпляра программы apt, который уже создал этот файл и сейчас работает с данной директорией.
Как правило данная ошибка появляется из-за того, что уже запущен другой экземпляр программы apt который или обновляет пакеты операционной системы или устанавливает какие-либо программы. Когда команда apt или графическое приложение для обновления системы обновляют систему или устанавливают новое программное обеспечение, они блокируют файл dpkg (менеджер пакетов в операционных системах семейства Debian).
Эта блокировка выполняется для того, чтобы два процесса не изменяли содержимое файла dpkg одновременно, так как это может привести к неоправданному риску поломки всей системы.
Также данная ошибка может возникать при выполнении автоматических обновлений. За данную опцию отвечает пакет под именем unattended-upgrades который как правило присутствует в большинстве дистрибутивов по умолчанию и запускается автоматически при загрузке операционной системы.
Как синхронизировать APT с репозиториями
Чтобы обновить индекс пакетов вашего компьютера в каждом из репозиториев, к которым он подключен, используйте команду apt update . Эта команда, которая в целях обеспечения надлежащего обслуживания всегда должна быть первой, которую вы вызываете перед внесением других изменений пакетов, синхронизирует вашу локальную копию доступных пакетов и их версий с индексом текущего состояния с репозиториями. Запустите это:
Apt обрабатывает обновления. Иногда он выдает ошибки, например, об отсутствующих ключах безопасности или других ошибках. Просмотрите выходные данные команды, чтобы определить, не возникли ли у вас какие-либо критические ошибки конфигурации. Хорошая вещь в запуске apt update — это быстрый обзор состояния вашей среды управления пакетами.
Посетите страницу документации сообщества Ubuntu для получения подробных инструкций по добавлению новых репозиториев программного обеспечения .
Обновление при помощи образа CD или образа USB
Если Вы будете использовать 10,04 LTS/12.04 LTS или 11.10/13.10 и Вас или вставите живой CD или начальную загрузку с живого CD, чтобы начать устанавливать его, то даст опцию обновления до 12.04/14.04. Это автоматически обнаружит установленные приложения и установит обновленную версию Ваших приложений также.
При загрузке ISO рекомендация состоит в том, чтобы выполнить md5sum проверку, чтобы гарантировать, что и загруженный ISO и записанный CD допустимы.
Обновление от 10,04 LTS/12.04 LTS (здесь показанный с двойной загрузкой):
Примечание: Обновления от 10,04 до 12,04 / Обновления от 12,04 до 14,04 еще не активируются, видят этот вопрос для большего количества детали:
-
Обновление от 11.10/13.10
Handling “Unable to parse package file” error in Ubuntu and Debian-based Linux distributions
Here’s what you need to do. Take a closer look at the name and path of the file the Ubuntu is complaining about.
Reading package lists… Error!E: Unable to parse package file /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InReleaseE: The package lists or status file could not be parsed or opened.
For example, in the above error, it was complaining about /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease
This gives you the idea that something is not right with this file. Now all you need to do is to remove this file and regenerate the cache.
So in my case, I could use this command: sudo rm /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease and then rebuild the cache with sudo apt update command.
Step by step for beginners
If you are familiar with Linux commands, you may know how to do delete the file with its absolute path. For novice users, let me guide you to safely delete the file.
First, you should go to the directory where the file is stored:
Now delete the file which is not being parsed:
Now if you run the update again, the apt cache will be regenerated.
Too many files cannot be parsed?
This is fine if you have one or two files that are not being parsed while updating the system. But if the system complains about ten or twenty such files, removing them one by one is too tiring.
What you can do in such a case to remove the entire cache and then generate it again:
Explanation of how it fixed your problem
The /var/lib/apt is the directory where files and data related to the apt package manager are stored. The /var/lib/apt/lists is the directory which is used for storing information for each package resource specified in your system’s sources.list.
In slightly non complicated terms, this /var/lib/apt/lists stores the package information cache. When you want to install or update a program, your system checks in this directory for the information on the said package. If it finds the detail on the package, then it goes to remote repository and actually download the program or its update.
When you run the “sudo apt update”, it builds the cache. This is why even when you remove everything in the /var/lib/apt/lists directory, running the update will build a fresh cache.
This is how it handles the issue of file not being parsed. Your system complained about a particular package or repository information that somehow got corrupted (either a failed download or manual change to sources.list). Removing that file (or everything) and rebuilding the cache solves the issue.
Still facing error?
This should fix the issue for you. But if the problem still persists or if you have some other related issue, let me know in the comment section and I’ll try to help you out.
3.2 Установка пакетов
Наконец-то, ожидание окончено! Ваш sources.list готов и списки доступных
пакетов обновлены, теперь вам только остается дать команду
apt-get, чтобы установить предпочитаемый пакет. Например, вы
можете запустить:
apt-get install xchat
APT будет искать в своей базе данных наиболее свежие версии пакетов и будет
скачивать их из соответствующих архивов так, как они указаны в
sources.list. В случаях, когда пакет зависит от другого — как в
варианте ниже — APT проверит зависимости и установит необходимые пакеты. См.
пример:
@[/] # apt-get install nautilus Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 17.2MB will be used. Do you want to continue? [Y/n]
Пакет зависит от совместно-используемых библиотек,
поэтому APT скачает их из архива. Если бы вы указали имена этих библиотек в
командной строке apt-get, то APT не стал бы спрашивать у вас
разрешения продолжать установку; он бы автоматически решил, что вы хотите
установить все эти пакеты.
Это означает, что APT запрашивает подтверждения только тогда, когда нужно
установить пакеты, которые не были перечислены в командной строке.
Вам могут быть полезны следующие опции apt-get:
-h справка -d только загрузить - не устанавливать и не распаковывать архивы -s ничего не делать реально, имитировать выполнение -y предполагается ответ Yes на все вопросы, сами вопросы не выводить -f продолжать, даже если проверка целостности не удачна -u плюс ко всему показывать список обновленных пакетов
В одной строке можно задавать несколько пакетов. Скачанные из сети файлы
помещаются в каталог для дальнейшей установки
/var/cache/apt/archives.
Также, вы можете указывать пакеты для удаления в той же командной строке.
Просто поместите ‘-‘ сразу после имени удаляемого пакета, например:
@[/] # apt-get install nautilus gnome-panel- Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Более подробную информацию об удалении пакетов можно найти в разделе .
Если вы обнаружили, что пакет испортился, или просто хотите переустановить
файлы пакета более новой доступной версии, то вы можете использовать опцию
—reinstall, например:
@[/] # apt-get --reinstall install gdm Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. Need to get 0B/182kB of archives. After unpacking 0B will be used. Do you want to continue? [Y/n]
При создании этого руководства APT имел версию 0.5.3, которая была текущей
версией в Debian `unstable’ (sid) на время написания. Если вы
установили эту версию, то вам доступны некоторые дополнительные возможности: вы
можете использовать команды типа apt-get install пакет/дистрибутив
для установки пакетов из указанных дистрибутивов, или apt-get install
пакет=версия. Например:
apt-get install nautilus/unstable
установит nautilus из дистрибутива `unstable’ (нестабильный), даже если вы
работаете на `stable’ (стабильном). Для ‘distribution’ допускаются значения
stable, testing и unstable.
Вы можете предпочесть использование ключа -t для выбора целевого
дистрибутива, указывающего предпочесть указанный
дистрибутив при обработке зависимостей.
ВАЖНО: `unstable’ версия Debian — это самая первая версия, в которой
появляются новейшие версии пакетов Debian. Этот дистрибутив подвергается
воздействию изменений, сделанных в пакетах, и маленьким, и большим, каждое из
которых может воздействовать на множество пакетов или систему в целом
По этой
причине, эта версия дистрибутива не должна использоваться неопытными
пользователями или теми, кто ожидает стабильности.
Дистрибутив `testing’ (тестируемый) несколько лучше `unstable’ в отношении
стабильности, но на производстве лучше все-таки использовать стабильный
дистрибутив.
3.9 Как сохранять указанные версии установленных пакетов (сложный способ)
Могло случиться так, что вы изменяете что-то в пакете и не имеете времени или
не хотите портировать эти изменения в новую версию программы. Или, к примеру,
вы может быть просто собиретесь обновить ваш дистрибутив Debian до версии 3.0,
на при этом хотите по-прежнему использовать некоторые пакеты из Debian 2.2. Вы
можете «приколоть» (pin) установленные версии пакетов так, чтобы они
не обновлялись.
Это делается просто. Вам всего лишь надо отредактировать файл
/etc/apt/preferences.
Его формат прост:
Package: <package> Pin: <pin definition> Pin-Priority: <pin's priority>
Например, чтобы предотвратить модификацию пакета версии
0.4.99, которую я поправил на предмет «reply-to-list», я ввел
следующее:
Package: sylpheed Pin: version 0.4.99*
Обратите внимание, что я использовал * (звездочка). Это
«маска»; она означает, что я хочу «приколоть» (pin) все
версии, начиная с 0.4.99
Это нужно потому, что в Debian-версиях пакетов в
номере версии присутствует «номер редакции Debian», а я не хочу
отменять установку этих редакций. Так, например, версии 0.4.99-1 и 0.4.99-10
будут установлены, как только станут доступны. Обратите внимание, что если вы
внесли свои изменения в пакет, то такой способ вам не подойдет.
Поле Pin-Priority необязательно; если оно не указано, то по
умолчанию оно равно 989.
Давайте рассмотрим работу приоритетов. Приоритет менее 0 указывает, что пакет
никогда не должен устанавливаться. Приоритет от 0 до 100 означает пакеты,
которые не установлены и которые не имеют доступных версий. Они не входят в
процесс выбора версий. Приоритет 100 назначается установленному пакету — для
замены установленной версии пакета другой версией, заменяющий пакет должен
иметь приоритет выше 100.
Приоритеты выше 100 указывают, что пакет должен быть установлен. Обычно,
установленная версия пакета изменяется только при обновлении до новой версии.
Любые приоритеты от 100 до 1000 (включительно) определяют это типичное
поведение. Пакет с таким приоритетом не будет даунгрейдиться до доступной
версии с меньшим номером версии. Для примера, если у меня установлен sylpheed
0.5.3 и определен pin на sylpheed 0.4.99 с приоритетом 999, то пакет 0.4.99
не будт установлен из-за значения pin. Чтобы можно было установить
пакет меньшей версии, значение pin должно иметь приоритет выше 1000.
pin может быть определен для version, release или
origin пакета.
При указании pin для версий, как мы видели, для указания
нескольких версий за один раз поддерживаются литеральные номера версий, равно
как и маски.
Опция release зависит от файла Release из репозитория APT или с
CD. Эта опция может не использоваться вовсе, если вы используете репозитории
пакетов, которые не обеспечивают этот файл. Вы можете увидеть содержимое
файлов Release, которые вы используете в каталоге
/var/lib/apt/lists/. Параметры для опции release: a
(archive — архив), c (components — компоненты), v
(version — версия), o (origin — источник) и l
(label — метка).
Пример:
Package: * Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian Pin-Priority: 1001
В этом примере, мы выбираем версию 2.2* Debian (которая может быть 2.2r2, 2.2r3
— это «точечные выпуски», которые обычно включают исправления
безопасности и другие важные обновления), стабильный репозиторий,
раздел main (как противовес contrib или
non-free) и источник и метку Debian. Источник (o=) определяет,
кто создал данный файл Release, метка (l=) определяет имя дистрибутива: Debian
для самого Debian и Progeny для дистрибутива Progeny, например. Пример файла
Release:
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release Archive: stable Version: 2.2r3 Component: main Origin: Debian Label: Debian Architecture: i386
APT HOWTO (Obsolete Documentation)
1.8.2 — Ноябрь 2002Gustavo Noronha Silva
Почему появился apt?
Раньше в Ubuntu использовалась очень мощная система управления пакетами дистрибутива Debian. Её преимущество в том, что она имеет очень много функций, полезных для разработчиков, но из этого возникает один недостаток, эти функции были разнесены по нескольким исполняемым файлам. Большинство возможностей обычные пользователи не используют, а те, которые они используют оказались разбиты на две утилиты: apt-get и apt-cache.
Ubuntu стремится к простоте. Утилита apt была реализована, чтобы упростить работу с менеджером пакетов и объединить несколько команд в одну. Функциональность apt-get и apt-cache была переписана, и несмотря на то, что теперь утилита полностью совместима с apt-get, её код новый.
Хотят ли люди признавать или нет, но apt-get — устаревший инструмент и практичность его применения очень сомнительна. Инструмент apt был разработан с нуля, чтобы быть еще эффективнее, он предназначен быть приятным для новых пользователей.