====== 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 [[sammlung:bash_kommandos|Bash-Kommandos]] * Verständnis von [[sammlung:cat_less_more_head_tail|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 ===== Siehe auch ===== * [[sammlung:cat_less_more_head_tail|Dateien anzeigen]] * [[sammlung:top|top - Prozess-Monitor]] * [[sammlung:free|free - Speicher-Info]] * [[sammlung:df|df - Dateisystem-Info]] * [[sammlung:lsblk|lsblk - Block-Geräte]] {{tag>linux system proc information monitoring kernel}}