> For the complete documentation index, see [llms.txt](https://antons-organization-1.gitbook.io/administrirovanie-linux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://antons-organization-1.gitbook.io/administrirovanie-linux/bazovye-zadachi/ustanovka-programm-utilit-paketnym-menedzherom/ustanovka-programm-utilit-paketnym-menedzherom.-ustanovka-iz-arkhivov-tarbolov.md).

# Установка программ (утилит) пакетным менеджером. Установка из архивов (тарболов)

## Практика

На практике пользователю необходимо уметь взаимодействовать с пакетными менеджерами – устанавливать и удалять пакеты.

### Скачивание пакетов и файлов в ОС Linux

Для установки пакетов через исходники, необходимо наличие самих пакетов в системе. Их можно скачать по прямой ссылке, используя утилит wget или curl. Рассмотрим базовые примеры использования данных утилит:

#### wget

Это очень мощная утилита, способная работать по протоколам HTTP, HTTPS и FTP. Кроме того поддерживается работа через прокси. Команда **`wget`** , может выполнять загрузку файлов даже в фоновом режиме - без участия пользователя, в отличии от большинства веб браузеров.

Кроме скачивания файлов, есть возможность сохранять веб страницы или даже целые веб-сайты, благодаря функции открытия ссылок на страницах. Такую возможность еще называют рекурсивной загрузкой.

Команда **`wget`** имеет очень простой синтаксис:

`$ wget опции адрес_ссылки`

Можно указать не один URL для загрузки, а сразу несколько. Опции указывать не обязательно, но в большинстве случаев они используются для настройки параметров загрузки.

### Debian

#### **1.** [**`dpkg`**](https://vk.com/@linuxsovet-nebolshaya-spravka-po-dpkg)

Синтаксис `dpkg`:

```
dpkg <ключ> <пакет>
```

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

* **Установка пакета(ов):** `-i`: `dpkg -i package.deb`
* **Установка пакета(ов) - 2й вариант:** `--install`: `dpkg --install package.deb`
* **Установка всех пакетов из указанной директории и её поддиректорий (рекурсивно):** `-R`: `dpkg -R --install /путь/до/нужной/директории`
* **Распаковка пакета без установки:** `--unpack`: `dpkg --unpack package.deb`
* **Раздельная распаковка и установка пакета:** `--unpack`, `--configure`: `dpkg --unpack package.deb && dpkg --configure package.deb`

> Для установки пакета через dpkg необходимо наличие скачанного файла пакета в формате .deb в системе

**Удаление пакета:**

* **Удаление пакета без зависимостей:** `-r`: `dpkg -r package`
* **Полное удаление пакета:** `-P`: `dpkg -P package`

**Просмотр информации о пакете:**

* **Просмотр содержимого пакета:** `-c`: `dpkg -c package`
* **Проверить, установлен ли пакет:** `-s`: `dpkg -s package`
* **Просмотреть, куда установлены файлы пакета:** `-L`: `dpkg -L package`

#### **2.** [**`apt`**](https://vk.com/@linuxsovet-nebolshaya-shpargalka-po-advanced-package-tool)

Синтаксис `apt`:

```
apt <действие> <пакет> <ключ>
```

**Установка или обновление пакета:**

* **Установка пакета:** `install`: `apt install package`

Можно также установить программу непосредственно из пакета .deb, скачанного вами ранее: apt install docker.deb

* **Обновление списков пакетов:** `update`: `apt update`
* **Обновление пакетов:** `upgrade`, `full-upgrade`: `apt upgrade && apt full-upgrade`

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

* **Удаление пакета:** `remove`: `apt remove package`
* **Полное удаление пакета:** `purge`: `apt purge package`
* **Удаление брошенных зависимостей, более не используемых никакими пакетами в системе:** `autoremove`: `apt autoremove`

**Информация о пакетах:**

* **Информация о пакете:** `show`: `apt show package`
* **Список всех установленных пакетов:** `list --installed`: `apt list --installed`
* **Список пакетов, требующих обновления:** `list --upgradable`: `apt list --upgradable`
* **Поиск пакетов:**

`apt-cache search <название пакета>`

### RHEL/Fedora

#### **1. `rpm`**

Синтаксис `rpm`:

```
rpm <ключ> <пакет>
```

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

* **Установка пакета:** `-i`: `rpm -i package.rpm`
* **Установка пакета - 2й вариант:** `--install`: `rpm --install package.rpm`
* **Установка пакета без учёта его зависимостей:** `--nodeps`: `rpm -i --nodeps package.rpm`
* **Обновление пакета:** `-U`: `rpm -U package.rpm`

> Для установки пакета через rpm необходимо наличие скачанного файла пакета в формате .rpm в системе

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

* **Удаление пакета:** `-e`: `rpm -e package.rpm`
* **Удаление пакета - 2й вариант:** `--erace`: `rpm --erace package.rpm`
* **Удаление пакета без учёта его зависимостей:** `--nodeps`: `rpm -e --nodeps package.rpm`

**Сбор информации о пакете**:

* **Краткая информация о пакете** `-qi`: `rpm -qi openssh-server`
* **Полное наименование пакета и его версия** `-q`: `rpm -q gcc`
* **Список файлов пакета** `-ql`: `rpm -ql`
* **Узнать пакет, которому принадлежит файл** `-qf`: `rpm -qf /etc/sshd_config`

\*В дистрибутиве ALT Linux директория будет `/etc/openssh/sshd_config`

* **Вспомнить полное название пакета** `-qa`: `rpm -qa | grep netscape`
* **Вспомнить каталог пакета** `-qal`: `rpm -qal | grep -i monitors`
* **Информация о неинсталированном пакете** `-qip`: `rpm -qip /net/rdist/dist/contrib/libc6/i386/x11amp-0.65r2-1.i386.rpm`
* **Узнать зависимости пакета** `-qRp`: `rpm -qRp /net/rdist/dist/contrib/libc6/i386/x11amp-0.9-alpha2-2.i386.rpm`
* **Проверка текущего состояния пакета** `-qs`: `rpm -qs mytetra`

  ```
  normal    /usr/bin/mytetra
  normal    /usr/share/applications/mytetra.desktop
  normal    /usr/share/doc/mytetra-1.42.2
  normal    /usr/share/doc/mytetra-1.42.2/readme.txt
  normal    /usr/share/icons/hicolor/48x48/apps/mytetra.png
  ```

Данная команда позволяет сравнить текущее состояние файлов пакета с информацией, записанной в базе данных.&#x20;

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

* **Проверка целостности указанного пакета** `-Vf`: `rpm -Vf /путь/к/программе`

  ```
  # rpm -Vf /bin/mount
  .M.......    /bin/mount
  .M.......    /bin/umount
  ```

* 5 Контрольная сумма (подсчитанная по алгоритму MD5)

* S Размер файла

* L Куда указывает символьный линк (если проверяемый файл является симлинком)

* T Время модификации

* D Устройство (раздел), на котором расположен файл

* U Владелец

* G Группа-владелец

* M Права доступа

Проверку лучше выполнять как "root", так как некоторые файлы (например, /usr/X11R6/bin/xterm) могут быть недоступны на чтение другим пользователям и для них всегда будет выдаваться несовпадение по контрольной сумме.

#### **2.** [**`dnf`**](https://vk.com/@linuxsovet-kratkii-man-po-yellowdog-updater-modified) - ссылка для устаревшего `yum`, форком которого является `dnf`. У них одинаковые синтаксис и основные опции.

Синтаксис `dnf`:

```
dnf <действие> <пакет> <ключ>
```

**Установка или обновление пакета:**

* **Установка пакета:** `install`: `dnf install package`
* **Установка группы пакетов:** `groupinstall`: `dnf groupinstall 'название группы'`
* **Проверка обновлений:** `check-update`: `dnf check-update`
* **Установка обновлений:** `update`: `dnf update`
* **Обновление конкретного пакета:** `update`: `dnf update package`
* **Обновление группы пакетов:** `groupupdate`: `dnf groupupdate 'название группы'`
* **Просмотр списка всех доступных групп:** `grouplist`: `dnf grouplist`

**Удаление пакета:**

* **Удаление одного пакета с его зависимостями:** `remove`: `dnf remove package`
* **Удаление пакетов из определённой группы:** `groupremove`: `dnf groupremove 'имя группы'`

**Информация о пакете:**

* **Поиск определённого пакета по названию и описанию:** `search`: `dnf search package`
* **Список всех пакетов:** `list`: `dnf list`
* **Список всех установленных в системе пакетов:** `list installed`: `dnf list installed`
* **Информация о пакете:** `info`: `dnf info package`

## Установка пакетов из архивов (тарболов) <a href="#ustanovka-programm-iz-arhivov-tarbolov" id="ustanovka-programm-iz-arhivov-tarbolov"></a>

Дистрибутив с пакетом, представляет из себя архив с кучей файлов и обычно имеет расширение  .tar , .tar.gz ,  .bz, .tgz ну или что то похожее.

Для архивов сжатых с помощью **GZIP** (gz, gz2 и т.д.) выполняем:

```
tar -xvzf имя_файла
```

Для архивов сжатых с помощью **BZIP** (bz, bz2 и т.д.) выполняем:

```
tar -xvjf имя_файла
```

Команды Tar:

* x — извлечь файлы из архива;
* v — подробный вывод информации на экран;
* f — **Обязательная** опция. Если не указать, Tar будет пытаться использовать магнитную ленту вместо файла;
* z — обработать архив сжатый gzip’ом;
* j — обработать архив сжатый bzip’ом.

После выполнения, будет создана папка с именем, идентичным названию пакета.

Далее необходимо открыть эту созданную папку

```
cd имя_папки
```

Далее все зависит от того, как была собрана программа, в виде исполняемого файла, или в исходном коде, который сначала необходимо скомпилировать и лишь потом устанавливать. В любом случае для начала лучше прочитать инструкцию, которая должна присутствовать в распакованном архиве и, как правило, называется README, или что то похожее.

Если программа собрана в виде исполняемого файла, то в папке будет находиться файл, с расширением .sh, обычно он так и называется install.sh. Его достаточно просто запустить на исполнение:

```
./install.sh
```

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

```
./configure #Если не сработало, переходим к след. команде
make
make install
```

После установки делаем:

```
make clean
```

## Использование wget&#x20;

Команда **`wget`** , обычно поставляется по умолчанию в большинстве дистрибутивов, но если нет, ее можно очень просто установить. Например установка с помощью yum будет выглядеть следующим образом:

&#x20;`yum -y install wget`

А в дистрибутивах основанных на Debian:

&#x20;`sudo apt install wget`

Теперь перейдем непосредственно к примерам:

### **1. Загрузка файла**

Команда **`wget`** скачает один файл и сохранит его в текущей директории. Во время загрузки мы увидим прогресс, размер файла, дату его последнего изменения, а также скорость загрузки:

&#x20;`wget http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`

[![wget1](https://losst.pro/wp-content/uploads/2016/05/wget1.png)](https://losst.pro/wp-content/uploads/2016/05/wget1.png)

### **2. Сохранить файл с другим именем**

Опция -О позволяет задать имя сохраняемому файлу, например, скачать файл wget с именем wget.zip:

&#x20;`wget -O wget.zip http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`

[![wget2](https://losst.pro/wp-content/uploads/2016/05/wget2.png)](https://losst.pro/wp-content/uploads/2016/05/wget2.png)

### **3. Скачать несколько файлов**

Вы можете скачать несколько файлов одной командой даже по разным протоколам, просто указав их URL:

&#x20;`wget http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz ftp://ftp.gnu.org/gnu/wget/wget-1.10.1.tar.gz.sig`

[![wget3](https://losst.pro/wp-content/uploads/2016/05/wget3.png)](https://losst.pro/wp-content/uploads/2016/05/wget3.png)

### **4. Взять URL из файла**

Вы можете сохранить несколько URL в файл, а затем загрузить их все, передав файл опции -i. Например создадим файл tmp.txt, со ссылками для загрузки **`wget`**, а затем скачаем его:

&#x20;`wget -i /wget/tmp.txt`

[![wget4](https://losst.pro/wp-content/uploads/2016/05/wget4.png)](https://losst.pro/wp-content/uploads/2016/05/wget4.png)

### **5. Продолжить загрузку**

Утилита **`wget`** рассчитана на работу в медленных и нестабильных сетях. Поэтому если вы загружали большой файл, и во время загрузки было потеряно соединение, то вы можете скачать файл **`wget`** с помощью опции `-c`.

&#x20;`wget -c http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`

[![wget5](https://losst.pro/wp-content/uploads/2016/05/wget5-e1462621578180.png)](https://losst.pro/wp-content/uploads/2016/05/wget5-e1462621578180.png)

### 6. Загрузка файлов в фоне

Опция `-b` заставляет программу работать в фоновом режиме, весь вывод будет записан в лог файл, для настройки лог файла используются специальные ключи **`wget`**:

&#x20;`wget -b -o ~/wget.log http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`

[![wget6](https://losst.pro/wp-content/uploads/2016/05/wget6.png)](https://losst.pro/wp-content/uploads/2016/05/wget6.png)

### 7. Ограничение скорости загрузки

Команда **`wget`** позволяет не только продолжать загрузку файлов, но и ограничивать скорость загрузки. Для этого есть опция `--limit-rate`. Например ограничим скорость до 100 килобит:

&#x20;`wget --limit-rate=100k ftp://ftp.iinet.net.au/debian/debian-cd/8.4.0/amd64/iso-dvd/debian-8.4.0-amd64-DVD-1.iso`

[![wget7](https://losst.pro/wp-content/uploads/2016/05/wget7.png)](https://losst.pro/wp-content/uploads/2016/05/wget7.png)

Здесь доступны, как и в других подобных командах индексы для указания скорости - k - килобит, m - мегабит, g - гигабит, и так далее.

### 8. Подключение по логину и паролю

Некоторые ресурсы требуют аутентификации, для загрузки их файлов. С помощью опций `--http-user=username, –http-password=password и --ftp-user=username, --ftp-password=password` вы можете задать имя пользователя и пароль для HTTP или FTP ресурсов.

&#x20;`wget --http-user=narad --http-password=password http://mirrors.hns.net.in/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-LiveDVD.iso`

Или:

&#x20;`wget --ftp-user=narad --ftp-password=password ftp://ftp.iinet.net.au/debian/debian-cd/6.0.5/i386/iso-dvd/debian-6.0.5-i386-DVD-1.iso`

### 9. Загрузить и выполнить

Вы, наверное, уже видели такие команды. **`wget`** позволяет сразу же выполнять скачанные скрипты:

&#x20;`wget -O - http://сайт/скрипт.sh | bash`

Если опции `-O` не передать аргументов, то скачанный файл будет выведен в стандартный вывод, затем мы его можем перенаправить интерпретатору bash, как показано выше.

### 10. Сохранить файл в папке

По умолчанию **`wget`** сохраняет файл в текущую папку, но это поведение очень легко изменить с помощью опции -P:

&#x20;`wget -P ~/Downloads/ http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`

[![wget8](https://losst.pro/wp-content/uploads/2016/05/wget8.png)](https://losst.pro/wp-content/uploads/2016/05/wget8.png)

### 11. Передать информацию о браузере

Некоторые сайты фильтруют ботов, но мы можем передать фальшивую информацию о нашем браузере (user-agent) и страницу с которой мы пришли (http-referer).

&#x20;`wget ‐‐refer=http://google.com ‐‐user-agent=”Mozilla/5.0 Firefox/4.0.1″ //losst.pro`

[![wget7](https://losst.pro/wp-content/uploads/2016/05/wget7-1.png)](https://losst.pro/wp-content/uploads/2016/05/wget7-1.png)

### 12. Количество попыток загрузки

По умолчанию **`wget`** пытается повторить загрузку 20 раз, перед тем как завершить работу с ошибкой. Количество раз можно изменить с помощью опции **`--tries`**:

&#x20;`wget --tries=75 http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso`

### 13. Квота загрузки

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

&#x20;`wget -Q10m -i download-list.txt`

Здесь работают те же индексы для указания размера - k, m, g, и т д.

### 14. Скачать сайт

**`Wget`** позволяет не только скачивать одиночные файлы, но и целые сайты, чтобы вы могли их потом просматривать в оффлайне. Использование **`wget`**, чтобы скачать сайт в linux выглядит вот так:

&#x20;`wget --mirror -p --convert-links -P ./<папка> адрес_сайта`

{% embed url="<https://pingvinus.ru/programs/windows-linux>" %}

{% embed url="<https://habr.com/ru/companies/ruvds/articles/346640/>" %}

{% embed url="<https://www.inp.nsk.su/~bolkhov/teach/inpunix/typ_wget.ru.html>" %}
