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

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:

# 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

Siehe auch