wiki/notebook/cli.pacman.org
2021-11-17 13:33:44 +08:00

3.6 KiB

Command line: pacman

The built-in package manager of Arch Linux (among others). This note is based from pacman v6 and above.

Subcommands

Interestingly, pacman does not have subcommands with specific options. Instead, they go with specific flags denoting a subcommand. Practically, they're just subcommands except appearing as options.

# Rather than 'pacman install podman' or something similar.
pacman -S podman

Here's what you can do with the package manager:

  • -S are concerned with syncing the local database to the remote databases.

    • -y, --refresh syncs the local database to the remote database; running with this flag alone is not recommended as the package manager will have problems.
    • -u, --sysupgrade upgrades the local database; this should be used with -y if you intend it for a proper operating system upgrade.
    • -g, --groups [GROUP] prints what packages belong to the given group
  • -Q is primarily from querying information from your installed packages ranging from listing installed packages to listing all of the files owned by a certain package.

    • -l, --list [PACKAGES...] lists the files associated with the package.
    • -i, --info [PACKAGES...] prints information about the package.
  • -F [FILENAME] are mostly query-related operations with the database. It also prints which package owns the given file.

    • -y, --refresh refreshes the database.
  • -R removes installed packages.

    • -n, --nosave removes the configuration files associated with the package; this doesn't remove files from the home directory, though.
    • -s, --recursive will recursively removes dependencies that are not used anywhere else.

You can see more of them in the "Operations" section of the manual page (i.e., pacman.1).

Examples

Welp, this is what you came for so let's go ahead.

Quickstart

It's a package manager so it's supposed to do basic package manager stuff. All of the shown commands are in longform with the shortform just commented for practical purposes.

# Search for a pacakge
# pacman -Ss podman
pacman --sync --search podman

# Install a package
# pacman -S podman
pacman --sync podman

# Uninstall a package
# pacman -Rns podman
pacman --remove --no-save --recursive podman

# Upgrade the system
# pacman -Syu
pacman --sync --refresh --upgrade

Package search selection

With everybody's favorite fuzzy finder, fzf.

pacman --sync --quiet --search pkg | fzf --prompt "Package to install > " | xargs doas pacman --sync

You can also create a search selection with all of the packages with the following one-liner.

pacman -S --list --quiet \
    | fzf --multi --prompt "Install package(s) > " \
    | xargs doas pacman -S --noconfirm

Package removal selection

Another interactive script with fzf.

pacman -Q --native --quiet | fzf --multi --prompt "Remove installed package(s) > " | xargs doas pacman -Rns --noconfirm

Related notes

  • pacman does not have a way to query packages that are not installed; for example, you cannot know what files are owned by the package unless it is installed (also you have pkgfile for that)
  • pacman also cannot view the PKGBUILD of packages that are not installed; you can use the asp tool for that (i.e., asp show ${PACKAGE})