Zoeken naar de juiste informatie

Het gebeurt iedereen: je ziet in een tutorial, een script van een collega of gewoon in je shellhistory een commando staan dat je niet kent. Je probeert het uit te voeren en krijgt command not found. Logisch antwoord: even installeren. Maar... welk package moet je dan installeren? De naam van het commando en de naam van het package komen namelijk lang niet altijd overeen.
Andersom kom je dat probleem ook tegen. Je hebt ooit iets geïnstalleerd om een commando als sar te kunnen gebruiken, en nu je het wilt opruimen weet je niet meer uit welk package het kwam. Gelukkig hoef je daar niet naar te gokken — elke pakketbeheerder kan je dat gewoon vertellen.
Je wilt een commando installeren, maar weet niet welk package het levert. Hier verschilt de aanpak een beetje per distributie.
Op de meeste Debian- en Ubuntu-systemen krijg je automatisch een hint als je een onbekend commando intikt:
$ sar
Command 'sar' not found, but can be installed with:
sudo apt install sysstat
Werkt dit niet (bijvoorbeeld in een minimale installatie of een container), dan kun je zelf zoeken met apt-file:
sudo apt install apt-file
sudo apt-file update
apt-file search bin/sar
Op Fedora en RHEL-achtige systemen gebruik je dnf provides (of het oudere repoquery):
dnf provides '*/sar'
Dit doorzoekt de metadata van alle repositories en vertelt je precies welk package het bestand sar ergens onder /usr/bin of /usr/sbin plaatst.
Op Arch Linux zoek je met pacman -F (nadat je eenmalig de bestandsdatabase hebt gedownload):
sudo pacman -Fy
pacman -F sar
In alle drie de gevallen krijg je dezelfde conclusie: sar zit in het package sysstat. Dat pakket levert trouwens ook iostat en mpstat, en de achtergronddienst die historische data verzamelt voor latere analyse.
Dit is net zo'n veelvoorkomend moment: het commando werkt prima, maar je twijfelt of je het zelf hebt geïnstalleerd, of dat het als afhankelijkheid van iets anders is meegekomen. In dat geval vraag je niet de repository, maar je eigen systeem wie de eigenaar is van dat bestand.
dpkg -S $(which sar)
# sysstat: /usr/bin/sar
rpm -qf $(which sar)
# sysstat-12.6.1-1.fc40.x86_64
pacman -Qo $(which sar)
# /usr/bin/sar is owned by sysstat 12.7.6-1
which sar zoekt het volledige pad van het commando op (bijvoorbeeld /usr/bin/sar), en de pakketbeheerder vertelt je vervolgens welk geïnstalleerd package dat bestand daar heeft neergezet. Geen giswerk, geen Google nodig.
Zodra je de packagenaam hebt, is verwijderen weer gewoon je vertrouwde commando:
sudo apt remove sysstat # Debian/Ubuntu
sudo dnf remove sysstat # Fedora/RHEL
sudo pacman -R sysstat # Arch
Let er wel op dat je niet per ongeluk iets verwijdert waar andere software van afhankelijk is. apt remove en dnf remove waarschuwen je daar netjes voor; bij pacman -R kun je dat vooraf checken met:
pacman -Qi sysstat | grep "Required By"
Staat daar iets anders dan "None", dan trek je waarschijnlijk een ander programma mee onderuit als je toch doorzet.
| Vraag | Debian/Ubuntu | Fedora/RHEL | Arch |
|---|---|---|---|
| Welk package levert commando X (nog niet geïnstalleerd)? | apt-file search | dnf provides '*/X' | pacman -F X |
| Welk package heeft dit bestand geïnstalleerd? | dpkg -S $(which X) | rpm -qf $(which X) | pacman -Qo $(which X) |
| Package verwijderen | apt remove pkg | dnf remove pkg | pacman -R pkg |
Het mooie is: dit zijn geen trucjes, dit is gewoon ingebouwde functionaliteit van elke pakketbeheerder. Je hoeft het alleen één keer te weten — en dan blijft "welke package was dat ook alweer?" voorgoed verleden tijd.
Heb jij ooit een commando ontdekt en achteraf verbaasd gestaan over welk package het meebracht?
Nog geen reacties
Reactie plaatsen