LX4 Процессы и пакеты в Linux
Лекция: Управление пакетами
Презентация
Смотреть слайды к этому занятию.Дополнительные материалы
- Linux - начинающим. Часть 5. Управление пакетами в Debian и Ubuntu
- Консольные инструменты управления пакетами
- Альманах пакетных менеджеров Linux
Практика: Управление пакетами
В этой работе вы научитесь устанавливать новое программное обеспечение, как при помощи специальных программ инсталляторов, так и путем компилирования из исходных файлов.
Видео занятия
Цель лабораторной работы
Научиться устанавливать новое программное обеспечение, как при помощи специальных программ инсталляторов, так и путем компилирования из исходных файлов.
Основное задание
- Откройте окно менеджера программ и познакомьтесь с набором программного обеспечения, входящего в стандартный репозиторий вашей операционной системы.
- Найдите и установите программу chromium-browser. Проверьте ее работоспособность.
- Удалите установленную программу firefox.
- Произведите обратные действия (установку firefox и удаление chromium) командами в терминале.
- Откройте менеджер пакетов Synaptic в графическом режиме.
- Выведите полный список пакетов, установленных в системе. Подсчитайте общее количество пакетов, установленных в системе.
- Выберите из общего списка все пакеты, имеющие в названии слово gnome (т.е. те пакеты, которые принадлежат интегрированной среде GNOME) и подсчитайте их количество.
- Проверьте, установлен ли в системе пакет mc и получите расширенную информацию об этом пакете.
- Выполните имитацию удаления (НЕ УДАЛЕНИЕ!) пакета perl. Подсчитайте количество пакетов, которые от него зависят.
- Выполните имитацию установки пакетов httpd, vsftpd и webmin, проанализировать результаты (убедиться, что все зависимости удовлетворены).
- Повторите задания 6-10 в консольном режиме с использованием программы dpkg.
- Установите программу PyCharm, следуя инструкциям на сайте производителя. Добавьте ярлык программы на рабочий стол или панель и убедитесь, что программа работает правильно.
Методические указания
Одна из первых вещей, на которые вы обращаете внимание при установке Linux – это большое количество входящих в дистрибутив пакетов. Большинство дистрибутивов содержат операционную систему Linux, средства для инсталляции и средства администрирования. Кроме того, в них включаются средства для работы в Интернете, средства разработки, офисные пакеты, игры, а также некоторые средства, о которых вы даже не слышали. Дистрибутивы Linux, содержащие тысячи доступных пакетов, не редкость. Если вы не выбрали “установить все”, будет установлено некоторое подмножество этих пакетов.
Теперь у вас могут возникнуть вопросы “Как удалить ненужные пакеты? Как установить что-то недостающее? Могу ли я использовать программное обеспечение, не входящее в мой дистрибутив?”
Зависимости
Разные разработчики разрабатывают разные программы и библиотеки. Определенная программа может зависеть от десятка библиотек, которые разработали разные люди. Следить за всем этим вручную — неблагодарное занятие.
К счастью для нас, проблема эта решена. Каждый раз когда вы ставите какое-либо ПО из репозитория или вручную при помощи пакета-установщика, программа-установщик разбирает эти зависимости и устанавливает их вместе с нужным вам приложением. Но иногда бывает и такая ситуация, когда репозитории не подключены (например, если нет интернета) и единственный способ поставить программу — скачать ее предварительно где-нибудь и потом ставить вручную. В любом случае при установке вы будете предупреждены, если нужная зависимость не установлена и не может быть найдена в репозиториях, так что теперь вы знаете в чем дело.
И напоследок о зависимостях: допустим, вам надо скачать какую-то программу. Она тянет за собой 5 зависимостей. Каждый из них тянет за собой по 5 зависимостей еще. В итоге может получиться так, что сама программа занимает 1 мегабайт, а скачать надо 50.
.deb = setup.exe
В Windows, чтобы установить программу, необходимо скачать некий файл, наподобие setup.exe, который сам все установит. В дистрибутивах, основанных на Debian используется похожая система, только вместо setup.exe используются файлы с расширением .deb
Это пакет-установщик. В разных линукс-системах установщики могут быть разные. Например, в системе RedHat Linux для установки используются пакеты с расширением .rpm
Зачем это нужно знать? Когда вы ищите ПО в интернете (если его нету в репозиториях) — обычно на странице загрузки предоставляются различные пакеты. Вам нужен deb! Даже когда вы устанавливаете что-либо из репозитория, невидимо от вас программа скачивает deb файл (или несколько файлов, если имеются зависимости) и потом устанавливает его.
Программа apt.
Все архивы программного обеспечения, компакт-диски и т. д. не принесут никакой пользы, если вы не умеете устанавливать программы. Итак, вы хотите знать, как установить новый пакет в Debian.
Воспользуйтесь командой apt install:
1
sudo apt install tuxkart
Установка пакета с перезаписью файлов:
1
sudo apt install --reinstall tuxkart
Чтобы установить сразу несколько программ, перечислите их, разделяя пробелами:
1
sudo apt install tuxkart gltron frozen-bubble tuxracer nethack galaga
Загрузка программ без установки или распаковки:
1
sudo apt -d install tuxkart
Чтобы протестировать команду перед выполнением, присоедините к строке ключ - dry-run:
1
sudo apt install tuxkart gltron frozen-bubble tuxracer nethack galaga --dry-run
Удаление пакетов
Для удаления одного или нескольких пакетов воспользуйтесь командой apt remove:
1
sudo apt remove tuxpaint
Предварительное тестирование команды remove:
1
sudo apt remove tuxpaint -dry-run
Удаление всех следов существования пакета, включая конфигурационные файлы:
1
sudo # apt --purge remove tuxpaint
Чтобы удалить сразу несколько программ, перечислите их, разделяя пробелами:
1
sudo apt remove tuxkart gltron frozen-bubble tuxracer nethack galaga
Обновление пакетов
Часто требуется обновить пакет в системе Debian, потому что новая версия обладает расширенными возможностями или в ней исправлены ошибки. Воспользуйтесь командой apt install:
1
sudo apt install gltron
Обновление нескольких пакетов:
1
sudo apt install tuxkart gltron frozen-bubble tuxracer nethack galaga
Команды обновления отдельных пакетов не существует. Команда apt install всегда устанавливает последнюю версию пакета.
Обновление системы
При обновлении системы полностью требуется обновить все пакеты в системе и заменить их новейшими версиями. Убедитесь в том, что файл /etc/apt/sourcs.list содержит ссылки на нужные источники, а затем выполните команду apt upgrade.
Всегда начинайте с обновления списков пакетов:
1
sudo apt update
Следующая команда обновляет все установленные пакеты, но не удаляет пакеты для разрешения зависимостей:
1
sudo apt -u upgrade
Обновление всех установленных пакетов с удалением или установкой пакетов по мере необходимости для разрешения всех зависимостей:
1
sudo apt -u dist-upgrade
Флаг -u позволяет заранее просмотреть список всех изменений. Обновление может занять несколько часов, в зависимости от скорости подключения к Интернету и количества загружаемых пакетов.
Чтобы флаг -u применялся по умолчанию, отредактируйте (или создайте) файл /etc/apt/apt.conf:
1
2
3
// Всегда перечислять обновляемые пакеты
// и запрашивать подтверждение у пользователя
APT::Get::Show-Upgraded "true";
Перед каждым выполнением команды apt_get dist_upgrade сначала выполните команду apt upgrade, чтобы снизить вероятность ошибок при выполнении distupgrade
Поиск установленных программ
Следующая команда выводит список всех установленных пакетов и направляет его в файл:
1
dpkg -l | tee dpkglist
Поиск всех пакетов, удовлетворяющих критерию поиска, и вывод информации об их состоянии:
1
dpkg -l '*gnome*'
Поиск установленных пакетов, удовлетворяющих критерию поиска:
1
dpkg -l | grep gnome
Вывод списка файлов, входящих в пакет:
1
dpkg -L gnome-applets
Операции с кэшем пакетов
Время от времени требуется обеспечить актуальность кэша пакетов и списков пакетов, чтобы программа apt работала правильно, без возникновения ложных проблем с зависимостями.
Воспользуйтесь программами apt и dpkg. Не забывайте выполнять команду apt update после модификации файла /etc/apt/sources.list, а также регулярно выполняйте ее, чтобы список пакетов оставался актуальным.
Следующая команда выводит список загруженных, но не установленных пакетов:
1
dpkg --yet-to-unpack
Проверка нарушенных зависимостей:
1
apt check
Удаление кэшированных пакетов, которые стали ненужными:
1
$ apt-cache autoclean
Удаление всех кэшированных пакетов:
1
apt-cache clean
Вывод списка частично установленных пакетов:
1
dpkg -audit
Если вызов dpkg –audit возвращает какие-либо результаты, как в следующем случае:
1
2
dpkg --audit
vpw (no information available)
для начала убедитесь в том, что возвращаемый пакет существует:
1
2
dpkg -l
vpw Package 'vpw' is not installed and no info is available
Если пакет существует, либо завершите установку, либо удалите ее. Если пакет не установлен, поищите соответствующую запись в /var/lib/dpkg/available и /var/lib/dpkg/status и удалите ее
Разрешение конфликтов зависимостей
Иногда может произойти такая ситуация, что какая-либо программа не устанавливается из-за проблем с зависимостями, или команда apt dist-upgrade оставляет пакеты, которые нужно удалить. Существует несколько команд, которые могут пригодиться для решения этой задачи; в этом разделе они перечисляются в том порядке, в котором их стоит попробовать.
Допустим, проблемы возникли с пакетом libpam-modules, который не желает обновляться:
1
2
3
4
5
sudo apt install libpam-modules
...
The following packages have unmet dependencies:
libpam-modules: Depends: libdb3 (>=3.2.9-19.1) but 3.2.9-19 is to be installed
E: Broken packages
Если вы работаете в смешанной системе, для начала попробуйте указать версию:
1
sudo apt install -t stable libpam-modules
Если это не помогает или система не является смешанной, попробуйте воспользоваться системой разрешения конфликтов Debian:
1
sudo apt -f install
Затем выполните команду:
1
sudo dpkg --configure -a
И снова повторите команду:
1
sudo apt -f install
Если будет получен следующий ответ, значит, попытка завершилась неудачей:
1
2
3
Reading Package Lists... Done
Building Dependency Tree... Done
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Теперь проверьте, что произойдет при удалении существующего пакета libpammodules:
1
2
3
4
5
6
7
8
sudo apt remove --dry-run libpam-modules
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED: adduser adminmenu apache at base-config courier-imap courier-imap-ssl courier-pop courier-pop-ssl cron cupsys cupsys-driver-gimpprint dict-elements dict-foldoc dict-gcide dict-jargon dict-vera dict-wn dictd gdm2...
....
WARNING: The following essential packages will be removed
This should NOT be done unless you know exactly what you are doing!
login libpam-modules (due to login)
В данном случае исправление конфликтов зависимостей потребует едва ли не полной перестройки системы. Чаще проблемы ограничиваются несколькими пакетами. В этом случае начинайте удалять наименее важные из них, пока конфликты зависимостей не будут разрешены, а затем переустановите все пакеты, которые вам нужны.
Если apt -u dist-upgrage отображает какие-либо задержанные (held) пакеты, от них лучше избавиться. Пакеты удерживаются из-за конфликтов зависимостей, которые не удается разрешить apt. Попробуйте воспользоваться следующей командой для поиска и исправления конфликтов:
1
sudo apt -o Debug::pkgProblemResolver=yes dist-upgrade
Если исправить конфликты не удается, команда завершается с сообщением
1
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
Удаляйте held-пакеты один за одним, каждый раз запуская dist-upgrade, пока не останется ни одного задержанного пакета. Затем установите заново все необходимые пакеты. Не забудьте использовать ключ –dry-run, чтобы заранее знать обо всех последствиях: # apt remove –dry-run libsdl-perl В «монолитных» системах подобные конфликты версий встречаются редко. Пользователи смешанных систем сталкиваются с ними чаще. Чтобы предотвратить их, будьте чрезвычайно осмотрительны при выборе устанавливаемых программ — при первой установке Debian потратьте немного времени и выберите каждый необходимый пакет.
Самостоятельное изучение
- Установка пакетов из исходных кодов. Команды compile, make, make install
- Установка и запуск программ Windows в системе Linux. Программа-эмулятор Wine
- Контейнерные пакеты snap и flatpack.
Задания для самостоятельного выполнения
- Установите другой менеджер рабочего стола (например, KDE или XFCE). Проверьте его работоспособность, залогинившись в него.
- Установите какую-либо программу по вашему выбору из исходных кодов.
- Установите на вашу Linux-машину библиотеку tensorflow-gpu. Проверьте правильность установки, запустив в командной строке интерактивную консоль Python командой python и затем введя команду
1
import tensorflow
Вы не должны получить сообщение об ошибке импорта.
Контрольные вопросы
- Чем отличаются команды apt и apt-get?
- В чем различие программ для управления пакетами apt и dpkg?
- Какие менеджеры пакетов применяются в других дистрибутивах? В чем их особенности?
- Как устанавливать пакеты из исходных кодов?
- Зачем нужны контейнерные менеджеры пакетов? В чем их преимущества и недостатки?
Лекция: Управление процессами
Презентация
Смотреть слайды к этому занятию.Дополнительные материалы
- Список процессов Linux
- Работа с процессами в Linux
- Использование ps, kill и nice для управления процессами в Linux
Практика: Управление процессами
В этой работе вы сможете получить представление о процессах, как о способе управления ресурсами в Линукс, научиться получать и анализировать информацию о процессах и управлять состоянием выполняющихся процессов.
Видео занятия
Что такое процесс?
{% capture notice-2 %} Выводы:
- Процесс - это программа, запущенная на выполнение в оперативной памяти.
- Одна программа может порождать несколько процессов.
- Одну программу можно запустить несколько раз, и это будут разные процессы.
- Все процессы выполняются независимо друг от друга, они изолированы операционной системой.
- У каждого процесса есть свой выделенный участок памяти, в память других процессов ему доступ запрещен. {% endcapture %}
Что такое многозадачность?
{% capture notice-2 %} Выводы:
- В каждый момент в операционной системе выполняется множество процессов.
- На одном ядре ЦП может выполняться только одна последовательность инструкций одновременно.
- Операционная система постоянно переключает процессы на выполнение.
- Иногда переключение происходит добровольно, но чаще - нет.
- Сам процесс не имеет контроля над тем, когда его переключат.
- Большинство современных операционных систем реализуют вытесняющую многозадачность. {% endcapture %}
В каких состояниях может находиться процесс?
{% capture notice-2 %} Выводы:
- Создание нового процесса - довольно длительный для компьютера процесс.
- После создания процесс в состоянии готовности становится в очередь.
- Когда очередь подходит, он начинает выполняться на процессоре.
- Если во время выполнения процесс завершается, ОС его уничтожает и очищает память.
- Если во время выполнения проходит квант времени, ОС опять ставит его в очередь.
- Если во время выполнения процесс блокируется, ОС его приостанавливает.
- Когда придет внешнее событие, разблокирующее процесс, он опять становится в состояние готовности.
- Существует много разных реализаций очереди процессов, с приоритетами и без. {% endcapture %}
Какую информацию ОС хранит о процессе?
{% capture notice-2 %} Выводы:
- У каждого процесса есть численный идентификатор.
- С каждым процессом связан пользователь-владелец.
- У каждого процесса (за исключением одного) есть процесс-родитель.
- ОС хранит информацию о процессах в специальном разделе - файловой системе /proc.
- ОС запоминает статистическую информацию о потреблении процессами ресурсов.
- Большая часть информации о процессах скрыта. Например, открытые файловые дескрипторы. {% endcapture %}
Как процессы связаны с терминалами?
{% capture notice-2 %} Выводы:
- Каждый процесс при запуске связывается с определенным терминалом.
- Это может быть виртуальный терминал, графическая программа или эмулятор.
- Это связывание используется для разделения потоков ввода-вывода.
- При запуске процесса терминал блокируется.
- Некоторые процессы не связаны с терминалами. {% endcapture %}
Как посмотреть выполняемые процессы?
{% capture notice-2 %} Выводы:
- Самая распространенная команда - ps.
- По умолчанию она показывает только процессы текущего пользователя, связанные с текущим терминалом.
- Полный список процессов можно посмотреть командой ps aux.
- Интерактивную информацию о процессах показывает программа top.
- Существует улучшенный вариант top - htop.
- С помощью htop можно проводить полноценный мониторинг системы, выполнять операции над процессами. {% endcapture %}
Что такое процессы-демоны?
{% capture notice-2 %} Выводы:
- Демоны не связаны с терминалами и не имеют пользовательского интерфейса.
- Они используются для выполнения фоновых операций.
- Большинство демонов - системные службы.
- Можно создать свою собственную программу-демона.
- Существует специальная программа для управления службами. {% endcapture %}
Как снять процесс?
{% capture notice-2 %} Выводы:
- Завершить текущий процесс в терминале можно комбинацией Ctrl + C.
- Интерактивные программы нужно стараться завершать штатно.
- Снять индивидуальный процесс можно с помощью программы kill.
- Формально, это послание сигнала процессу.
- Для мягкого завершения используется сигнал 15.
- Для того, чтобы снять зависший процесс может понадобится сигнал 9.
- Убить все процессы по имени команды можно командой killall. {% endcapture %}
Как связаны родитель и потомок?
{% capture notice-2 %} Выводы:
- Для каждого процесса, кроме самого первого существует процесс-родитель.
- Поэтому процессы в Linux образуют дерево.
- При завершении родителя, все его потомки тоже завершаются.
- Процесс наследует от родителя пользователя и права доступа.
- В редких случаях пользователь может измениться. {% endcapture %}
Что такое приоритет процесса?
{% capture notice-2 %} Выводы:
- Приоритет процесса - это число, определяющее, как часто процесс будет получать процессорное время.
- В Linux также используется число nice value - величина, обратная приоритету.
- Nice измеряется от -20 (высший приоритет) до 19 (низший приоритет).
- Пользователь может понизить приоритет своих процессов.
- Повысить приоритет может только суперпользователь.
- Можно запустить процесс с нестандартным приоритетом командой nice -n.
- Можно изменить приоритет уже выполняемого процесса командой renice -n.
- Эти команды задают числа, которые прибавляются к nice value. {% endcapture %}
Что такое фоновые процессы?
{% capture notice-2 %} Выводы:
- Можно запустить процесс без привязки к терминалу, в фоновом режиме с помощью &.
- Если мы хотим перевести процесс в состояние остановленный, используется сочетание клавиш «Ctrl + z».
- Можем переместить остановленный процесс на передний план командой fg.
- Можно продолжить выполнение остановленного процесса в фоновом режиме командой bg.
- Используя команду jobs мы можем получить список остановленных и фоновых процессов. {% endcapture %}