# Command line: pacman

Date: 2021-06-08 15:00:04 +08:00Date modified: 2021-11-06 12:12:06 +08:00

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}`)

## Backlinks

- Arch Linux