Arch Linux Package Management

⌂ home      ⇧ one level up
Sun May 23, 2021 · 1097 words · 6 min
Tags :  shell


Arch Linux comes with a powerful package manager called pacman. Often new users take time to figure out its commands because it does not have the usual 'obvious' commands like apt. So here is a short post about pacman commands.

Note : All pacman commands need to be run with superuser privileges. You need to prepend the commands with sudo for them to work. For the sake of brevity, I have omitted sudo.

Installing Packages

Download and Install

-S flag asks pacman to synchronize packages.

pacman -S package1 package2 package3

will download install specified packages along with their necessary dependencies.

Selecting Repo in Case of Multiple Providers

By default, package is searched in repos in the order they are listed in /etc/pacman.conf.

In case a package is available from more than one source, then you can specify the repo name before package name to select the repo you want to download the package from. For example, I am using Endeavour OS, with Chaotic AUR added to my repo list. So, I can get the polybar package from two sources - EndeavourOS reop and Chaotic AUR repo. Since Endeavour OS repo has a preference in my pacman.conf, pacman will download polybar from that repo. However, if I want to download it from Chaotic AUR, I can run the following command.

pacman -S chaotic-aur/polybar

Updating Packages

pacman -Syu

will download new package database and then install the packages that have new updates available. This will include your kernel and other core packages too so make sure you have backups ready in case something goes wrong. Timeshift is a popular backup tool.

Searching For a Package

pacman -Ss search terms

will search for the supplied terms and provide you with a list of matching entries.

Download But Don't Install

You may want to download packages, but not install them right away. This can be done by using the -w flag with one of the sync commands.

pacman -Sw reflector   # downloads reflector but doesn't install it
pacman -Syuw   # downloads available updates but doesn't install them

About -Syy, -Sy and -Syuu

I edited this post and added this section because this deserves some attention. New users often use -Syyu to update packages. This is not a good practice, since if you frequently update, it will put extra load on the mirrors.

-Sy will update only those repos that are outdated. -Syy will force update all repos even if they are up to date. So avoid using -Syy. It is meant to be used in case your packaged database is corrupted or has some other issue.

Similarly, -Syuu will force package version to be in sync with the repo. In case your mirror has an outdated version of a package, it will be forcefully downgraded. Use -Syu to update packages.

And finally, never use -Sy alone. On Arch Linux, partial upgrades are not supported. If you do -Sy and then install a package, you will run into a case of partial upgrade and that may lead to problems.

In short, use -S to install and -Syu to update.

Details for a package

pacman -Si package-name

will show details for the supplied package name.

Removing packages

Remove a Package

pacman -R package1 package2 package3

will remove the specified packages.

Remove along with unneeded dependencies

pacman -Rs package1 package2 package3

-s flag instructs pacman to remove any dependencies of the specified packages, that are no longer required by any other package on the system.

Removing groups of packages

pacman -Rsu gnome

will remove the gnome group, but preserve any packages that are required by one or more packages installed on the system.

Query commands

List of installed packages

pacman -Q

will output the list of installed packages along with their versions.

List packages no longer needed

If you remove packages without using the -s command, then unneeded dependencies can pile up on your system. You can list them with the following command

pacman -Qdtq

To uninstall them, simply pipe them to pacman -Rs in with the following command

pacman -Qdtq | pacman -Rs -

Packages no longer part of any repository

Sometimes, when a package is no longer maintained, it is removed from repositories. You may want to remove them since they are most certainly no longer required

pacman -Qm   # list foreign packages
pacman -Qmq | pacman -Rs -    # remove foreign packages

Details for a package

pacman -Qi package-name

will display information for a the supplied package name. Note that this works only for installed packages.

Know owner of a file

In case a system file is damaged, reinstalling the relevant package may help you fix it. In such case, you need to know which package owns the file in question.

pacman -Qo /usr/bin/zsh

This command tells me package that owns the file I specified.

List explicitly installed packages

To get the list of package installed explicitly, meaning they are not installed as dependencies, run the following command

pacman -Qe

The "explicitly installed" tag can be modified as described here.

List packages installed as dependency

To get the packages that were installed as a dependency, run the following command

pacman -Qd

Again, this tag can be modified as described here.

Verify packages

pacman -Qk

This will check if all the files for the installed packages are available on the system.

Database commands

Mark a package as explicitly installed

pacman -D --asexplicit package-name

This will mark the package as explicitly installed and this package won't be considered when you run pacman -Qdtq or remove commands unless you explicitly specify the package name as a candidate for removal.

Mark a package as dependency

pacman -S --asdeps package-name

Works as totally reverse of the previous command. Specified package will be considered for removal and also as unneeded dependency if no package depends on it.

File commands

List files installed by a package

pacman -Fl package-name

will show the list of files that a package will install onto your system.

Search for file or filepaths

pacman -F filename

will search for filename and list the packages that provide a file by that name. This is specially useful when I need to know which package provides a specific header file I need to use.

-F only accepts complete filenames, without path. To do a regex search, with filepaths and partial names, use the -x flag.

pacman -Fx path/to/file

blog · about · resume · github · kde invent · endeavour · twitter · email · home