You are here: Home » Справка и подсказки » Практические примеры использования pacman

Практические примеры использования pacman

Источники:

Установка пакетов

Установка определенных пакетов

Для установки одного пакета или списка пакетов (включая зависимости) используйте следующую команду:

pacman -S имя_пакета1 имя_пакета2 ...

Для установки списка пакетов при помощи поиска по регулярному выражению (смотрите раздел Операции и синтаксис Bash и эту ветку форума):

pacman -S $(pacman -Ssq регулярное_выражение)

Если пакет имеет несколько версий в разных репозиториях (например, в extra и testing), можно указать, откуда именно следует установить пакет:

pacman -S extra/имя_пакета

Установка группы пакетов

Некоторые пакеты объединены в группы пакетов, и они могут быть установлены одновременно. Например, при выполнении команды:

pacman -S gnome

вам будет предложено выбрать пакеты из группы gnome, которые вы хотели бы установить.

Некоторые группы содержат большое количество пакетов, и среди них могут быть всего несколько нужных или ненужных вам. Вместо того, чтобы вводить все необходимые вам номера, иногда удобнее выбрать или исключить отдельные числа или диапазоны чисел при помощи приведенного ниже синтаксиса:

Enter a selection (default=all): 1-10 15

— будут выбраны все пакеты в диапазоне с 1 по 10, а также 15;

Enter a selection (default=all): ^5-8 ^2

— будут выбраны все пакеты, кроме входящих в диапазон с 5 по 8, а также 2.

Чтобы увидеть список пакетов, принадлежащих к группе gnome, выполните:

pacman -Sg gnome

Перечень доступных групп пакетов можно изучить, посетив https://www.archlinux.org/groups/.

Обратите внимание: Если пакет в списке уже установлен, он будет переустановлен даже если была установлена последняя версия. Это поведение можно изменить опцией --needed.

Удаление пакетов

Для удаления пакета без удаления установленных зависимостей:

pacman -R имя_пакета

Для удаления пакета со всеми зависимостями, не используемыми другими установленными пакетами:

pacman -Rs имя_пакета

Для удаления пакета, его зависимостей и всех пакетов, зависящих от целевого пакета:

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

pacman -Rsc имя_пакета

Для удаления пакета, который требуется другому пакету, без удаления зависимого пакета:

pacman -Rdd имя_пакета

pacman создает резервные копии конфигурационных файлов удаляемых приложений и добавляет к ним расширение .pacsave. Если вы хотите удалить и эти файлы, используйте ключ -n:

pacman -Rn имя_пакета

Обратите внимание: pacman не удаляет конфигурационных файлов, созданных самими приложениями (например, скрытые файлы (имя которых начинается с точки) в вашем домашнем каталоге).

Обновление пакетов

pacman может обновить все пакеты системы одной командой. Это может занять длительное время в зависимости от того, насколько свежие пакеты установлены в вашей системе. Следующая команда выполнит одновременно синхронизацию локальной базы данных репозиториев и обновление вашей системы (не будут обновлены 'локальные' пакеты, отсутствующие в настроенных репозиториях):

pacman -Syu

Важно: В связи с тем, что Arch является постоянно обновляемым дистрибутивом, пользователям следует помнить, что после или в процессе обновления могут возникнуть непредвиденные трудности. Поэтому обновляться следует с осторожностью. Это означает, что если, например, ожидаются большие изменения или нововведения в обновляемых пакетах, то обновлять систему лучше тогда, когда у вас будет достаточно свободного времени и вы будете готовы к решению возможных проблем.

Запросы к базам данных пакетов

pacman с помощью флага -Q может искать пакеты в локальной базе данных:

pacman -Q --help

а с помощью флага -S — в базе данных, синхронизированной с репозиториями:

pacman -S --help

pacman умеет искать пакеты в базе данных как по названиям, так и по описаниям:

pacman -Ss условие1 условие2 ...

Для поиска среди установленных пакетов:

pacman -Qs условие1 условие2 ...

Для отображения подробной информации об указанном пакете:

pacman -Si имя_пакета

и для установленных пакетов:

pacman -Qi имя_пакета

Использование сразу двух флагов -i позволит просмотреть список резервных копий файлов и список измененных файлов:

pacman -Qii имя_пакета

Для получения списка файлов установленного пакета:

pacman -Ql имя_пакета

Для неустановленных пакетов используйте pkgfile.

Чтобы проверить наличие файлов, установленных пакетом:

pacman -Qk имя_пакета

Использование сразу двух флагов k выполнит более тщательную проверку.

Чтобы узнать, какому пакету принадлежит нужный файл:

