Get info about installed and remote packages with pacman

I’m using pacman 5.0.1 on Arch Linux and I’d like to get information about packages installed on my machine as well as packages in the remote repositories.

Information should include a description of the package, its size, and its build date.

Asked By: Matthias Braun

||

Using --info

Taking vi as an example, to get information about its locally installed package use

pacman -Q --info vi

This produces

Name            : vi
Version         : 1:070224-2
Description     : The original ex/vi text editor
Architecture    : x86_64
URL             : http://ex-vi.sourceforge.net/
Licenses        : custom:ex
Groups          : base
Provides        : None
Depends On      : ncurses
Optional Deps   : s-nail: used by the preserve command for notification [installed]
Required By     : None
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 290.00 KiB
Packager        : Evangelos Foutras <evangelos@foutrelis.com>
Build Date      : Sun 06 Sep 2015 09:34:15 PM CEST
Install Date    : Mon 03 Oct 2016 07:18:13 PM CEST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature

Alternatively use the shorter -i option:

pacman -Qi vi

To only get the value of a specific package property, let’s say the description, there’s good old grep to filter the output:

pacman -Qi vi | grep -Po '^Descriptions*: K.+'

Which prints

The original ex/vi text editor

A short explanation of the grep command above:

  • -P activates Perl-compatible regular expressions
  • -o print only the matched parts of a matching line, not the whole line
  • ^Descriptions*: K.+ is the regex: The line must start with "Description" followed by any number of whitespace characters, followed by ": ". Then:
    • K resets the starting point of the match. The matched characters starting with "Description" are not included in the final match
    • Finally, .+ matches everything afterwards, which is the package description

Here’s a general answer on how to remove known prefixes from lines.


Getting information from the remote repository works similar:

pacman -Si vi

When you only know parts of the package’s name, use the -s option:

pacman -Ss jdk

To find out which packages depend on a certain package — for example if you’re wondering why a package exists on your system — you can use pactree:

pactree -r intel-media-driver

which produces a nice dependency tree:

intel-media-driver
└─intel-media-sdk
  └─ffmpeg
    ├─electron6
    │ └─code
    ├─firefox
    ├─freerdp
    │ └─wlroots
    │   └─sway
    ├─qt5-webengine
    │ └─python2-pyqtwebengine
    │   └─calibre
    ├─unpaper
    │ └─ocrmypdf
    ├─vlc
    └─wf-recorder-git

Minimal package browser

Combining the previous commands with fzf allows for a minimal textual package browser.

For local packages:

cmd='(pacman -Qi {}; pactree -r {})'; pacman -Q --quiet | fzf --preview "$cmd"

For remote packages:

cmd='pacman -Si {2}'; pacman -S --list | fzf --preview "$cmd"

You can scroll the preview with Shift+ and Shift+.

To open the preview in your editor with Enter, change the command to:

fzf --preview "$cmd" --bind "enter:execute($EDITOR <($cmd))"

Here the contents of the preview are passed to your editor using process substitution.

Answered By: Matthias Braun
Categories: Answers Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.