Запрос всех пакетов, опубликованных на сайте nuget.org
Типичным шаблоном запроса для устаревшего OData V2 API было перечисление всех пакетов, опубликованных на сайте nuget.org, с сортировкой по времени публикации. Подобный запрос к сайту nuget.org может потребоваться в самых разных ситуациях:
- Репликация всего сайта nuget.org
- Проверка на наличие новых версий для пакетов
- Поиск пакетов, зависящих от вашего пакета
Ранее для этого обычно выполнялась сортировка сущности пакета OData по метке времени и просмотр огромного результирующего набора с помощью параметров skip и top (размер страницы). К сожалению, у этого способа есть несколько недостатков:
- Возможность отсутствия пакетов, так как запросы выполняются для данных, которые часто меняют порядок.
- Большое время отклика запроса, так как запросы не оптимизируются (лучше всего оптимизированы запросы, поддерживающие основной сценарий для официального клиента NuGet).
- Использование нерекомендуемого и незадокументированного API, из-за чего не гарантируется поддержка этих запросов в будущем.
- Неспособность воспроизвести журнал в том порядке, в котором он формировался.
По этой причине можно воспользоваться приведенным ниже руководством, чтобы обеспечить более надежную и прогнозируемую работу в вышеупомянутых сценариях.
Обзор
Центральной точкой этого руководства является ресурс в API NuGet, называемый каталогом. Каталог — это API только для добавления, который позволяет вызывающей стороне просматривать полный журнал пакетов, добавленных, измененных и удаленных из nuget.org. Если вы заинтересованы во всех или даже подмножествах пакетов, опубликованных в nuget.org, каталог является отличным способом оставаться в актуальном состоянии с набором доступных пакетов в настоящее время.
Это руководство имеет общий характер. Если вы хотите получить более подробные сведения о каталоге, см. соответствующий справочник по API.
Приведенные ниже шаги можно реализовать на любом языке программирования. Если вам нужен полноценный рабочий пример, обратите внимание на указанный ниже пример на C#.
В противном случае выполните приведенные ниже инструкции, чтобы создать надежное средство чтения каталога.
Инициализация курсора
Первым шагом в создании надежного средства чтения каталога является реализация курсора. Полные сведения о проектировании курсора каталога см. в справочном документе по каталогу. Если кратко, курсор является точкой во времени, до которой вы обработали события в каталоге. События в каталоге представляют публикации пакетов и другие их изменения. Если вас интересуют все пакеты, когда-либо опубликованные в NuGet (с самого его появления), нужно инициализировать курсор с минимальной меткой времени (например, DateTime.MinValue в .NET). Если вам нужны только пакеты, опубликованные с текущего момента, нужно использовать текущую метку времени в качестве начального значения курсора.
В этом руководстве мы инициализируем курсор с меткой времени на час раньше текущего момента. Пока просто сохраните метку времени в памяти.
DateTime cursor = DateTime.UtcNow.AddHours(-1);
Определение URL-адреса индекса каталога
Нужно определить расположение каждого ресурса (конечная точка) в API NuGet с помощью индекса службы. Так как это руководство ориентировано на сайт nuget.org, мы будем использовать индекс службы для nuget.org.
GET https://api.nuget.org/v3/index.json
Документ службы — это документ JSON, содержащий все ресурсы в nuget.org. Найдите ресурс со значением @type Catalog/3.0.0 свойства . Соответствующее значение свойства @id является URL-адресом для самого индекса каталога.
Поиск новых конечных объектов каталога
Используя значение свойства @id , найденное на предыдущем шаге, скачайте индекс каталога:
GET https://api.nuget.org/v3/catalog0/index.json
Десериализуйте индекс каталога. Отфильтруйте все объекты страниц каталога, у которых commitTimeStamp меньше или равен текущему значению курсора.
Для каждой из оставшихся страниц каталога скачайте полный документ, используя свойство @id .
GET https://api.nuget.org/v3/catalog0/page2926.json
Десериализуйте страницу каталога. Отфильтруйте все конечные объекты каталога, у которых commitTimeStamp меньше или равен текущему значению курсора.
Скачав все неотфильтрованные страницы каталога, вы получите набор конечных объектов каталога, представляющих пакеты, которые были опубликованы, исключены из списка, добавлены в список или удалены за период между меткой времени вашего курсора и текущим моментом.
Обработка конечных объектов каталога
На этом этапе вы можете выполнить любую пользовательскую обработку элементов каталога. Если вам нужны только идентификатор и версия пакета, можно просмотреть свойства nuget:id и nuget:version для объектов элементов каталога, найденных на этих страницах. Обязательно просмотрите свойство @type , чтобы узнать, касается ли элемент каталога существующего или удаленного пакета.
Если вас интересуют метаданные о пакете (например, описание, зависимости, размер, файла NUPKG и т. д), можно извлечь документ конечного объекта каталога с помощью свойства @id .
GET https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json
Этот документ содержит все метаданные, входящие в ресурс метаданных пакета, и многое другое.
На этом этапе вы реализуете настраиваемую логику. Другие действия в этом руководстве реализуются аналогичным образом, независимо от конкретных действий с конечными объектами каталога.
Скачивание файла NUPKG
Если вы хотите скачать файл NUPKG для найденных в каталоге пакетов, можно использовать ресурс содержимого пакета. Но нужно учитывать, что при обнаружении пакета в каталоге он станет доступен в ресурсе содержимого пакета с небольшой задержкой. Поэтому если при попытке скачать файл NUPKG для найденного в каталоге пакета возникает 404 Not Found , просто повторите попытку немного позднее. Исправлению этой задержки посвящен вопрос GitHub NuGet/NuGetGallery#3455.
Перемещение курсора вперед
После успешной обработки элементов каталога нужно определить новое значение курсора. Для этого найдите максимальное значение (последнее в хронологическом порядке) commitTimeStamp для всех обработанных элементов каталога. Это и есть новое значение курсора. Сохраните его в постоянном хранилище, таком как база данных, файловая система или хранилище BLOB-объектов. Если вам нужно получить дополнительные элементы каталога, просто начните с первого шага, инициализировав значение курсора из этого постоянного хранилища.
Если приложение вызывает исключения или завершается со сбоем, не перемещайте курсор вперед. Перемещение курсора вперед означает, что вам больше никогда не потребуется снова обработать элементы каталога, предшествующие курсору.
Если по некоторым причинам у вас возникает ошибка при обработке конечных объектов каталога, можете просто переместить курсор назад и позволить коду повторно обработать старые элементы каталога.
Пример кода C#
Так как каталог представляет собой набор документов JSON, доступных по протоколу HTTP, с ним можно взаимодействовать с помощью любого языка программирования, имеющего HTTP-клиент и десериализатор JSON.
git clone https://github.com/NuGet/Samples.git
Пакет SDK каталога
Самый простой способ работы с каталогом — использовать предварительный выпуск пакета SDK NuGet.Protocol.Catalog для каталога .NET. Пакет доступен в Azure Artifacts по следующему URL-адресу источника пакетов NuGet: https://pkgs.dev.azure.com/dnceng/public/_packaging/nuget-build/nuget/v3/index.json .
Вы можете установить этот пакет в проект, совместимый с netstandard1.3 или более поздней версии (например, .NET Framework 4.6).
Пример использования этого пакета можно найти на сайте GitHub в проекте NuGet.Protocol.Catalog.Sample.
Пример полученных результатов
2017-11-10T22:16:44.8689025+00:00: Found package details leaf for xSkrape.APIWrapper.REST 1.0.2. 2017-11-10T22:16:54.6972769+00:00: Found package details leaf for xSkrape.APIWrapper.REST 1.0.1. 2017-11-10T22:19:20.6385542+00:00: Found package details leaf for Platform.EnUnity 1.0.8. . 2017-11-10T23:05:04.9695890+00:00: Found package details leaf for xSkrape.APIWrapper.Base 1.0.1. 2017-11-10T23:05:04.9695890+00:00: Found package details leaf for xSkrape.APIWrapper.Base 1.0.2. 2017-11-10T23:07:23.1303569+00:00: Found package details leaf for VeiculoX.Model 0.0.15. Processing the catalog leafs failed. Retrying. fail: NuGet.Protocol.Catalog.LoggerCatalogLeafProcessor[0] 10 catalog commits have been processed. We will now simulate a failure. warn: NuGet.Protocol.Catalog.CatalogProcessor[0] Failed to process leaf https://api.nuget.org/v3/catalog0/data/2017.11.10.23.07.23/veiculox.model.0.0.15.json (VeiculoX.Model 0.0.15, PackageDetails). warn: NuGet.Protocol.Catalog.CatalogProcessor[0] 13 out of 59 leaves were left incomplete due to a processing failure. warn: NuGet.Protocol.Catalog.CatalogProcessor[0] 1 out of 1 pages were left incomplete due to a processing failure. 2017-11-10T23:07:23.1303569+00:00: Found package details leaf for VeiculoX.Model 0.0.15. 2017-11-10T23:07:33.0212446+00:00: Found package details leaf for VeiculoX.Model 0.0.14. 2017-11-10T23:07:41.6621837+00:00: Found package details leaf for VeiculoX.Model 0.0.13. 2017-11-10T23:09:58.5728614+00:00: Found package details leaf for CreaSoft.Composition.Web.Extensions 1.1.0. 2017-11-10T23:09:58.5728614+00:00: Found package details leaf for DarkXaHTeP.Extensions.Configuration.Consul 0.0.4. 2017-11-10T23:09:58.5728614+00:00: Found package details leaf for xSkrape.APIWrapper.REST.Sample 1.0.3. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for Microsoft.VisualStudio.Imaging 15.4.27004. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime 14.3.25407. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for Microsoft.VisualStudio.Language.Intellisense 15.4.27004. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for Microsoft.VisualStudio.Language.StandardClassification 15.4.27004. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for Microsoft.VisualStudio.ManagedInterfaces 8.0.50727. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for xSkrape.APIWrapper.REST.Sample 1.0.2. 2017-11-10T23:10:09.0574930+00:00: Found package details leaf for xSkrape.APIWrapper.REST.Sample 1.0.3.
Минималистичный пример
Пример с меньшим числом зависимостей, более подробно демонстрирующий взаимодействие с каталогом, см. в проекте примера CatalogReaderExample. Этот проект ориентирован на netcoreapp2.0 и зависит от NuGet.Protocol 4.4.0 (для разрешения индекса службы) и Newtonsoft.Json 9.0.1 (для десериализации JSON).
Основная логика кода видна в файле Program.cs.
Пример полученных результатов
No cursor found. Defaulting to 11/2/2017 9:41:28 PM. Fetched catalog index https://api.nuget.org/v3/catalog0/index.json. Fetched catalog page https://api.nuget.org/v3/catalog0/page2935.json. Processing 69 catalog leaves. 11/2/2017 9:32:35 PM: DotVVM.Compiler.Light 1.1.7 (type is nuget:PackageDetails) 11/2/2017 9:32:35 PM: Momentum.Pm.Api 5.12.181-beta (type is nuget:PackageDetails) 11/2/2017 9:32:44 PM: Momentum.Pm.PortalApi 5.12.181-beta (type is nuget:PackageDetails) 11/2/2017 9:35:14 PM: Genesys.Extensions.Standard 3.17.11.40 (type is nuget:PackageDetails) 11/2/2017 9:35:14 PM: Genesys.Extensions.Core 3.17.11.40 (type is nuget:PackageDetails) 11/2/2017 9:35:14 PM: Halforbit.DataStores.FileStores.Serialization.Bond 1.0.4 (type is nuget:PackageDetails) 11/2/2017 9:35:14 PM: Halforbit.DataStores.FileStores.AmazonS3 1.0.4 (type is nuget:PackageDetails) 11/2/2017 9:35:14 PM: Halforbit.DataStores.DocumentStores.DocumentDb 1.0.6 (type is nuget:PackageDetails) 11/2/2017 9:35:14 PM: Halforbit.DataStores.FileStores.BlobStorage 1.0.5 (type is nuget:PackageDetails) . 11/2/2017 10:23:54 PM: Cake.GitPackager 0.1.2 (type is nuget:PackageDetails) 11/2/2017 10:23:54 PM: UtilPack.NuGet 2.0.0 (type is nuget:PackageDetails) 11/2/2017 10:23:54 PM: UtilPack.NuGet.AssemblyLoading 2.0.0 (type is nuget:PackageDetails) 11/2/2017 10:26:26 PM: UtilPack.NuGet.Deployment 2.0.0 (type is nuget:PackageDetails) 11/2/2017 10:26:26 PM: UtilPack.NuGet.Common.MSBuild 2.0.0 (type is nuget:PackageDetails) 11/2/2017 10:26:36 PM: InstaClient 1.0.2 (type is nuget:PackageDetails) 11/2/2017 10:26:36 PM: SecureStrConvertor.VARUN_RUSIYA 1.0.0.5 (type is nuget:PackageDetails) Writing cursor value: 11/2/2017 10:26:36 PM.
Управление упакованными приложениями с помощью элемента управления приложениями в Защитнике Windows
Некоторые возможности управления приложениями в Защитнике Windows (WDAC) доступны только в определенных версиях Windows. Дополнительные сведения о доступности функций WDAC.
В этой статье для ИТ-специалистов описаны основные понятия и описаны процедуры, которые помогут вам управлять упакованными приложениями с помощью управления приложениями в Защитнике Windows (WDAC) в рамках общей стратегии управления приложениями.
Сравнение классических приложений Windows и упакованных приложений
Самая большая проблема при внедрении управления приложениями заключается в отсутствии надежного удостоверения приложения для классических приложений Windows, также известных как приложения win32. Обычное приложение win32 состоит из нескольких компонентов, включая установщик, используемый для установки приложения, и один или несколько exe-файлов, библиотек DLL или скриптов. Приложение может состоять из сотен или даже тысяч отдельных двоичных файлов, которые совместно обеспечивают функциональность, которую пользователи понимают как приложение. Некоторые из этих кодов могут быть подписаны издателем программного обеспечения, некоторые — другими компаниями, а некоторые — вообще не подписаны. Большая часть кода может быть записана на диск общим набором установщиков, но некоторые из этих программ уже установлены, а некоторые скачаны по запросу. Некоторые двоичные файлы имеют общие метаданные заголовков ресурсов, например название продукта и версию продукта, но другие файлы не будут совместно использовать эти сведения. Таким образом, хотя вы хотите иметь возможность выражать такие правила, как «разрешить приложение Foo», это не то, что Windows по своей сути понимает для классических приложений Windows. Вместо этого может потребоваться создать много правил WDAC, чтобы разрешить все файлы, составляющие приложение.
С другой стороны, упакованные приложения, также известные как MSIX, гарантируют, что все файлы, составляющие приложение, имеют одно удостоверение и общую подпись. Таким образом, с упакованными приложениями можно управлять всем приложением с помощью одного правила WDAC.
Использование WDAC для управления упакованными приложениями
При управлении упакованными приложениями необходимо выбирать между правилами подписывания или правилами имени семейства пакетов (PFN). Если в базовой политике WDAC или в одной из ее дополнительных политик используется какое-либо правило имени семейства пакетов (PFN), все упакованные приложения должны управляться исключительно с помощью правил PFN. Нельзя сочетать и сопоставлять правила PFN с правилами на основе сигнатур в область данной базовой политики. Это повлияет на многие системные приложения для папки «Входящие», например меню «Пуск». Для упрощения создания правила можно использовать подстановочные знаки в правилах PFN на Windows 11.
Создание правил на основе подписей для упакованных приложений
Все файлы, составляющие приложение MSIX, подписываются общей подписью каталога. Правило подписывания можно создать из файла установщика приложения MSIX (MSIX или MSIXbundle) или из файла AppxSignature.p7x, который находится в папке установки приложения в разделе %ProgramFiles%\WindowsApps\ с помощью командлета PowerShell New-CIPolicyRule . Пример
Создание правила подписыватель из MSIX/MSIXBUNDLE
$FilePath = $env:USERPROFILE+'\Downloads\WDACWizard_2.1.0.1_x64_8wekyb3d8bbwe.MSIX' $Rules = New-CIPolicyRule -DriverFilePath $FilePath -Level Publisher
Затем используйте командлет PowerShell Merge-CIPolicy , чтобы объединить новое правило в xml существующей политики WDAC.
Создание правила подписыватель из AppxSignature.p7x
$FilePath = $env:ProgramFiles+'\WindowsApps\Microsoft.WDAC.WDACWizard_2.1.0.1_x64__8wekyb3d8bbwe\AppxSignature.p7x' $Rules = New-CIPolicyRule -DriverFilePath $FilePath -Level Publisher
Затем используйте командлет PowerShell Merge-CIPolicy , чтобы объединить новое правило в xml существующей политики WDAC.
Создание правил PackageFamilyName для упакованных приложений
Создание правил PFN из PowerShell
Правила PFN можно создавать непосредственно из упакованных приложений, установленных в настоящее время, с помощью командлетов PowerShell Get-AppXPackage и New-CIPolicyRule . Пример
# Query for the packaged apps. This example looks for all packages from Microsoft. $Packages = Get-AppXPackage -Name Microsoft.* foreach ($Package in $Packages)
Затем используйте командлет PowerShell Merge-CIPolicy , чтобы объединить новые правила в существующий XML-код политики WDAC.
Создание правил PFN с помощью мастера WDAC
Создание правила PFN из установленного приложения MSIX
Чтобы создать правило PFN WDAC для приложения, установленного в системе, выполните следующие действия.
- На странице Правила подписи политикмастера WDAC выберите Добавить пользовательское правило.
- Установите флажок Usermode Rule (Правило пользовательского режима ) в качестве области правила, если он не установлен.
- Выберите Разрешить или Запретить для действия правила.
- Выберите Упакованое приложение в поле Тип правила.
- В поле Имя пакета введите строковое значение для поиска. В строке поиска можно использовать ? подстановочные знаки или * . Затем выберите Поиск.
- В поле результатов проверка одно или несколько приложений, для которых требуется создать правила.
- Выберите Создать правило.
- Создайте другие необходимые правила, а затем завершите работу мастера.
Создание правила PFN с помощью настраиваемой строки
Чтобы создать правило PFN с пользовательским строковым значением, выполните следующие действия.
- Повторите шаги 1–4 в предыдущем примере.
- Установите флажок Использовать пользовательское семейство пакетов. Метка кнопки Поиск изменится на Создать.
- В поле Имя пакета введите строковое значение для правила PFN. Для Windows 11 устройств можно использовать ? подстановочные знаки или * . Затем нажмите кнопку Создать.
- В поле результатов проверка одно или несколько приложений, для которых требуется создать правила.
- Выберите Создать правило.
- Создайте другие необходимые правила, а затем завершите работу мастера.
dpkg-query


