terraform von HashiCorp ist das Standard-Werkzeug für Infrastructure as Code: Man beschreibt Server, Netzwerke und Cloud-Ressourcen in deklarativen Konfigurationsdateien (HCL) und terraform erstellt, ändert und löscht sie automatisch — reproduzierbar und versionierbar.
Der Arbeitsablauf: init, plan, apply
terraform init
terraform plan
terraform apply
terraform init— initialisiert das Projekt und lädt die benötigten Provider-Plugins (z.B. AWS, Hetzner, Proxmox)terraform plan— zeigt den geplanten Änderungen im Vergleich zum aktuellen Zustand (Dry-Run, ändert nichts)terraform apply— führt die geplanten Änderungen aus; nach Rückfrageyesbestätigen
Eine minimale Konfiguration (main.tf) sieht so aus:
resource "local_file" "beispiel" {
content = "Hallo Terraform"
filename = "${path.module}/hallo.txt"
}
Zustand verwalten
terraform state list
terraform show
Terraform führt Buch über jede verwaltete Ressource im State (Datei terraform.tfstate). terraform state list zeigt alle verwalteten Ressourcen, terraform show den kompletten Zustand im Detail. Der State gehört in ein Remote-Backend (z.B. S3 oder GitLab), wenn mehrere Personen arbeiten.
Qualität sichern
terraform fmt
terraform validate
terraform fmt formatiert alle .tf-Dateien einheitlich, terraform validate prüft die Syntax und die interne Konsistenz — beides ideal vor jedem Commit.
Ressourcen entfernen
terraform destroy
terraform destroy entfernt alle in der Konfiguration beschriebenen Ressourcen. Vorsicht: Das löscht echte Server und Daten! terraform plan -destroy zeigt vorher, was entfernt würde.
Praxis-Tipp
Variablen gehören in variables.tf (Werte in terraform.tfvars oder als TF_VAR_<name>-Umgebungsvariablen). Geheime Werte nie im Code ablegen — dafür gibt es ansible-vault oder Secrets-Manager der Cloud. Die deklarative Arbeitsweise (Soll-Zustand beschreiben, Tool gleicht ab) ist dieselbe wie bei kubectl apply.
ansible automatisiert die Konfiguration von Servern — ohne Agent auf den Zielsystemen. Ansible verbindet sich per SSH (unter Windows per WinRM), führt Aufgaben (Tasks) aus und bringt die Systeme in den gewünschten Zustand. Playbooks sind in YAML geschrieben und dadurch leicht lesbar.
Ad-hoc-Befehle: Schnell etwas prüfen
ansible all -m ping
ansible all -m command -a "uptime"
ansible all -m ping testet die Verbindung zu allen Hosts des Inventars. Mit -m command -a "uptime" führt man einen einzelnen Befehl auf allen Servern aus — ohne ein Playbook schreiben zu müssen.
ansible all -m apt -a "name=nginx state=latest" -b— Pakete installieren (-b= sudo)ansible all -m service -a "name=nginx state=restarted" -b— Dienste neu starten
Das Inventar
[webserver]
web1.example.com
web2.example.com
Die Datei hosts (Inventar) gruppiert die Server, auf denen Ansible arbeitet. Gruppen wie [webserver] oder [datenbank] erlauben, Befehle und Playbooks gezielt nur auf bestimmte Maschinen anzuwenden.
Playbooks: Der Standardweg
ansible-playbook playbook.yml
Ein Playbook beschreibt den Soll-Zustand deklarativ — Ansible prüft, was schon erfüllt ist, und ändert nur, was nötig ist (idempotent):
---
- hosts: webserver
become: yes
tasks:
- name: Nginx installieren
apt:
name: nginx
state: present
ansible-playbook playbook.yml --check— Probelauf, ohne etwas zu ändernansible-playbook playbook.yml --syntax-check— nur Syntax prüfenansible-playbook playbook.yml --limit web1.example.com— nur einen Host ansprechenansible-playbook playbook.yml -v— ausführliche Ausgabe (-vvvfür Debugging)
Geheimnisse verschlüsseln: ansible-vault
ansible-vault encrypt group_vars/all.yml
ansible-playbook playbook.yml --ask-vault-pass
ansible-vault encrypt verschlüsselt Dateien mit Passwörtern oder Schlüsseln — damit können Secrets (API-Keys, Zugangsdaten) sicher im Repository liegen. Beim Lauf werden sie per --ask-vault-pass oder Vault-Key-Datei entschlüsselt.
Rollen und Galaxy
ansible-galaxy init meine-rolle
ansible-galaxy install geerlingguy.nginx
Rollen bündeln Tasks, Templates und Variablen zu wiederverwendbaren Bausteinen. ansible-galaxy lädt fertige Rollen aus der Ansible Galaxy Bibliothek — so bekommt man bewährte Konfigurationen für Webserver, Datenbanken und mehr.
Praxis-Tipp
Immer mit --check starten, Host-Variablen in group_vars/ und host_vars/ organisieren und Playbooks versionieren — am besten mit git. Die SSH-Grundlagen dazu stehen im Artikel ssh, scp und rsync, die Konfigurations-Syntax stammt aus YAML.
Composer ist der Standard-Paketmanager für PHP. Er lädt Bibliotheken aus Packagist (dem zentralen Paket-Repository) in ein Projekt und verwaltet deren Versionen in composer.json und composer.lock. Die Installation erfolgt global über das Installationsskript von getcomposer.org; anschließend steht der Befehl composer im Terminal bereit.
Grundlegende Befehle
composer install # Installiert alle Abhängigkeiten aus composer.lock
composer update # Aktualisiert Abhängigkeiten und schreibt composer.lock neu
composer require vendor/package # Fügt ein Paket hinzu (z. B. composer require guzzlehttp/guzzle)
composer remove vendor/package # Entfernt ein Paket
composer create-project vendor/package verzeichnis # Legt ein neues Projekt aus einem Template an
composer dump-autoload # Baut den Autoloader neu (nach eigenen Klassenänderungen)
composer validate # Prüft composer.json auf Korrektheit
composer outdated # Zeigt veraltete Pakete
composer audit # Prüft Pakete auf bekannte Sicherheitslücken
Praxis-Tipps
- composer.lock immer einchecken: Sie garantiert, dass alle Entwickler und Server exakt dieselben Versionen nutzen.
composer installrespektiert die Lock-Datei,composer updateverändert sie. - Global installieren:
composer global requirelegt Werkzeuge (z. B. PHP-CS-Fixer) systemweit ab; deren bin-Ordner in den PATH aufnehmen. - Autoloading: Composer erzeugt automatisch den PSR-4-Autoloader — Klassen aus dem
vendor/-Ordner stehen nachrequire 'vendor/autoload.php'sofort zur Verfügung. - Pakete suchen:
composer search begriffdurchsucht Packagist direkt aus der Kommandozeile.
Verwandte Grundlagen: npm und pip: Paketverwaltung, git-Befehle.
Assembly – die Sprache der CPU
Assembly ist die maschinennahe Programmiersprache: Jede Anweisung entspricht direkt einem Assembler-Befehl der CPU. Sie wird eingesetzt, wenn maximale Kontrolle über Speicher und Register gefragt ist – etwa in Betriebssystem-Kernen, Bootloadern, Treibern oder Embedded-Systemen. Der verbreitetste freie Assembler ist NASM (Netwide Assembler) für x86/x64, ergänzt um GAS (GNU Assembler, AT&T-Syntax).
Assemblieren und Linken
nasm -f elf64 prog.asm– 64-Bit-ELF-Objektdatei erzeugennasm -f bin prog.asm -o prog.bin– reines Binärformat (Bootloader)gcc -no-pie -o prog prog.o– Objektdatei linken (ohne PIE für einfache Adressen)ld -o prog prog.o– direkt mit dem Linkeras prog.s -o prog.o/objdump -d prog– GAS assemblieren / Disassembly ansehen
Register, Speicher und der Stack
section .data
msg db "Hallo", 10
len equ $ - msg
section .text
global _start
_start:
mov rax, 1 ; syscall write
mov rdi, 1 ; stdout
mov rsi, msg ; Adresse des Strings
mov rdx, len ; Laenge
syscall
mov rax, 60 ; syscall exit
xor rdi, rdi ; Rueckgabewert 0
syscall
mov– Daten kopieren:mov rax, 1,mov [addr], rbxadd/sub/imul/idiv– Arithmetik,inc/dec– Zählercmp– Vergleich,jmp/je/jne/jg/jl– Sprüngepush/pop– Werte auf den Stack legen/holencall/ret– Unterprogramm aufrufen/zurückkehrenlea– Adresse berechnen,and/or/xor/not– Bitoperationensyscall– Linux-Systemaufruf (Nummer inrax, Argumente inrdi,rsi,rdx)section .data/.bss/.text– Daten, uninitialisierte Daten, Codedb/dw/dd– Bytes/Wörter/Doppelwörter definieren,equ– Konstante
Die CPU-Register rax bis r15 (64-Bit) sind die „Arbeitsvariablen“ der CPU; 32-Bit-Schreibzugriffe wie eax setzen die obere Hälfte automatisch auf null.
Systemaufrufe auf Linux
Anders als bei C gibt es keine Laufzeitbibliothek: Der Aufruf des Betriebssystems läuft direkt über syscall mit der Syscall-Nummer in rax und bis zu sechs Argumenten in rdi, rsi, rdx, r10, r8, r9. Die Syscall-Tabelle findet sich in /usr/include/asm/unistd_64.h.
Verwandte Einträge: Assembler, Adresse (Speicher), Stack, Kernel, Bootloader sowie C und C++ für die höhere Systemprogrammierung.
Batch und CMD – Windows-Skripting in der Eingabeaufforderung
Batch (Dateiendung .bat oder .cmd) ist die klassische Skriptsprache der Windows-Eingabeaufforderung. Sie eignet sich für Dateioperationen, Ordner, Dienste, Netzwerk- und Automatisierungsaufgaben – der direkte Gegenpart zu Bash unter Linux. Für komplexe Aufgaben ist PowerShell die moderne Alternative.
Dateien und Verzeichnisse
dir– Inhalt auflisten,dir /s– rekursiv,dir /b– nackte Namencd/cd /d D:\– Verzeichnis wechseln (auch Laufwerk)copy a.txt b.txt– kopieren,xcopy /e /i src dst– rekursiv kopierenmove a.txt ordner\– verschieben,ren a.txt b.txt– umbenennendel *.tmp/del /s /q *.log– löschen,rmdir /s /q ordner– Ordner löschenmkdir(bzw.md) – Ordner anlegentype datei.txt– Datei anzeigen (wiecat)
System und Dienste
ipconfig/ipconfig /all– Netzwerkkonfigurationping 8.8.8.8,tracert host,netstat -ano– Netzwerkdiagnosetasklist– Prozesse,taskkill /f /im notepad.exe– Prozess beendensc query/sc config Dienst start= auto– Dienste verwaltennet user,net share,net use– Benutzer/Freigabensfc /scannow– Systemdateien prüfen,chkdsk C:– Datenträger prüfen
Skript-Grundlagen
@echo off
set NAME=Welt
echo Hallo %NAME%!
if exist C:\Windows (echo Windows vorhanden) else (echo Fehlt)
for %%f in (*.txt) do echo Datei: %%f
pause
@echo off– Befehle nicht ausgeben,set VAR=wert– Variable, Zugriff mit%VAR%if / else,for %%i in (liste) do ...– Kontrollstrukturen%1 %2– Parameter,%errorlevel%– Rückgabewert des letzten Befehlsgoto :label– Sprungmarke,call unter.bat– Unterprogramm2>nul– Fehlerausgabe unterdrücken,| findstr muster– filternremoder::– Kommentar,exit /b 0– mit Code beenden
Verwandte Einträge: PowerShell-Befehle für die moderne Shell, Bash-Befehle für Linux, Shell sowie Automatisierung.