Skip to content

Commit 5f0a315

Browse files
committed
feat: Add more package management content.
1 parent ccd7e08 commit 5f0a315

2 files changed

Lines changed: 415 additions & 55 deletions

File tree

Lines changed: 374 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,374 @@
1+
---
2+
title: Pakete abfragen
3+
sidebar:
4+
order: 3
5+
---
6+
7+
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
8+
9+
Die Paketverwaltung kann weit mehr als nur installieren und entfernen. Mit gezielten
10+
Abfragen lassen sich Fragen beantworten wie: *Welchem Paket gehört diese Datei?
11+
Was braucht dieses Paket? Welche Pakete hängen davon ab?*
12+
13+
## Dateityp identifizieren
14+
15+
Bevor man ein Paket sucht, lohnt ein Blick auf den Befehl selbst: Ist er kompiliert
16+
oder ein Shell-Skript? Das `file`-Kommando verrät es:
17+
18+
```bash
19+
which mtr
20+
# /usr/sbin/mtr
21+
22+
file /usr/sbin/mtr
23+
# /usr/sbin/mtr: ELF 64-bit LSB shared object, x86-64, dynamically linked ...
24+
25+
file /usr/sbin/ifcfg
26+
# /usr/sbin/ifcfg: POSIX shell script, ASCII text executable
27+
```
28+
29+
Ein **dynamisch gelinkes Binary** (`dynamically linked`) hat Abhängigkeiten zu Bibliotheken
30+
— es lässt sich nicht einfach auf ein anderes System kopieren. Ein **Shell-Skript**
31+
hingegen ist oft portierbar, solange die verwendeten Befehle vorhanden sind.
32+
33+
<Aside type="tip">
34+
`which befehl` findet den vollständigen Pfad eines Befehls im `$PATH` — wichtig, weil
35+
`rpm -qf befehl` (ohne Pfad) scheitert: rpm sucht nach einer Datei namens `befehl` im
36+
aktuellen Verzeichnis, nicht im PATH.
37+
38+
```bash
39+
# Falsch — sucht /root/nslookup:
40+
rpm -qf nslookup
41+
42+
# Richtig:
43+
rpm -qf $(which nslookup)
44+
# bind-utils-9.11.13-6.el8.x86_64
45+
```
46+
</Aside>
47+
48+
## Welchem Paket gehört eine Datei?
49+
50+
Der häufigste Anwendungsfall: eine Datei oder ein Befehl ist vorhanden — aber woher kommt sie?
51+
52+
<Tabs>
53+
<TabItem label="RHEL/Fedora">
54+
```bash
55+
rpm -qf /usr/bin/find
56+
# findutils-4.8.0-5.el9.x86_64
57+
58+
rpm -qf /etc/ssh/sshd_config
59+
# openssh-server-8.7p1-34.el9.x86_64
60+
```
61+
62+
Für Dateien, die **noch nicht installiert** sind (Suche im Repository):
63+
```bash
64+
dnf provides /usr/bin/find
65+
dnf provides "*/sshd_config" # Glob möglich
66+
```
67+
</TabItem>
68+
<TabItem label="Debian/Ubuntu">
69+
```bash
70+
dpkg -S /usr/bin/find
71+
# findutils: /usr/bin/find
72+
73+
dpkg -S /etc/ssh/sshd_config
74+
# openssh-server: /etc/ssh/sshd_config
75+
```
76+
77+
Für noch nicht installierte Pakete (benötigt `apt-file`):
78+
```bash
79+
sudo apt install apt-file
80+
sudo apt-file update
81+
apt-file search /usr/bin/find
82+
apt-file search sshd_config
83+
```
84+
</TabItem>
85+
<TabItem label="openSUSE">
86+
```bash
87+
rpm -qf /usr/bin/find # installierte Pakete (rpm-Backend)
88+
89+
zypper search --provides /usr/bin/find
90+
zypper what-provides /usr/bin/find
91+
```
92+
</TabItem>
93+
</Tabs>
94+
95+
## Dateien eines Pakets auflisten
96+
97+
Welche Dateien installiert ein bestimmtes Paket auf dem System?
98+
99+
<Tabs>
100+
<TabItem label="RHEL/Fedora">
101+
```bash
102+
rpm -ql nginx # installiertes Paket
103+
rpm -ql nginx | grep bin # nur ausführbare Dateien
104+
105+
# Noch nicht installiertes Paket aus dem Repository:
106+
dnf repoquery -l nginx
107+
```
108+
</TabItem>
109+
<TabItem label="Debian/Ubuntu">
110+
```bash
111+
dpkg -L nginx # installiertes Paket
112+
dpkg -L nginx | grep bin
113+
114+
# Noch nicht installiertes Paket:
115+
apt-file list nginx
116+
```
117+
</TabItem>
118+
<TabItem label="openSUSE">
119+
```bash
120+
rpm -ql nginx # installiertes Paket
121+
zypper info --file-list nginx
122+
```
123+
</TabItem>
124+
</Tabs>
125+
126+
## Paket-Metadaten anzeigen
127+
128+
Version, Beschreibung, Größe, Installationsdatum — all das steckt in den Paket-Metadaten:
129+
130+
<Tabs>
131+
<TabItem label="RHEL/Fedora">
132+
```bash
133+
rpm -qi nginx
134+
# Name : nginx
135+
# Version : 1.24.0
136+
# Release : 3.el9
137+
# Architecture: x86_64
138+
# Install Date: ...
139+
# Size : 1234567
140+
# Summary : A high performance web server ...
141+
142+
dnf info nginx # ähnlich, aber auch für nicht installierte Pakete
143+
```
144+
145+
Changelog eines Pakets anzeigen:
146+
```bash
147+
rpm -q --changelog nginx | head -30
148+
dnf repoquery --changelog nginx
149+
```
150+
</TabItem>
151+
<TabItem label="Debian/Ubuntu">
152+
```bash
153+
apt show nginx
154+
dpkg-query -s nginx # nur für installierte Pakete
155+
```
156+
</TabItem>
157+
<TabItem label="openSUSE">
158+
```bash
159+
zypper info nginx
160+
rpm -qi nginx
161+
```
162+
</TabItem>
163+
</Tabs>
164+
165+
## Abhängigkeiten
166+
167+
### Was braucht ein Paket?
168+
169+
<Tabs>
170+
<TabItem label="RHEL/Fedora">
171+
```bash
172+
rpm -q --requires nginx
173+
dnf repoquery --requires nginx
174+
dnf repoquery --requires --resolve nginx # aufgelöst als Paketnamen
175+
```
176+
</TabItem>
177+
<TabItem label="Debian/Ubuntu">
178+
```bash
179+
apt-cache depends nginx
180+
dpkg-query -s nginx | grep Depends
181+
```
182+
</TabItem>
183+
<TabItem label="openSUSE">
184+
```bash
185+
zypper info --requires nginx
186+
rpm -q --requires nginx
187+
```
188+
</TabItem>
189+
</Tabs>
190+
191+
### Welche Pakete hängen von einem Paket ab?
192+
193+
Nützlich, bevor ein Paket entfernt wird — oder um zu verstehen, warum es nicht entfernt werden kann:
194+
195+
<Tabs>
196+
<TabItem label="RHEL/Fedora">
197+
```bash
198+
rpm -q --whatrequires openssl-libs
199+
dnf repoquery --whatrequires openssl-libs
200+
```
201+
</TabItem>
202+
<TabItem label="Debian/Ubuntu">
203+
```bash
204+
apt-cache rdepends libssl3
205+
apt-cache rdepends --installed libssl3 # nur installierte
206+
```
207+
</TabItem>
208+
<TabItem label="openSUSE">
209+
```bash
210+
zypper search --requires openssl
211+
rpm -q --whatrequires libopenssl1_1
212+
```
213+
</TabItem>
214+
</Tabs>
215+
216+
## Installationsverlauf
217+
218+
### Zuletzt installierte Pakete
219+
220+
<Tabs>
221+
<TabItem label="RHEL/Fedora">
222+
```bash
223+
rpm -qa --last # alle Pakete, neueste zuerst
224+
rpm -qa --last | head -20 # die letzten 20
225+
226+
dnf history # dnf-Transaktionen
227+
dnf history info 5 # Details zu Transaktion #5
228+
dnf history undo 5 # Transaktion rückgängig machen
229+
```
230+
</TabItem>
231+
<TabItem label="Debian/Ubuntu">
232+
```bash
233+
grep " install " /var/log/dpkg.log | tail -20
234+
grep " install " /var/log/dpkg.log.1 >> /tmp/install.log # ältere Logs
235+
236+
cat /var/log/apt/history.log | tail -50
237+
```
238+
</TabItem>
239+
<TabItem label="openSUSE">
240+
```bash
241+
rpm -qa --last | head -20
242+
zypper history
243+
```
244+
</TabItem>
245+
</Tabs>
246+
247+
## Paket-Integrität prüfen
248+
249+
Hat sich eine Datei eines installierten Pakets verändert? Nützlich bei Verdacht auf
250+
Manipulation oder fehlerhafte Konfiguration:
251+
252+
<Tabs>
253+
<TabItem label="RHEL/Fedora">
254+
```bash
255+
rpm -V nginx # Paket prüfen
256+
rpm -Va # alle Pakete prüfen (dauert lange)
257+
```
258+
259+
Ausgabe-Codes:
260+
```
261+
S — Dateigröße verändert
262+
M — Dateirechte verändert
263+
5 — MD5-Prüfsumme abweichend
264+
T — Zeitstempel verändert
265+
c — Konfigurationsdatei (Abweichungen sind normal)
266+
```
267+
268+
Ein leere Ausgabe bedeutet: alles in Ordnung.
269+
</TabItem>
270+
<TabItem label="Debian/Ubuntu">
271+
```bash
272+
sudo debsums nginx # benötigt: apt install debsums
273+
sudo debsums -s nginx # nur Fehler anzeigen
274+
sudo debsums -a # alle Pakete
275+
```
276+
</TabItem>
277+
<TabItem label="openSUSE">
278+
```bash
279+
rpm -V nginx
280+
zypper verify nginx
281+
```
282+
</TabItem>
283+
</Tabs>
284+
285+
<Aside type="tip">
286+
Konfigurationsdateien (z. B. `/etc/nginx/nginx.conf`) werden bei `rpm -V` mit `c` markiert
287+
und sind typischerweise verändert — das ist beabsichtigt. Beunruhigend sind Abweichungen
288+
bei Programmdateien in `/usr/bin` oder `/usr/sbin`.
289+
</Aside>
290+
291+
## Skripte in einem Paket
292+
293+
RPM-Pakete können Shell-Skripte enthalten, die bei Installation oder Deinstallation
294+
ausgeführt werden (`%pre`, `%post`, `%preun`, `%postun`):
295+
296+
```bash
297+
rpm -q --scripts nginx
298+
```
299+
300+
<Aside type="note">
301+
Dies ist vor allem bei der Fehlersuche nützlich: Wenn eine Installation hängt oder
302+
ein Dienst nach der Installation nicht startet, lohnt es sich, die Post-Install-Skripte
303+
zu prüfen. Ein direktes Äquivalent für apt gibt es nicht — Debian-Pakete verwenden
304+
`preinst`, `postinst`, `prerm`, `postrm`-Dateien, die in `/var/lib/dpkg/info/` liegen.
305+
</Aside>
306+
307+
## Aus welchem Repository stammt ein Paket?
308+
309+
Ein Kollege nutzt ein Tool, das im Standard-Repository nicht verfügbar ist. Woher hat er es?
310+
311+
<Tabs>
312+
<TabItem label="RHEL/Fedora">
313+
```bash
314+
dnf list hwinfo
315+
# Installed Packages
316+
# hwinfo.x86_64 21.47-9.el8 @epel
317+
318+
# Das @ vor dem Repository-Namen zeigt die Quelle
319+
# Alle installierten Pakete mit ihrer Quelle:
320+
dnf list installed | grep @epel
321+
```
322+
323+
Repository-Konfiguration anzeigen:
324+
```bash
325+
dnf repolist # aktive Repositories
326+
dnf repolist --all # alle (auch deaktivierte)
327+
dnf repoinfo epel # Details zu einem Repository
328+
```
329+
</TabItem>
330+
<TabItem label="Debian/Ubuntu">
331+
```bash
332+
# Aus welchem Repository/Pocket stammt ein Paket?
333+
apt-cache policy nginx
334+
# nginx:
335+
# Installed: 1.24.0-1
336+
# Candidate: 1.24.0-1
337+
# Version table:
338+
# *** 1.24.0-1 500
339+
# 500 http://deb.debian.org/debian bookworm/main amd64
340+
```
341+
342+
Repository-Liste anzeigen:
343+
```bash
344+
apt-cache policy # alle konfigurierten Repos mit Prioritäten
345+
grep -r "^deb " /etc/apt/sources.list /etc/apt/sources.list.d/
346+
```
347+
</TabItem>
348+
<TabItem label="openSUSE">
349+
```bash
350+
zypper info hwinfo # zeigt "Repository" in der Ausgabe
351+
352+
zypper repos # alle konfigurierten Repositories
353+
zypper repos --details # mit URLs und Prioritäten
354+
```
355+
</TabItem>
356+
</Tabs>
357+
358+
## Alle installierten Pakete auflisten und filtern
359+
360+
```bash
361+
# RHEL/Fedora
362+
dnf list installed
363+
dnf list installed | grep nginx
364+
rpm -qa | sort | less
365+
366+
# Debian/Ubuntu
367+
apt list --installed
368+
dpkg -l | grep nginx
369+
dpkg -l | grep "^ii" # nur vollständig installierte
370+
371+
# openSUSE
372+
zypper search --installed-only
373+
rpm -qa | sort
374+
```

0 commit comments

Comments
 (0)