A tool that shows information about installed packages.
- List all installed packages:
- List installed packages matching a pattern:
- List all files installed by a package:
- Show information about a package:
Операционная система Linux (Линукс или Лайнакс) во многом похожая на проприетарную Unix. Линукс распространён на серверах, что означает, что изучая её вы улучшаете свой навык администрирования, DevOps и программирования. Открытая …

Заметки об Операционной Системе FreeBSD (фри бсд). Один из старейших Unix (Юникс), прародитель многих ОС, а также по мнению многих — самая свободная операционная система. Разработан в рамках общего проекта …

Трюки Bash
Полезные заметки по работе с командной строкой: bash и прочие *sh. Однострочники, скрипты, позволяющие решать большие и малые задачи администрирования и настройки Юникс систем. Zsh для современного MacOS, Bash для …

Терминал/Консоль
Команды и инструкции терминала (консоли) Linux, MacOS, Windows и прочих операционных систем. Трюки и особенности командных оболочек, скрипты для администрирования Unix. Программирование и скриптование Windows и Linux, тонкая настройка Macos. …

Также может быть вам интересно:
- Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable
- Пример своей консольной команды в Django проекте
- Как на Bash посчитать число строк в проекте (директории)
- И снова sudo, и снова «решето»
- О многозадачности и планировщике задач (шедулер)
Свежее на «Цифре»
MessageId или как дебажить систему с минимумом проблем
Программы, 74 дня назад
Проверочный список для выпуска промышленных приложений с иллюстрациями
Работа и управление, 30.07.2023
В Google Pixel и Windows Snipping Tool есть возможность восстановления обрезанных изображений
Новости, 23.03.2023
Два подарка «под ёлочку» от Heroes of Might and Magic
Новости, 25.12.2022
Вышел Pulsar – редактор кода на основе Atom
Новости, 25.12.2022
Ленивый backup PostgreSQL
Программы, 17.12.2022
Google анонсировала OSV-Scanner: сканер уязвимостей в программных проектах
Новости, 16.12.2022

