====== 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}}