> 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.md).

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

## Зачем нужны пакетные менеджеры?

На заре разработки Linux установить приложение можно было только путем скачивания и компиляции исходников программы. Из-за использования сразу нескольких утилит и ошибок, возникавших в процессе сборки, установка одной программы отнимала много времени.

Чтобы сделать систему дружелюбней к пользователю, были разработаны пакетные менеджеры, которые полностью автоматизировали установку программ. Инсталляция приложений в них производится из пакетов – архивов с файлами скомпилированной программы. Исключение — система Gentoo, где менеджер компилирует программы по подготовленным скриптам.

Большинство популярных дистрибутивов на базе Unix/Linux уже оснащены пакетными менеджерами, способными устанавливать любое программное обеспечение. Будь то внешнее приложение или компоненты ОС. В этом заключается основное различие между пакетным менеджером и инсталлятором. Последний нужен для установки только одной специфической программы, тогда как система управления пакетами — универсальный установщик ПО.

Все пакетные менеджеры Linux имеют свой список репозиториев – серверов с базой пакетов. Во время установки алгоритм менеджера находит необходимый пакет в базе и производит автоматическое скачивание, установку и настройку.

## Теоретические основы

### Категории пакетных менеджеров

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

### Распространенные форматы пакетов

* **DEB (.deb)**. Самый популярный формат пакетов дистрибутива Debian и его ближайших родственников — Ubuntu, MX Linux,  Pop!\_OS, elementary OS и других.
* **RPM (.rpm)**. Разработан компанией Red Hat и внедрен в дистрибутив RHEL. Также применяется в таких системах как Fedora и CentOS.
* **TAR.XZ**. Стандартный тип пакетов для дистрибутива ArchLinux и его производных — Manjaro, ARCOLINUX и других.
* **Ebuild (.ebuild).** Скрипт [bash-сценария](https://eternalhost.net/blog/sistemnoe-administrirovanie/linux-bash-chto-eto) для компиляции программ в дистрибутивах Gentoo и Calculate Linux.

### Разрешение зависимостей

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

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

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

## Популярные пакетные менеджеры

### DPKG <a href="#p1" id="p1"></a>

<figure><img src="/files/mvpkCVlEB7QRhaj9lPw8" alt=""><figcaption></figcaption></figure>

**DPKG (Debian Package)** – система управления пакетами в Debian и дистрибутивах на его основе, например Ubuntu.

Утилита DPKG появилась в дистрибутиве Debian в 1995 году. Низкоуровневый пакетный менеджер создан только для работы с локальными DEB пакетами и не может самостоятельно разрешать зависимости, а также скачивать пакеты из репозиториев.

#### **Особенности**

* Поддерживает добавление архитектур из других дистрибутивов Linux.
* DPKG выполняет работу только с локальными пакетами.
* Под архитектуру DEB выпущено более 55000 пакетов.

Пакеты DEB – это архивы с набором установочных файлов. Для установки в систему необходимой программы из репозиториев создан высокоуровневый пакетный менеджер APT, который параллельно работает с DPKG.

### APT <a href="#p2" id="p2"></a>

<img src="https://eternalhost.net/wp-content/uploads/2020/11/APT1-1.png" alt="" height="285" width="862">

**APT (Advanced Packaging Tool)** – консольная утилита, выполняющая роль «поисковик&#x430;**»** и загрузчика пакетов из репозиториев. Установка скачанных пакетов производится утилитой DPKG. Благодаря эффективному разрешению зависимостей, пакетный менеджер APT используется по умолчанию в дистрибутивах с архитектурой Debian и поддерживает систему в актуальном состоянии.

Список репозиториев хранится в файле «/etc/apt/sources.lis&#x74;**»** и может быть изменён пользователем в любой момент для установки или обновления программы, не входящей в базу дистрибутива.  Установка скачанных пакетов производится утилитой DPKG.

Изначально APT разрабатывался только для работы с пакетами DE&#x42;**,** использующихся в Debian и родственных ОС (Ubuntu, Linux Mint). Позже в него была добавлена поддержка rpm-файлов. Благодаря этому, установить софт привычным образом можно даже в дистрибутивах RED HAT и его производных (Fedora, CentOS и др.).

#### **Оболочки APT**

Для упрощения работы с APT можно использовать консольные оболочки **APTITUDE** или **Synaptic**.

#### **APTITUDE**

**APTITUDE** — это утилита, выполняющая роль «надстройки» для APT. Разработчики программы добавили полезные функции, оптимизирующие систему поиска пакетов, а также исправили ошибки, касающиеся разрешения зависимостей.

APTITUDE доступен в нескольких вариантах интерфейса:

* **Графический интерфейс** (GUI) на базе фреймворка GTK. Привычный для пользователя оконный интерфейс с возможностью управления мышью.\
  ![](https://eternalhost.net/wp-content/uploads/2020/11/1-aptitude-GUI.png)
* **Текстовый пользовательский интерфейс**. Оболочка, открывающаяся в консоли. Интерфейс снабжается минимальным количеством графических элементов и может запускаться через протокол [SSH](https://eternalhost.net/blog/virtualnyj-server/zashita-ssh). Управление осуществляется с помощью одиночных или групповых нажатий клавиш клавиатуры. Например, для переключения строк чаще всего используются клавиши со стрелками.\
  ![](https://eternalhost.net/wp-content/uploads/2020/11/1.1-aptitude-TUI.png)
* **Интерфейс командной строки**. Подразумевает управление программой с помощью команд. Вариант позволяет полноценно пользоваться функционалом утилиты и подходит для продвинутых пользователей.\
  ![](https://eternalhost.net/wp-content/uploads/2020/11/1.2-aptitude-CLI-1.png)

Если в дистрибутиве APTITUDE отсутствует по умолчанию, то выполнить установку можно следующими командами:

`sudo apt install aptitude # для дистрибутивов Debian, Ubuntu и других`

`sudo yum install aptitude # для дистрибутивов RHEL, CentOS, Fedora и др.`

### **Synaptic**

<img src="https://eternalhost.net/wp-content/uploads/2020/11/2-Synaptic.png" alt="" height="504" width="700">

**Synaptic** — графический менеджер пакетов, работающий на основе APT. Программа пригодится новичкам, плохо знакомым с командной строкой. Несмотря на простоту интерфейса, утилита предоставляет весь необходимый функционал пакетного менеджера APT (установка, удаление, обновление и поиск пакетов).

Установить Synaptic можно следующими командами:

`sudo apt install synaptic # для дистрибутивов Debian, Ubuntu и других`

`yum install synaptic # для дистрибутивов RHEL, CentOS, Fedora и др.`

Открыть программу можно, найдя ярлык в меню рабочего окружения, или введя «sudo synapti&#x63;**»** в терминале.

### RPM <a href="#p3" id="p3"></a>

<img src="https://eternalhost.net/wp-content/uploads/2020/11/Red-Hat-Package-Manager2.png" alt="" height="285" width="862">

**RPM (Red Hat Package Manager)** – формат пакетов и низкоуровневый пакетный менеджер систем RED HAT (RHEL, CentOS, Fedora и др.) Как и DPKG, способен работать только с локальными файлами.

Пакетный менеджер выпущен в 1997 году. Он работает с пакетами RPM. В отличие от DEB, пакеты RPM архивируются утилитой cpio, сжимающий пакет алгоритмом gzip.

#### **Особенности**

* Обновление программ производится в ускоренном режиме, благодаря замене только отредактированных разработчиком элементов пакета.
* Для скачивания, обновления пакетов, а также разрешения зависимостей придётся использовать пакетные менеджеры более высокого уровня (YUM, DNF).
* Начиная с 2010 года, пакеты подписываются с хешем MD5. Это исключает вероятность изменения файла RPM злоумышленником для внедрения вирусного кода.

### YUM <a href="#p4" id="p4"></a>

<img src="https://eternalhost.net/wp-content/uploads/2020/11/Yellowdog-Updater-Modified-yum-1.png" alt="" height="284" width="861">

**YUM (Yellowdog Updater, Modified)** – высокоуровневый пакетный менеджер, написанный на языке Python для систем RED HAT (RHEL, CentOS, Fedora). Программа представляет собой своеобразную оболочку для утилиты RPM.

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

### DNF <a href="#p5" id="p5"></a>

**DNF (Dandified YUM)** – модифицированная версия пакетного менеджера YUM на языке на Python. Разработка утилиты начата в 2011 году. В 2015 году DNF стал основным менеджером пакетов для системы Fedora 22. В  DNF были исправлены такие недостатки YUM, как некорректная установка зависимостей, низкая скорость работы, большое потребление оперативной памяти.

#### **Yum Extender**

**Yum Extender** – лёгкая графическая оболочка для менеджеров пакетов YUM и DNF.

<img src="https://eternalhost.net/wp-content/uploads/2020/11/3-Yum-Extender.png" alt="" height="192" width="700">

Yum Extender устанавливается следующей командой:

`yum install yumex`

### Pacman <a href="#p6" id="p6"></a>

<img src="https://eternalhost.net/wp-content/uploads/2020/11/pacman-1.png" alt="" height="287" width="861">

**Pacman** – высокоуровневый пакетный менеджер системы Arch Linux и его родственных дистрибутивов (Manjaro, EndeavourOS и др.). Программа написана на языке C# и совмещает высокую функциональность, легкость и производительность. В качестве пакетов используются архивы **pkg.tar.xz***.*

#### **Особенности**

* В Pacman совмещены функции работы с репозиториями и установка пакетов в систему, в отличие от систем Debian или Red Hat.
* В систему устанавливается новейшее ПО, благодаря модели обновлений «плавающий релиз» (**rolling-release**).
* В репозиториях Pacman располагаются заранее собранные пакеты, что значительно ускоряет процесс инсталляции программ.
* Поддержка работы с репозиторием AUR.

Компиляция программы производится только в том случае, если пакет взят из репозитория AUR (Arch User Repository). Он содержит более 54000 пакетов и активно поддерживается обычными пользователями и администраторами ArchLinux.

Перед тем, как  попасть в официальный репозиторий дистрибутива, пакеты проходят тщательный отбор в репозиториях AUR. Репозиторий AUR, в отличие от официального репозитория, содержит скрипты PKGBUILD для самостоятельной сборки пакета в системе пользователя. Для компиляции используется скрипт MakePKG.

#### **Оболочки Pacman**

#### **MakePKG**

Скрипт, объединяющий работу компилятора, линкера и других вспомогательных приложений для сборки пакета из PKGBUILD. MakePKG установлен по умолчанию в системе с пакетным менеджером Pacman. Компонент входит в пакет base-devel и ABS (Система автоматической сборки пакетов).

Установка или обновление всех компонентов производиться командами:

`sudo pacman -S base-develsudo pacman -S abs`

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

`makepkg -si`

> ***Важно.** Запуск скрипта с помощью MakePKG должен проводится без предоставления прав администратора. Это делается для защиты системы от выполнения вредоносных команд, находящихся в файле «*&#x70;kgbuild»*.*

#### **Yay**

Программа написана на языке GO и используется для поиска и установки пакета из репозитория AUR. Управления Yay производится посредством командной строки.

Для установки утилиты в дистрибутив с Pacman нужно задать следующие команды:

`sudo pacman -S gitgit clone https://aur.archlinux.org/yay.gitcd yaymakepkg -si`

Утилита Yay упрощает весь алгоритм установки до ввода одной простой команды в консоль. Например, запрос к терминалу для инсталляции пакета из AUR строится следующим образом:

`yay -S {название пакета}`

> **Примечание.** *Для установки пакетов через Yay не требуется предоставлять административный доступ утилите (добавлять «*&#x73;ud&#x6F;***»** перед командой)*.

#### **Pamac**

<img src="https://eternalhost.net/wp-content/uploads/2020/11/4-Pamac.png" alt="" height="181" width="700">

Графический менеджер пакетов Pamac разработан специально для Manjaro, но может быть установлен в любой дистрибутив на основе Arch Linux. Программа сочетает лёгкость с большим функционалом. В качестве источников используются официальные репозитории дистрибутивов AUR и Snappy.

Установка программы Pamac выполняется командой:

`sudo pacman -Syu pamac-gtk`

### Portage <a href="#p7" id="p7"></a>

<img src="https://eternalhost.net/wp-content/uploads/2020/11/Portage-1.png" alt="" height="287" width="861">

**Portage** – система управления пакетами Gentoo или Calculate Linux. Установка программ для данного дистрибутива несколько отличается от остальных систем Linux. В Gentoo пакетный менеджер использует исключительно исходный код, а не готовые пакеты для установки программ.

#### **Особенности**

* Программы собираются под пользовательскую систему и железо, что обеспечивает стабильную работу ОС.
* По сравнению с распаковкой программ у других пакетных менеджеров, компиляция в Portage занимает много времени. Например, полный пакет LibreOffice компилируется от 4 часов и более.
* Пользователь может гибко настроить параметры компиляции и полностью управлять процессом сборки. Например, поставить операцию на паузу и продолжить позже.
* Для обновления установленного ПО используется система rolling-release, благодаря которой в репозитории дистрибутива поставляются пакеты последней версии, опубликованные разработчиком в течение 1-2 дней.

Установка программ из репозиториев чаще всего производится с помощью интерфейса Emerge. Для добавления дружелюбности системе, также можно использовать графическую оболочку Kuroo.

#### **Интерфейсы Portage**

#### **Emerge**

Консольный интерфейс Emerge предназначен для сборки и обновления программ и их зависимостей. Инструмент доступен «из коробки» и используется для работы с системой Portage по умолчанию.

Для компиляции программ используются ebuild-скрипты. Они содержатся в локальных [репозиториях Gentoo](https://gitweb.gentoo.org/repo/gentoo.git/tree/) (overlay), а сам исходный код программ скачивается с GitHub. Настроить список репозиториев можно самостоятельно, в файле «/etc/portage/repos.conf».

#### **Kuroo**

Графический интерфейс Kuroo по принципу работы почти не отличается от Emerge. Утилита написана на языке C++ с использованием фреймворка Qt.

<img src="https://eternalhost.net/wp-content/uploads/2020/11/5-Kuroo.png" alt="" height="417" width="700">

#### Kuroo установлен по умолчанию в систему с рабочим окружением KDE. В случае отсутствия программы, инсталляция выполняется по [данной инструкции](https://ru.bmstu.wiki/Kuroo_\(an_emerge_gui\)).

Дополнительно про пакетные менеджеры вы можете прочитать ниже:

```
man dpkg
man apt
man dnf
man zypper
man make
```

## Wget и Curl

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

### wget

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

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

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

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

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

#### Опции

Синтаксис опций очень свободный. У каждой опции, как правило есть как длинное, так и короткое имя. Их можно записывать как до URL, так и после. Между опцией и ее значением не обязательно ставить пробел, например вы можете написать `-o log` или `-olog`. Эти значения эквивалентны. Также если у опций нет параметров, не обязательно начинать каждую с дефиса, можно записать их все вместе: `-drc` и `-d -r -c`. Эти параметры **`wget`** тоже эквивалентны.

А теперь давайте перейдем к списку опций. У **`wget`** слишком много опций, мы разберем только основные.

* **-V** **(--version)** - вывести версию программы
* **-h (--help)** - вывести справку
* **-b** **(--background)** - работать в фоновом режиме
* **-o** **файл** **(--out-file)** - указать лог файл
* **-d** **(--debug)** - включить режим отладки
* **-v (--verbose)** - выводить максимум информации о работе утилиты
* **-q (--quiet)** - выводить минимум информации о работе
* **-i** **файл (--input-file)** - прочитать URL из файла
* **--force-html** - читать файл указанный в предыдущем параметре как html
* **-t (--tries)** - количество попыток подключения к серверу
* **-O файл** **(--output-document)** - файл в который будут сохранены полученные данные
* **-с (--continue)** - продолжить ранее прерванную загрузку
* **-S (--server-response)** - вывести ответ сервера
* **--spider** - проверить работоспособность URL
* **-T время (--timeout)** - таймаут подключения к серверу
* **--limit-rate** - ограничить скорость загрузки
* **-w (--wait)** - интервал между запросами
* **-Q** **(--quota)** - максимальный размер загрузки
* **-4 (--inet4only)** - использовать протокол ipv4
* **-6 (--inet6only)** - использовать протокол ipv6
* **-U (--user-agent)**- строка USER AGENT отправляемая серверу
* **-r** (**--recursive**)- рекурсивная работа утилиты
* **-l (--level)** - глубина при рекурсивном сканировании
* **-k** **(--convert-links)** - конвертировать ссылки в локальные при загрузке страниц
* **-P (--directory-prefix)** - каталог, в который будут загружаться файлы
* **-m** **(--mirror)** - скачать сайт на локальную машину
* **-p** **(--page-requisites)** - во время загрузки сайта скачивать все необходимые ресурсы

Кончено это не все ключи **`wget`**, но здесь и так слишком много теории, теперь давайте перейдем к практике. Примеры **`wget`** намного интереснее.

### curl

**cURL** (расшифровывается как Client URL) — программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности cURL огромны, во многих опциях легко потеряться.

**curl** — инструмент для передачи данных с сервера или на него, при этом используется один из поддерживаемых протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Команда предназначена для работы без взаимодействия с пользователем.

Команда **`curl`** запускается из командной строки и предустановлена в большинстве дистрибутивов Linux.

Варианты применения:

* доступ без браузера;
* внутри shell-скриптов;
* для тестирования API.

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

#### Запрос страницы

Если никакие аргументы не указаны, то команда **`curl`** выполняет HTTP-запрос get и отображает статическое содержимое страницы. Оно аналогично тому, что мы видим при просмотре исходного кода в браузере.

`curl www.google.com`

#### Скачивание файла

Есть два варианта этой команды.

* Скачать файл и сохранить под оригинальным именем (testfile.tar.gz).

`curl -O https://testdomain.com/testfile.tar.gz`

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

`curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz`

Еще можно скачать несколько файлов одной командой, хотя в мануале так делать не рекомендуют.

`curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz`

#### Получение заголовков HTTP

Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции `-I` или `--head`. Они позволяют получить заголовок без тела документа.

`curl -I https://www.google.com HTTP/1.1 200 OK Content-Type: text/html; charset=ISO-8859-1 P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Date: Thu, 04 Jun 2020 15:07:42 GMT Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked Expires: Thu, 04 Jun 2020 15:07:42 GMT Cache-Control: private Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure Set-Cookie: <cookie_info>`

#### Игнорирование ошибки неправильных или самоподписанных сертификатов

Когда вы тестируете веб-приложение или API, то в вашем тестовом окружении могут быть самоподписанные или неправильные SSL-сертификаты. По умолчанию **`curl`** верифицирует все сертификаты. Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию `-k` или `--insecure`.

`curl -k https://localhost/my_test_endpoint`

#### Отправка POST-запроса

Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON.

* Запрос в виде списка имя=значение.

`curl --data "param1=test1&param2=test2" http://test.com`

* Запрос в виде JSON.

`curl -H 'Content-Type: application/json' --data '{"param1":"test1","param2":"test2"}' http://www.test.com`

Параметр `--data` эквивалентен `-d`, оба указывают **`curl`** выполнить HTTP POST-запрос.

#### Указание типа запроса

Если **`curl`** не передаются никакие данные, то по умолчанию он выполняет HTTP GET запрос. Но если вам, например, нужно обновить данные, а не пересоздать их заново, то **`curl`** поддерживает опции, указывающие тип запроса. Параметры `-x` или `--request` позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.

`# updating the value of param2 to be test 3 on the record id curl -X 'PUT' -d '{"param1":"test1","param2":"test3"}' \http://test.com/1`

#### Использование авторизации

API защищено авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр `-u` или `--user`. Если просто передать логин, то **`curl`** запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.

`curl -u <user:password> https://my-test-api.com/endpoint1`

#### Управление resolve'ом имен

Вы хотите протестировать API перед развертыванием и перенаправить запрос на тестовую машину — это можно сделать, указав альтернативный resolve имени эндпоинта для данного запроса. Все работает эквивалентно пропиcыванию хоста в /etc/hosts.

`curl --resolve www.test.com:80:localhost http://www.test.com/`

#### Загрузка файла

О возможности загрузки файла через curl я узнал недавно. Не был уверен, что это возможно, но, по всей видимости, это так: curl с опцией `-F` эмулирует отправку заполненной формы, когда пользователь нажимает кнопку отправки. Опция указывает **`curl`** передавать данные в виде POST-запроса, используя multipart / form-data Content-Type.

`curl -F @field_name=@path/to/local_file`

Вы можете загрузить несколько файлов, повторяя параметр `-F`.

`curl -F @field_name=@path/to/local_file @field_name=@path/to/local_file_2`

#### Измерение продолжительности соединения

Вы можете использовать опцию `-w` для отображения информации в stdout после завершения передачи. Она поддерживает отображение набора переменных. Например, можно узнать общее время, которое потребовалось для успешного выполнения запроса. Это удобно, если вам нужно определить время загрузки или скачивания с помощью curl.

`curl -w "%{time_total}\n" -o /dev/null -s www.test.com`

Это некоторые из опций, которые можно использовать с **`curl`**. Надеюсь, информация была вам полезна и статья понравилась.

{% embed url="<https://linuxoid85.github.io/LinuxSovet/stats/LFS/LinuxStr5/LinuxStr5.html>" %}

{% embed url="<https://eternalhost.net/blog/sistemnoe-administrirovanie/paketnye-menedzhery-linux>" %}
