Files
it-know-how/Linux/BASH Basics/tar.md
T

355 lines
5.8 KiB
Markdown

# tar - Archive erstellen und Software installieren
Der `tar`-Befehl (tape archive) erstellt und entpackt Archive. Oft in Kombination mit Kompression (gzip, bzip2, xz).
## Grundsyntax
```bash
tar [OPTIONEN] [ARCHIV] [DATEIEN...]
```
## Archive erstellen
### Einfaches Archiv (unkomprimiert)
```bash
tar -cf archiv.tar verzeichnis/
```
- `-c` = create (erstellen)
- `-f` = file (Dateiname)
### Mit gzip-Kompression (.tar.gz)
```bash
tar -czf archiv.tar.gz verzeichnis/
```
- `-z` = gzip
### Mit bzip2-Kompression (.tar.bz2)
```bash
tar -cjf archiv.tar.bz2 verzeichnis/
```
- `-j` = bzip2
### Mit xz-Kompression (.tar.xz)
```bash
tar -cJf archiv.tar.xz verzeichnis/
```
- `-J` = xz (beste Kompression)
### Mit Fortschrittsanzeige
```bash
tar -czf archiv.tar.gz verzeichnis/ -v
```
- `-v` = verbose (Details anzeigen)
## Archive entpacken
### Automatische Kompressionserkennung
```bash
tar -xf archiv.tar.gz
```
- `-x` = extract (entpacken)
### In bestimmtes Verzeichnis
```bash
tar -xf archiv.tar.gz -C /ziel/verzeichnis
```
### Mit Fortschrittsanzeige
```bash
tar -xvf archiv.tar.gz
```
## Archiv-Inhalt anzeigen
```bash
tar -tf archiv.tar.gz
```
- `-t` = list (auflisten)
Mit Details:
```bash
tar -tvf archiv.tar.gz
```
## Praktische Beispiele
### Backup erstellen
```bash
tar -czf backup-$(date +%Y%m%d).tar.gz /home/user/dokumente
```
### Bestimmte Dateien ausschließen
```bash
tar -czf archiv.tar.gz --exclude='*.tmp' --exclude='.git' verzeichnis/
```
### Nur bestimmte Dateien hinzufügen
```bash
tar -czf logs.tar.gz /var/log/*.log
```
### Zu bestehendem Archiv hinzufügen
```bash
tar -rf archiv.tar neue_datei.txt
```
**Hinweis:** Funktioniert nur bei unkomprimierten Archiven!
### Einzelne Datei aus Archiv extrahieren
```bash
tar -xzf archiv.tar.gz pfad/zur/datei.txt
```
### Archiv auf andere Maschine übertragen
```bash
tar -czf - verzeichnis/ | ssh user@server "cd /ziel && tar -xzf -"
```
## Dateirechte bewahren
```bash
tar -czpf archiv.tar.gz verzeichnis/
```
- `-p` = preserve permissions
Als Root entpacken und Eigentümer bewahren:
```bash
sudo tar -xpf archiv.tar.gz
```
## Inkrementelles Backup
```bash
tar -czf backup-full.tar.gz -g snapshot.file verzeichnis/
tar -czf backup-incr.tar.gz -g snapshot.file verzeichnis/
```
- `-g` = incremental (inkrementell)
## Geschwindigkeit vs. Kompression
| Format | Geschwindigkeit | Kompression | Empfehlung |
|--------|----------------|-------------|------------|
| `.tar` | Sehr schnell | Keine | Lokale Kopien |
| `.tar.gz` | Schnell | Gut | Standard |
| `.tar.bz2` | Mittel | Besser | Archivierung |
| `.tar.xz` | Langsam | Beste | Langzeit-Archiv |
## Fehler vermeiden
### Führenden Slash entfernen
```bash
tar -czf archiv.tar.gz --absolute-names /home/user/dokumente # Mit /
tar -czf archiv.tar.gz -C /home/user dokumente # Ohne /
```
Zweite Variante ist sicherer beim Entpacken.
### Große Archive
Prüfe Speicherplatz vorher:
```bash
du -sh verzeichnis/
df -h .
```
### Testen vor Löschen
```bash
tar -czf backup.tar.gz daten/
tar -tzf backup.tar.gz | head # Inhalt prüfen
# Erst dann löschen:
rm -rf daten/
```
## Mit Verschlüsselung
```bash
# Erstellen und verschlüsseln
tar -czf - verzeichnis/ | gpg -c > archiv.tar.gz.gpg
# Entschlüsseln und entpacken
gpg -d archiv.tar.gz.gpg | tar -xzf -
```
## Software aus tar.gz installieren
Eine `.tar.gz`-Datei kann verschiedene Inhalte haben:
1. **Quellcode** → muss kompiliert werden
2. **Kompilierte Binaries** → nur entpacken und ausführen
3. **Paket für Distribution** → mit Paketmanager installieren
### Archiv entpacken und untersuchen
```bash
tar -xvzf paket.tar.gz
cd paket
ls -la
```
Prüfe immer `README`, `INSTALL` oder `INSTALL.txt`:
```bash
cat README
cat INSTALL
```
### Installation aus Quellcode
**Voraussetzungen installieren:**
Debian/Ubuntu:
```bash
sudo apt install build-essential
```
Fedora:
```bash
sudo dnf groupinstall "Development Tools"
```
**Standard-Kompilierung (autotools):**
```bash
./configure
make
sudo make install
```
**CMake-basierte Projekte:**
```bash
mkdir build
cd build
cmake ..
make
sudo make install
```
### Installation von fertigen Binaries
Wenn das Archiv fertige Programme enthält:
```bash
chmod +x programmname
./programmname
```
Permanent installieren nach `/usr/local/bin`:
```bash
sudo cp programmname /usr/local/bin/
```
Oder nach `~/.local/bin` (ohne sudo):
```bash
mkdir -p ~/.local/bin
cp programmname ~/.local/bin/
```
Stelle sicher, dass `~/.local/bin` im PATH ist:
```bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```
### Deinstallation
Bei selbst kompilierten Programmen:
```bash
cd paket/
sudo make uninstall
```
Falls `make uninstall` nicht verfügbar ist:
**Mit checkinstall (empfohlen):**
```bash
sudo apt install checkinstall # Debian/Ubuntu
# Statt "sudo make install"
sudo checkinstall
# Später deinstallieren wie normales Paket
sudo apt remove paketname
```
**Manuell:**
```bash
# Liste der installierten Dateien erstellen
sudo make install > install.log 2>&1
# Zum Deinstallieren Dateien aus log löschen
```
### Beispiel-Workflow
```bash
# 1. Entpacken
tar -xzf programm-1.0.tar.gz
cd programm-1.0
# 2. Dokumentation lesen
cat README
cat INSTALL
# 3. Konfigurieren und kompilieren
./configure --prefix=/usr/local
make
# 4. Optional: Tests ausführen
make check
# 5. Installieren
sudo make install
# 6. Testen
which programmname
programmname --version
```
### Typische Verzeichnisse
Nach `make install` werden Dateien meist hier installiert:
- `/usr/local/bin/` - Programme
- `/usr/local/lib/` - Bibliotheken
- `/usr/local/share/` - Daten/Dokumentation
- `/usr/local/etc/` - Konfiguration
## Siehe auch
- [[rsync]] - Alternative für Backups
- [[find]] - Dateien für Archivierung finden
- [[grep]] - Archiv-Inhalte durchsuchen
- [[Dateiberechtigungen]] - Rechte in Archiven bewahren
- [[ls]] - Archive anzeigen