pacman -Qo /путь/к/файлу/имя_файла

Для получения списка пакетов, которые больше не требуются как зависимости (пакеты, которые могут быть безопасно удалены или "осиротевшие" пакеты):

pacman -Qdt

Для отображения пакетов, которые были установлены явно и от которых не зависят другие пакеты:

pacman -Qet

Для отображения зависимостей в виде дерева:

pactree имя_пакета

Для получения списка пакетов, которые зависят от конкретного установленного пакета, можно использовать утилиту whoneeds из состава пакета pkgtools:

whoneeds имя_пакета

или pactree c флагом -r:

pactree -r имя_пакета

Очистка кэша пакетов

pacman сохраняет скачиваемые пакеты в каталоге (/var/cache/pacman/pkg/) и не удаляет их файлы автоматически, поэтому следует время от времени самостоятельно чистить этот каталог, чтобы предотвратить его разрастание.

Есть встроенная опция для удаления из кэша всех пакетов, не установленных на данный момент:

pacman -Sc

Важно:

Делайте это только в том случае, если у вас есть определенная уверенность, что установленные пакеты стабильны и вам не потребуется откат версии, поскольку данная команда удалит все старые версии из каталога кэша, оставив только те, которые установлены в системе на данный момент. Сохранение более старых версий пакетов может пригодиться в тех случаях, когда обновление приводит к неправильной работе системы или отдельных программ. Если не следовать этому совету, может возникнуть ситуация, в которой пользователь будет вынужден использовать альтернативный источник устаревших пакетов, такой как Arch Rollback Machine.

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

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

Команда paccache, предоставляемая пакетом pacman, по умолчанию удаляет из кэша все версии каждого пакета, кроме трех недавно использовавшихся:

paccache -r

Однако, в этом случае paccache не будет проверять, установлен ли пакет на данный момент, оставляя удаленные пакеты в кэше. Для удаления из кэша всех версий удаленных пакетов придется запустить команду еще раз с другими опциями:

paccache -ruk0

Для просмотра всех опций смотрите paccache -h.

Альтернативный вариант — использование пакета pkgcachecleanAUR из AUR:

pkgcacheclean

Дополнительные команды

Обновление системы и установка списка пакетов (за одну операцию):

pacman -Syu имя_пакета1 имя_пакета2 ...

Скачать пакет, но не устанавливать его:

pacman -Sw имя_пакета

