There are situations where you have several programs for the same purpose or
when you want to call a program by a different name.
One such program is neovim, with the binary's name
nvim. I'm using it of
course as a drop in replacement of
vim, alas I want to call it by that name.
A natural way to accomplish this might be the creation of an alias in your shell
alias vim='nvim ', but this alias is only valid for the user, not
system wide. Therefore it is not available when called with
For this reason (and many more) Debian introduced the concept of
update-alternative. This, shortly spoken, allows for system wide aliases and
can be created with
update-alternative --install link name path priority. But
I'm always kind of confused what those parameters mean. So, here's a short
- link: The fully qualified path to the alias name, which should be created
- name: The short name to call the binary
- path: The fully qualified path to the actual binary
- priority: In case there are several alternatives for this link/name you can choose a priority, how import this entry is.
As an example for neovim
sudo update-alternatives /usr/bin/vim vim /usr/bin/nvim 50
This means, that there should be a link under
/usr/bin/vim that links to the
real binary at
/usr/bin/nvim and can be called by the short name
priority 50 is some magic number I'm using, you can choose for your self.
Another example: fd on Ubuntu
find alternative fd can be install via
apt on recent Ubuntu versions. But as the name
fd was already blocked by a
different package, the binary's name is
fdfind. To create a system wide alias
fd you can issue the following:
sudo update-alternatives --install /usr/bin/fd fd /usr/bin/fdfind 50
This creates at
/usr/bin/fd a link to the binary
/usr/bin/fdfind which can
be called with
fd. The great advantage to an alias is, that I can now also use
sudo fd without any further configuration.