четверг, 9 июля 2015 г.

Управление программами в Linux

RPM-дистрибутивы: Fedora - бесплатный вариант для домашних пользователей, RHEL - платный для энтерпрайзов, CentOS - бесплатный для энтерпрайзов
Именование RPM-пакетов: packagename-a.b.c-x.arch.rpm, где packagename - имя пакета, a.b.c - номер версии, x - номер билда (изменения, внесенные теми, кто собирал пакет, а не авторами программы, например изменения конфигурационных файлов. иногда к номеру билда добавляют буквы, чтобы различать билды,собранные разными группами), arch - архитектура.
Ключи RPM: -i установить, -e удалить, -l отобразить файлы в пакете, -h отобразить прогресс установки, -qi отобразить информацию о пакете
Собрать пакет из исходников: rmpbuild
Извлечь содержимое RPM-пакета: rmp2cpio (RPM это, как правил, модифицированный cpio архив, сначала конвертирует в стандартный cpio), cpio (затем извлекаем)
Паектный менеджер: yum
Основной файл конфигурации RPM: /usr/lib/rpm/rpmrc, Yum: /etc/yum.conf (основные опции), /etc/yum.repos.d/ (репозитории)


Ключи dpkg:
-i установить, --configure запустить post-installation скрипты (переконфигурирует пакет), -r удалить (с сохранением конфигурационных файлов), -P удалить (вместе с конфигурационными файлами), --get-selections (-l) показать установленные пакеты -L список файлов относящихся к пакету -C поиск незавершенных установок --no-act проверка зависимостей и конфликтов без устновки



Информация из базы данных пакетов:apt-cache: showpkg отобразить информацию о пакете, stats  статистика по установленным пакетам,unmet информация по отсутствующим библиотекам и прочим неудовлетворенным звисимостям, depends  отобразить зависимости для пакета, pkgnames отобразить имена всех пакетов, установленных в системе
Список репозиториев: /etc/apt/sources.list

Конвертация DEB-RPM: alien

Библиотека: часто используемый фрагмент кода. Библиотека может быть частью кода программы (статическая библиотека), или на библиотеку в программе может быть создана ссылка (динамическая или разделяемая библиотека). Чаще используются динамические библиотеки, т.к. это позволяет экономить место и упрощает обновление. Динамические библиотеки в Linux похожи на виндовые, но имеют расширение не .dll  а .so
Статические библиотеки используются разработчиками, которые применяют старые или редкие библиотеки, а также на небольших системах, где количество установленных программ не позволяет воспользоваться преимуществами динамических библиотек.

Список директорий, в которых находятся библиотеки содержится в файле /etc/ld.so.conf file. Убунту автоматически включает в этот файл библиотеки, указанные в файлах /etc/ld.so.conf.d/*.conf (при добавлении строк в этот список, следует запустить ldconfig, чтобы применить внесенные изменения). В генту ld.so.conf формируется из содержимого фалйлов /etc/env.d утилитой env-update. Добавление пути к библиотеке вручную может быть необходимо, например, при компиляции библиотеки из исходного кода. Директории /lib и /usr/lib по умолчанию рассматриваются системой как содержащие библиотеки (даже если эти директории не указаны в /etc/ld.so.conf)
Если нужно временно указать путь к библиотеке (например для тестирования) можно установить ее в нестандартную директорию и прописать путь к ней в переменной среды LD_LIBRARY_PATH, которая указывает системе на дополнительные директории для поиска библиотек. Например: export LD_LIBRARY_PATH=/usr/local/testlib:/opt/newlib
Иногда путь к библиотеке жестко прописан в программе. Если библиотека установлена в другой директории, следует создать символическую ссылку.

Проверить какие библиотеки использует программа: ldd <путь к программе> например ldd /bin/ls При этом следует помнить, что библиотеки могут зависеть от других библиотек, следовательно, программа может не запускаться, даже если все нужные ей библиотеки присутствуют.

Программы ld.so и ld-linux.so которые управляют загрузкой библиотек не считывают /etc/ld.so.conf каждый раз при запуске программы. Вместо этого система использует кешированный список директорий /etc/ld.so.cache который нужно обновлять каждый раз при добавлении или удалении бибилиотеки. Для этого используется команда ldconfig (принимает опции, см --help).


Получить информацию о ядре (kernel): uname -n имя хоста -s имя ядра -r релиз ядра -m информация о компьютере (как правило код процессора, например x86_64) -з информация о процессоре -o имя ОС -a вся информация

Просмотреть процессы: ps Принимаемые программой опции различаются в разных ОС и могут быть изменены установкой переменной среды PS_PERSONALITY. -e отобразить все процессы (по умолчанию только запущенные пользователем из его терминала) -x расширенная информация --forest показать иерархию процессов (если процесс не имеет родителя, он был запущен init или родительский процесс был завершен)  -u <пользователь> только процессы определенного пользователя (не работает с -a -e) -w не обрезать вывод команды, чтобы он помещался в экран (полезно при выводе в файл) v показать объем памяти для каждого процесса

Показать сводную информацию об использовании процессора: top Следует обратить внимание на показатель load average. Если он больше 1, вероятно есть зависшие процессы или отдельный процесс потребляет слишком много ресурсов.  Для многоядерных процессоров нормыльный load average будет в пределах 1*количество ядер.
Показать процессы запущенные в текущей сессии jobs Полезно для обнаружения незавершенных процессов при выходе из системы.

Ctrl+Z приостанавливает выполнение команды в терминале и позволяет в нем работать. fg запускае приостановленную команду. bg запустить команду в фоновом режиме (одновременно с выполнением команды можно использовать терминал), эквивалент bg: поставить & после команды.

Приоритет использования процессора для команд: nice Приоритеты от -20 до 19, -20 самый высокий. Приоритет по умолчанию 0, с повышенным (отрицательным) приоритетом команду может запустить только рут,с пониженным - любой пользователь.
Изменить приоритет работающего процесса: renice

Завершить процесс: kill Данная команда посылает процессу сигнал о завершении. -l список сигналов. Дефолтный сигнал SIGTERM (выход с закрытием открытых файлов и т.д.). Также можно использовать SIGKILL - выход без использования дефолтной процедуры.
Например:
завершить процесс использую SIGTERM ("правильный" выход):
kill -s 15 <PID> или kill <PID>
завершить процесс использую SIGKILL ("грубый" выход):
kill -s 9 <PID>

Запустить программу, чтобы она не завершилась при выходе из терминала (была невосприимчива к SIGHUP): nohup <программа>

Завершить все процессы с определенными характеристиками (например именем): killall

Источник: Roderick W. Smith - LPIC study guide, 3d edtition

Комментариев нет:

Отправить комментарий