Установить локальный пакет не из репозитория (например, для пакетов из AUR:

pacman -U /путь/к/пакету/имя_пакета-версия.pkg.tar.xz

Совет: Чтобы сохранить копию локального устанавливаемого пакета в кэше pacman'а, используйте:

pacman -U file://путь/к/пакету/имя_пакета-версия.pkg.tar.xz

Скачать и установить пакет из удаленного источника (но и не из репозиториев, перечисленных в конфигурационном файле pacman'a):

pacman -U http://www.example.com/repo/example.pkg.tar.xz

Список пакетов

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

Список явно установленных пакетов:

pacman -Qe

Перечислить все иностранные пакеты (как правило, ручную загруженные и установленные):

pacman -Qm

Список всех родных пакетов (установленные из синхронизируемой базы (баз) данных):

pacman -Qn

Список всех пакетов по регулярному выражению:

pacman -Qs regex

Перечислить пакеты по регулярному выражению с настроенным форматом вывода:

expac -s "%-30n %v" regex

(нужна expac).

С размером

Для получения списка пакетов, отсортированных по размеру, что может быть полезно, когда вы освобождаете место на вашем жёстком диске:

  • Установите expac и запустите
expac -H M '%m\t%n' | sort -h
  • Запустите pacgraph с опцией -c.

Для списка размера загрузки нескольких пакетов (чтобы вывести все пакеты, не указывайте название каких-либо пакетов):

expac -S -H M '%k\t%n' пакеты

Для получения списка явно установленных пакетов, которых нет ни в репозитории base, ни в base-devel, с размером и описанием:

expac -H M "%011m\t%-20n\t%10d" $( comm -23 <(pacman -Qqen|sort) <(pacman -Qqg base base-devel|sort) ) | sort -n

Последние установленные пакеты

Установите expac и запустите

expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -20 or expac --timefmt=%s '%l\t%n' | sort -n | tail -20

Все пакеты, которые не являются чьей-либо зависимостью

Если вы хотите сгенерировать список всех установленных пакетов, которые не являются чьей-либо зависимостью, вы можете использовать следующий скрипт. Это очень полезно, если вы пытаетесь освободить место на жёстком диске и установили множество пакетов, которые вы можете не помнить. Вы можете просмотреть вывод для поиска пакетов, которые вам больше не нужны.

Примечание: Этот скрипт покажет все пакеты, которые не являются чьей-либо зависимостью, включая явно установленные. Для получения списка пакетов, которые были установлены как зависимости, но больше не требуются какими-либо установленными пакетами, смотрите Осиротевшие пакеты.

ignoregrp="base base-devel"
ignorepkg=""

comm -23 <(pacman -Qqt | sort) <(echo $ignorepkg | tr ' ' '\n' | cat <(pacman -Sqg $ignoregrp) - | sort -u)

Для списка с описаниями пакетов:

expac -HM "%-20n\t%10d" $( comm -23 <(pacman -Qqt|sort) <(pacman -Qqg base base-devel|sort) )

Установленные пакеты, которые не входят в указанную группу или репозиторий

Следующая команда составит список установленных пакетов, которые не входят в base или base-devel, и, таким образом, принадлежат другим репозиториям или могут быть установлены пользователем вручную:

comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)

Список всех пакетов, которые не в указанном репозитории (замените repo_name на имя репозитория):

comm -23 <(pacman -Qtq | sort) <(pacman -Slq repo_name | sort)

Список всех установленных пакетов, которые в репозитории repo_name:

comm -12 <(pacman -Qtq | sort) <(pacman -Slq repo_name | sort)

Построение списка файлов, принадлежащих пакету, с указанием размера

Это может быть полезным, когда определённый пакет использует огромное количество места и вы хотите узнать, какой файл больше всего в этом виноват.

pacman -Qlq package | grep -v '/$' | xargs du -h | sort -h

Идентификация файлов, не принадлежащих какому-либо пакету

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

  1. Создайте отсортированный список файлов, владение на которые вы хотите проверить:
sudo find /etc /opt /usr | sort > all_files.txt
  1. Создайте отсортированный список файлов, прослеживаемых pacman’ом (и удалите слеши в конце директорий):
sudo pacman -Qlq | sed 's|/$||' | sort > owned_files.txt
  1. Найдите строки, которые есть в первом списке, но отсутствуют во втором:
comm -23 all_files.txt owned_files.txt

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

Скрипт lostfiles делает выполняет схожие шаги, но включает обширный чёрный список для удаления распространённых ложных срабатываний из вывода.

Удаление неиспользуемых пакетов

Осиротевшие пакеты

Для рекурсивного удаления сироток и их конфигурационных файлов:

pacman -Rns $(pacman -Qtdq)

Если осиротевшие пакеты не были найдены, pacman завершит работу с ошибкой: цели не определены. Это ожидаемо, поскольку pacman -Rns не получил аргументов.

Примечание: Начиная с pacman версии 4.2.0 показываются только истинные сиротки. Чтобы pacman также показал пакеты, которые нужны другим пакетам только опционально, дважды укажите флаг -t/--unrequired:

pacman -Qdttq

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

Явно установленные

Поскольку более лёгкие системы легче поддерживать, время от времени будет полезно пробегаться по явно установленным пакетам и вручную отбирайте неиспользуемые пакеты для удаления.

Для показа списка явно установленных пакетов, которые доступны в официальных репозиториях:

pacman -Qen

Для показа списка явно установленных пакетов, которые не доступны в официальных репозиториях:

pacman -Qem

Удаление всего, кроме группы base

Если вдруг понадобилось удалить все пакеты, кроме группы base, попробуйте следующую строку:

pacman -R $(comm -23 <(pacman -Qq|sort) <((for i in $(pacman -Qqg base); do pactree -ul $i; done)|sort -u|cut -d ' ' -f 1))

Получение списка зависимостей нескольких пакетов

Зависимости сортируются в алфавитном порядке, дубли удаляются. Также вы можете использовать pacman –Qi для небольшого улучшения времени ответа. Но вы не сможете запрашивать так много пакетов. Ненайденные пакеты просто опускаются (поскольку 2>/dev/null).

pacman -Si $@ 2>/dev/null | awk -F ": " -v filter="^Depends" \ '$0 ~ filter {gsub(/[>=<][^ ]*/,"",$2) ; gsub(/ +/,"\n",$2) ; print $2}' | sort -u

В качестве альтернативы вы можете использовать expac:

expac -l '\n' %E -S $@ | sort -u.

Получение списка изменённых файлов резервных копий

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

pacman -Qii | awk '/^MODIFIED/ {print $2}'

Запуск этой команды с разрешениями рута станет гарантией того, что файлы, читаемые только рутом (к примеру /etc/sudoers), включены в вывод.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *