Inhaltsverzeichnis
System-Informationen über /proc
Das /proc-Dateisystem ist ein virtuelles Dateisystem, das Zugriff auf Kernel- und Prozess-Informationen bietet. Es existiert nur im RAM und ermöglicht das Auslesen von System-Informationen ohne zusätzliche Tools - nur mit cat und anderen grundlegenden Befehlen.
Voraussetzungen
- Zugriff auf die Linux-Kommandozeile
- Grundkenntnisse in Bash-Kommandos
- Verständnis von cat und less
Was ist /proc?
/proc ist ein virtuelles Dateisystem - die „Dateien“ darin sind keine echten Dateien auf der Festplatte, sondern Schnittstellen zum Kernel.
# /proc ist virtuell und verbraucht keinen Speicherplatz df -h /proc # Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf # proc 0 0 0 - /proc
CPU-Informationen
/proc/cpuinfo
Detaillierte Informationen über den Prozessor.
# Vollständige CPU-Info cat /proc/cpuinfo # Nur CPU-Modell cat /proc/cpuinfo | grep "model name" | head -1 # Anzahl der CPU-Kerne cat /proc/cpuinfo | grep "processor" | wc -l # CPU-Flags (Fähigkeiten) cat /proc/cpuinfo | grep "flags" | head -1 # CPU-Frequenz cat /proc/cpuinfo | grep "cpu MHz"
Wichtige Felder:
| Feld | Bedeutung |
|---|---|
| processor | CPU-Kern-Nummer (0-basiert) |
| model name | CPU-Modell und Bezeichnung |
| cpu MHz | Aktuelle Taktfrequenz |
| cache size | L2/L3 Cache-Größe |
| flags | CPU-Features (sse, avx, etc.) |
| bogomips | Performance-Indikator |
Praktische Beispiele:
# CPU-Modell anzeigen grep "model name" /proc/cpuinfo | uniq # Hypervisor erkennen (VM?) grep "hypervisor" /proc/cpuinfo # 64-Bit fähig? grep " lm " /proc/cpuinfo # lm = long mode
Speicher-Informationen
/proc/meminfo
Detaillierte Speicher-Statistiken.
# Vollständige Speicher-Info cat /proc/meminfo # Nur wichtigste Werte cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|Cached|SwapTotal|SwapFree" # Speicher in GB awk '/MemTotal/ {printf "%.2f GB\n", $2/1024/1024}' /proc/meminfo # Freier Speicher in MB awk '/MemAvailable/ {printf "%.0f MB\n", $2/1024}' /proc/meminfo
Wichtige Felder:
| Feld | Bedeutung |
|---|---|
| MemTotal | Gesamter physischer RAM |
| MemFree | Komplett ungenutzter RAM |
| MemAvailable | Verfügbarer RAM (inkl. reclaimable) |
| Buffers | Buffer-Cache |
| Cached | Page-Cache |
| SwapTotal | Gesamter Swap |
| SwapFree | Freier Swap |
| Dirty | Noch nicht geschriebene Daten |
| Slab | Kernel-Datenstrukturen |
Praktische Beispiele:
# RAM-Auslastung berechnen awk '/MemTotal/ {total=$2} /MemAvailable/ {avail=$2} END {used=total-avail; printf "Benutzt: %.1f%% (%d MB von %d MB)\n", used/total*100, used/1024, total/1024}' /proc/meminfo # Swap-Nutzung prüfen awk '/SwapTotal/ {total=$2} /SwapFree/ {free=$2} END {if(total>0) printf "Swap: %d MB benutzt von %d MB\n", (total-free)/1024, total/1024; else print "Kein Swap konfiguriert"}' /proc/meminfo # Cache-Größe awk '/^Cached/ {printf "Cache: %.1f GB\n", $2/1024/1024}' /proc/meminfo
System-Informationen
/proc/version
Kernel-Version und Compiler-Info.
cat /proc/version # Linux version 5.15.0-91-generic (buildd@ubuntu) (gcc version 11.4.0) ...
/proc/uptime
System-Laufzeit und Idle-Zeit.
cat /proc/uptime # 12345.67 98765.43 # Verständlich formatiert awk '{print "Uptime: " int($1/86400) " Tage " int($1%86400/3600) " Stunden"}' /proc/uptime # Idle-Zeit in Prozent awk '{printf "CPU Idle: %.1f%%\n", $2/$1*100}' /proc/uptime
/proc/loadavg
System-Last (Load Average).
cat /proc/loadavg # 0.52 0.58 0.59 1/234 12345 # Nur Last-Werte awk '{print "Last: " $1 " (1min) " $2 " (5min) " $3 " (15min)"}' /proc/loadavg # Laufende/Gesamte Prozesse awk '{print "Prozesse: " $4}' /proc/loadavg
Load-Werte interpretieren:
- < 1.0 pro CPU-Kern = System nicht ausgelastet
- = 1.0 pro CPU-Kern = System voll ausgelastet
- > 1.0 pro CPU-Kern = Prozesse warten auf CPU
# Load im Verhältnis zu CPU-Kernen CORES=$(grep -c processor /proc/cpuinfo) LOAD=$(awk '{print $1}' /proc/loadavg) echo "Load pro Kern: $(echo "scale=2; $LOAD/$CORES" | bc)"
Netzwerk-Informationen
/proc/net/dev
Netzwerk-Interface-Statistiken.
# Alle Interfaces cat /proc/net/dev # Nur aktive Interfaces cat /proc/net/dev | grep -v "^ *lo:" | grep -v "Inter-" # Empfangene Bytes awk '/eth0/ {print "RX: " $2 " Bytes"}' /proc/net/dev # Übertragene Bytes in MB awk '/eth0/ {printf "TX: %.2f MB\n", $10/1024/1024}' /proc/net/dev
/proc/net/tcp und /proc/net/udp
Aktive Netzwerkverbindungen.
# TCP-Verbindungen cat /proc/net/tcp # Anzahl TCP-Verbindungen cat /proc/net/tcp | wc -l # UDP-Sockets cat /proc/net/udp
Dateisystem-Informationen
/proc/mounts
Eingehängte Dateisysteme.
# Alle Mounts cat /proc/mounts # Nur physische Festplatten cat /proc/mounts | grep "^/dev/" # Nur ext4-Dateisysteme cat /proc/mounts | grep " ext4 " # Formatiert anzeigen column -t /proc/mounts
/proc/partitions
Alle Partitionen.
cat /proc/partitions # Größe aller Partitionen in GB awk 'NR>2 {printf "%s: %.1f GB\n", $4, $3/1024/1024}' /proc/partitions
/proc/filesystems
Unterstützte Dateisysteme.
# Alle verfügbaren Dateisysteme cat /proc/filesystems # Nur nicht-nodev Dateisysteme cat /proc/filesystems | grep -v "nodev"
Prozess-Informationen
/proc/[PID]/
Jeder Prozess hat ein eigenes Verzeichnis.
# Eigene Prozess-ID echo $$ # Kommando eines Prozesses cat /proc/$$/cmdline # Umgebungsvariablen eines Prozesses cat /proc/$$/environ | tr '\0' '\n' # Arbeitsverzeichnis eines Prozesses ls -l /proc/$$/cwd # Offene Dateien ls -l /proc/$$/fd/ # Speicher-Map cat /proc/$$/maps
Wichtige Prozess-Dateien:
| Datei | Inhalt |
|---|---|
| cmdline | Komplette Kommandozeile |
| environ | Umgebungsvariablen |
| status | Prozess-Status |
| cwd | Aktuelles Arbeitsverzeichnis (Symlink) |
| exe | Programm-Datei (Symlink) |
| fd/ | Offene File-Deskriptoren |
| maps | Speicher-Mapping |
Beispiel: Apache-Prozesse untersuchen
# Apache-PID finden APACHE_PID=$(pgrep -o apache2) # Kommandozeile cat /proc/$APACHE_PID/cmdline | tr '\0' ' ' # Offene Dateien zählen ls /proc/$APACHE_PID/fd | wc -l # Speichernutzung grep VmRSS /proc/$APACHE_PID/status
Hardware-Informationen
/proc/devices
Character- und Block-Geräte.
# Alle Geräte cat /proc/devices # Nur Block-Geräte sed -n '/Block devices:/,/^$/p' /proc/devices
/proc/interrupts
Hardware-Interrupts.
cat /proc/interrupts # Nur Zeilen mit Aktivität cat /proc/interrupts | awk 'NR==1 || $2>0'
/proc/modules
Geladene Kernel-Module.
# Alle Module cat /proc/modules # Anzahl geladene Module cat /proc/modules | wc -l # Modul-Größen summieren awk '{sum+=$2} END {printf "Total: %.1f MB\n", sum/1024}' /proc/modules
System-Statistiken
/proc/stat
Kernel/System-Statistiken.
cat /proc/stat # CPU-Zeit grep "^cpu " /proc/stat # Boot-Zeit awk '/btime/ {print "Boot: " strftime("%Y-%m-%d %H:%M:%S", $2)}' /proc/stat # Prozess-Statistiken grep "^processes" /proc/stat
/proc/diskstats
Disk-I/O-Statistiken.
# Alle Disks cat /proc/diskstats # Nur sda grep " sda " /proc/diskstats # Lesezugriffe awk '/sda / {print "Reads: " $4}' /proc/diskstats
Praktische Monitoring-Skripte
System-Übersicht
#!/bin/bash echo "=== System-Informationen ===" echo "Kernel: $(cat /proc/version | cut -d' ' -f1-3)" echo "Uptime: $(awk '{print int($1/86400) " Tage"}' /proc/uptime)" echo "CPU: $(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)" echo "Kerne: $(grep -c processor /proc/cpuinfo)" echo "RAM Total: $(awk '/MemTotal/ {printf "%.1f GB\n", $2/1024/1024}' /proc/meminfo)" echo "RAM Frei: $(awk '/MemAvailable/ {printf "%.1f GB\n", $2/1024/1024}' /proc/meminfo)" echo "Load: $(cat /proc/loadavg | cut -d' ' -f1-3)"
Speicher-Monitor
#!/bin/bash watch -n 2 'echo "=== Speicher ===" && \ awk "/MemTotal/ {total=\$2} \ /MemAvailable/ {avail=\$2} \ /SwapTotal/ {stotal=\$2} \ /SwapFree/ {sfree=\$2} \ END { used=total-avail; \ printf \"RAM: %d MB / %d MB (%.1f%% benutzt)\\n\", used/1024, total/1024, used/total*100; \ if(stotal>0) printf \"Swap: %d MB / %d MB\\n\", (stotal-sfree)/1024, stotal/1024 }" /proc/meminfo'
Wichtige Hinweise
- /proc ist read-only (bis auf wenige Ausnahmen in /proc/sys)
- Werte sind immer aktuell - direkt vom Kernel
- Keine zusätzlichen Tools nötig - nur cat, grep, awk
- Sehr effizient für Skripte und Monitoring
- Portabel - auf jedem Linux-System verfügbar