Найдена уязвимость в утилите ping для FreeBSD
Во FreeBSD найдена уязвимость, позволяющая выполнить код от пользователя root. Самое забавное, что на этот раз «дыра» была обнаружена в …

Как запустить программу в терминале в фоне, без вывода какого либо текста
Запускаем программу в терминале в фоновом режиме и разбираемся, как и почему это работает в Linux / Unix терминале.

Как установить часовой пояс в Linux
В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через …

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

Команда grep – полезные ключи и примеры использования
У команды «grep» довольно много различных особенностей. особенно, если учесть, что с английского это «решето» – а что может войти …

Как создать неизменяемый файл в Linux / MacOS / FreeBSD
Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.

Как удалить все Docker образы и контейнеры
Не всегда нужно удалять всё, но объяснение данного «рецепта» объяснит как в целом удалять образы и контейнеры.
Bash < потоки ввода >вывода && управляющие конструкции || коротко о главном
Небольшая заметка о конструкциях Bash, в которых путается большинство новичков. А именно: >,

Лучше плохо, но сейчас. Взгляд на пути развития ПО
Сейчас такие языки как Perl и Ruby чувствуют себя не лучшим образом. Но ещё 10 – 15 лет назад они …
Query all packages что это
Как уже отмечалось, весь Linux состоит из пакетов. В RedHat работу с пакетами выполняет программа rpm (RedHat Package Manager), а сами файлы, содержащие пакеты, имеют расширение .rpm . Кроме RedHat существует еще несколько дистрибутивов Linux, использующих rpm ; самые известные — Caldera, SuSE и KSI. Их так и называют — rpm-системы.
Сразу после установки системы зачастую возникает необходимость доставить некоторые пакеты, забытые при инсталляции, или убрать лишние.
У файлов, содержащих пакеты, всегда перед расширенем .rpm есть еще одно, обозначающее архитектуру, для которой предназначен этот пакет.
Некоторые расширения .rpm-файлов
| Расширение | Назначение |
|---|---|
| .i386.rpm | Пакет для Linux/Intel |
| .src.rpm | Исходный код пакета (никогда не устанавливайте .src.rpm — потом не удалите!) |
| .alpha.rpm | Пакет для Linux/Alpha |
| .sparc.rpm | Пакет для Linux/Sparc (Sun) |
| .ppc.rpm | Пакет для Linux/PowerPC |
| .noarch.rpm | Пакет для всех архитектур (обычно содержит данные — файлы конфигурации, шрифты и т.д.) |
Кроме того, само имя пакета состоит из собственно названия и версии. Например, lynx-2.8.2-3.i386.rpm — программа lynx , версия 2.8.2, build 3. К сожалению, формальных правил, позволяющих понять, где кончается имя и начинается версия, нет.
Файлы пакетов обычно расположены в одном из трех мест — в дистрибутиве, в разделе дополнений (updates) или в резделе «пожертвований» (contrib). В ИЯФ для RedHat 5.2/Intel это соответственно
Пакеты с исходными кодами всегда лежат в директориях SRPMS/ , и содержат исходный код для всех архитектур.
Использование rpm
Хотя rpm выполняет все функции работы с пакетами (включая создание .i386.rpm из .src.rpm), сейчас рассмотрим лишь основные действия.
Установка. Для установки пакета используется команда rpm -i (Install), которой указывается полное имя файла, содержащего пакет. Пример:
Если пакет уже установлен, rpm откажется его устанавливать. Если же это новая версия (т.е. делается не установка, а обновление), то надо воспользоваться командой rpm -U (Upgrade); фирма RedHat рекомендует «для красоты» использовать форму rpm -Uvh — при этом «прогресс» в установке показывается индикатором из символов » # «. Пример:
bobby:~# rpm -Uvh wu-ftpd-2.4.2b18-2.1.i386.rpm wu-ftpd ################################################## bobby:~# _
Если требуется установить несколько пакетов, то можно указать их все в одной команде (через пробелы). Иногда это нужно — например, при обновлении программы, состоящей из нескольких пакетов (например, Netscape), чтобы rpm не выдавал ошибок из-за зависимостей пакетов.
Удаление. Для удаления установленного пакета используется команда rpm -e (Erase). Ей указывается имя пакета (можно без версии), и без суффикса «.i386.rpm» . Пример:
При удалении нескольких пакетов их также стоит указать все вместе в одной команде, чтобы rpm не «ругался» на удаление пакета, от которого зависит другой пакет.
Информация. Чтобы узнать, установлен ли некий пакет, служит команда rpm -q (Query). Ей также указывается имя пакета, а она выдает его полное имя, если он установлен. Примеры:
bobby:~# rpm -q lynx lynx-2.8.1-5 bobby:~# rpm -q seyon package seyon is not installed bobby:~# _
Маленькие и заглавные буквы в именах пакетов различаются. Поскольку часто не помнишь точное имя пакета (и уж тем более, какие буквы там на каком регистре), можно воспользоваться командой rpm -qa (Query All packages — показать все пакеты) в сочетании с командой grep :
bobby:~# rpm -qa | grep -i after AfterStep-1.5-0.7 AfterStep-APPS-1.5-0.3 bobby:~# _
