Why /usr/bin/rename.ul has an extension?

The extension is to avoid conflict with the multitude of rename commands otherwise available on Debian. This change was made in 2007 in response to Debian bug #439647:

/usr/bin/rename is managed by the alternatives system (with Perl's version the default). util-linux 2.13~rc3-8 installs its own binary there, instead of registering it as an alternative.

In response, the util-linux rename was renamed to be rename.ul.

Even so, rename.ul syntax is so far different from the Perl variants that it's not added to the alternatives system by default (see Debian bug #439935).


As the commenters have guessed, it is probably the Debian Alternatives system in action.

If a distribution has multiple packages that contain an identically-named file, the creator of the package needs to know about it, and there needs to be a mechanism for the administrator to choose which one of them they want to use. So all the conflicting files get renamed (usually with suffixes, but this can be specified in the package metadata) and the original filename will become a symbolic link pointing to /etc/alternatives/<original filename>. That, in turn, will be another symbolic link pointing back to one of the now-renamed files.

The system administrator can use the update-alternatives tool to choose which version of the file will be pointed to by the original name. The other versions can still be reached using the new names.

The update-alternatives tool can handle "families" of things, so when e.g. you have both the traditional and OpenBSD netcat installed and use sudo update-alternatives --config nc to switch the default one way or another, the corresponding man page name will get switched too.

A common example would be /usr/bin/editor. On Debian-style systems, that's a symbolic link that other programs can use to get the "default text editor on this system, whatever it is". After a minimal installation, it is likely to default to nano, so editor example.txt will open the text file in nano, and man editor will show the man page of nano.

But if you install an editor that has a higher priority in the alternatives system, e.g. joe, then it automatically becomes the new default, so now editor example.txt will use joe instead, and man editor will also now show joe's man page. You can also use sudo update-alternatives --config editor to choose which of the installed editors you want to be the default, and once you've made a choice this way, the automatic priorities won't override it.