Files
Snippets/Linux-Sammelsurium.md
T
2026-08-07 13:45:20 +02:00

7.9 KiB

Linux: Projekte ablegen, Dateien suchen/löschen und xargs

Projekte unter Linux organisieren

Es gibt keine feste Vorgabe, aber einige Verzeichnisstrukturen haben sich etabliert.

Für persönliche Entwicklungsprojekte

Empfohlen:

  • ~/Projects/
  • ~/Code/
  • ~/src/ (unter Entwicklern sehr verbreitet)

Beispiel:

/home/max/
├── Documents/
├── Downloads/
├── Projects/
│   ├── website/
│   ├── python-tool/
│   └── homelab/

Oder eine nach Git-Hosting strukturierte Variante:

~/src/
├── github.com/
│   └── benutzer/
│       ├── projekt1/
│       └── projekt2/
└── private/

Verzeichnis anlegen:

mkdir -p ~/Projects

oder

mkdir -p ~/src

Für mehrere Benutzer

Verzeichnis Zweck
/srv/ Gemeinsam genutzte Projekte oder Dienste
/usr/local/src/ Systemweiter Quellcode
/opt/ Installierte Drittanbieter-Software (nicht für eigenen Quellcode)

Dateien mit find suchen und löschen

Dateien nach Namen löschen

Alle .tmp-Dateien löschen:

find . -name "*.tmp" -delete

Erst suchen, dann löschen (empfohlen)

Dateien anzeigen:

find . -name "*.tmp"

Anschließend löschen:

find . -name "*.tmp" -delete

Mit Rückfrage löschen

find . -name "*.tmp" -ok rm {} \;

oder

find . -name "*.tmp" -exec rm -i {} \;

Nach Alter löschen

Logdateien, die älter als 30 Tage sind:

find . -name "*.log" -mtime +30 -delete

Leere Verzeichnisse löschen

find . -type d -empty -delete

Achtung

-delete löscht Dateien sofort und ohne Papierkorb.

Deshalb empfiehlt sich immer:

  1. find ohne -delete
  2. Ergebnisse prüfen
  3. -delete ergänzen

Beispiel:

find ~/Downloads -name "*.zip"

find ~/Downloads -name "*.zip" -delete

xargs erklärt

Was macht xargs?

xargs nimmt Eingaben (meist aus einer Pipe) entgegen und macht daraus Argumente für einen anderen Befehl.

Beispiel:

echo "a.txt b.txt c.txt" | xargs rm

Das entspricht:

rm a.txt b.txt c.txt

Typischer Einsatz mit find

Ohne xargs:

find . -name "*.log" -exec rm {} \;

Mit xargs:

find . -name "*.log" | xargs rm

xargs bündelt mehrere Dateinamen zu einem einzigen rm-Aufruf und ist dadurch oft effizienter.


Problem mit Leerzeichen

Angenommen, es gibt eine Datei:

Meine Datei.txt

Dann liefert:

find . -name "*.txt" | xargs rm

xargs trennt standardmäßig an Leerzeichen und Zeilenumbrüchen.

Es interpretiert:

./Meine Datei.txt

als zwei Argumente:

  • ./Meine
  • Datei.txt

Das führt zu Fehlern.


Die sichere Lösung

Deshalb verwendet man fast immer:

find . -name "*.txt" -print0 | xargs -0 rm

Warum?

  • find -print0 trennt Dateinamen mit einem Nullbyte (\0)
  • xargs -0 liest genau dieses Format

Dadurch funktionieren auch Dateinamen mit:

  • Leerzeichen
  • Tabs
  • Zeilenumbrüchen
  • Sonderzeichen

Platzhalter mit -I

Soll der Dateiname mitten im Befehl stehen:

find . -name "*.jpg" | xargs -I {} cp {} /backup/

Für jede Datei wird ausgeführt:

cp datei.jpg /backup/

Anzahl der Argumente begrenzen

seq 1 10 | xargs -n 3 echo

Ausgabe:

1 2 3
4 5 6
7 8 9
10

-n 3 bedeutet: maximal drei Argumente pro Befehlsaufruf.


Parallelisierung

Mehrere Prozesse gleichzeitig starten:

find . -name "*.png" | xargs -P 4 -n 1 convert

Parameter:

  • -P 4 → bis zu vier Prozesse parallel
  • -n 1 → ein Dateiname pro Prozess

Alternative ohne xargs

Viele moderne Befehle unterstützen bereits mehrere Dateien gleichzeitig.

Beispiel:

find . -name "*.log" -exec rm {} +

Das erreicht nahezu denselben Effekt wie:

find . -name "*.log" -print0 | xargs -0 rm

Merksätze

Projekte

  • Eigene Projekte → ~/Projects oder ~/src
  • Gemeinsame Projekte → /srv
  • Installierte Software → /opt

find

  • Dateien suchen:

    find . -name "*.txt"
    
  • Direkt löschen:

    find . -name "*.txt" -delete
    

xargs

  • Macht aus Pipe-Ausgabe Befehlsargumente.
  • Spart viele einzelne Programmaufrufe.
  • Immer sicher verwenden mit:
find . -print0 | xargs -0 <befehl>

Moderne Alternative

Wenn möglich:

find . -exec <befehl> {} +

Diese Variante ist oft einfacher und ebenso effizient.

SNMP: MIB-Auflösung und OID-Übersetzung mit net-snmp

OIDs werden trotz eingehängter MIB nicht textuell aufgelöst

Mögliche Ursachen

MIB wird nicht geladen

  • MIB liegt nicht in einem durchsuchten Verzeichnis. Prüfen mit net-snmp-config --default-mibdirs; übliche Pfade sind ~/.snmp/mibs, /usr/share/snmp/mibs.
  • MIB nicht per -m oder Konfiguration aktiviert. Test: snmpwalk -m ALL ... oder in ~/.snmp/snmp.conf bzw. /etc/snmp/snmp.conf: mibs +MEIN-MIB.
  • net-snmp lädt standardmäßig nur ein Minimalset. mibs : deaktiviert alles.

Dateiname passt nicht zum MIB-Namen

  • net-snmp löst Module über den Dateinamen auf; der interne Modulname (vor DEFINITIONS ::= BEGIN) muss stimmen.

Fehlende IMPORTS / Abhängigkeiten

  • Importierte MIBs (z. B. SNMPv2-SMI, SNMPv2-TC, herstellereigene Basis-MIBs) fehlen → Parsen schlägt still fehl. Sichtbar machen mit:

    snmptranslate -M+/pfad -m ALL -Dparse-mibs OID
    

Parse-/Syntaxfehler in der MIB

  • Diagnose:

    snmptranslate -Le -m ALL -M /pfad -On MEIN-MIB::objekt
    

    Fehler werden auf stderr ausgegeben.

Numerische OID gehört zu keinem geladenen Zweig

  • Die abgefragte Enterprise-OID liegt außerhalb dessen, was die MIB definiert (falsche/unvollständige MIB).

Schneller Prüfweg

  1. snmptranslate -m +MEIN-MIB -IR meinObjekt → gibt es einen Treffer?
  2. snmptranslate -Le -M /pfad/zu/mibs -m ALL .1.3.6.1.4.1.<enterprise> → Fehler beim Laden?
  3. Fehlende Import-MIBs nachlegen.

Meist ist es eine fehlende Import-Abhängigkeit oder ein falscher Suchpfad/Modulname.


Umgekehrt: von MIB::objekt auf die OID schließen

Textuellen Namen statt numerischer OID übergeben (MIB muss geladen sein):

snmpget  -v2c -c public host MEIN-MIB::meinObjekt.0
snmpwalk -v2c -c public host MEIN-MIB::meinObjekt

Vorher ohne Gerät prüfen (Name → OID)

snmptranslate -On MEIN-MIB::meinObjekt

-On erzwingt die numerische Ausgabe, also die zugehörige OID.

Umgekehrt (OID → Name):

snmptranslate .1.3.6.1.4.1.xxx

Nützliche Varianten

  • Objektname allein suchen (ohne MIB::-Präfix):

    snmptranslate -IR -On meinObjekt
    
  • Vollständigen symbolischen Pfad anzeigen:

    snmptranslate -Of MEIN-MIB::meinObjekt
    
  • Objektdetails (Typ, Zugriff, Beschreibung):

    snmptranslate -Td MEIN-MIB::meinObjekt
    

Hinweise

  • Scheitert snmpget MEIN-MIB::meinObjekt.0 mit „Unknown Object Identifier", ist die MIB nicht geladen → mit -m +MEIN-MIB bzw. -M /pfad ergänzen.
  • Bei skalaren Objekten die .0-Instanz nicht vergessen.

Idoit von 35 auf 38

Test auf Masternode

  • kein main-Mode

  • ohne ansible

php8.2 zu 8.4

8.2-Module ermitteln, die Ausgabe listet die entsprechenden 8.4-Paketnamen

dpkg -l | grep '^ii php8.2' | awk '{print $2}' | sed 's/8.2/8.4/'

Update der entsprechenden Pakete

apt update
apt install -y $(dpkg -l | grep '^ii  php8.2' | awk '{print $2}' | sed 's/8.2/8.4/')

Umschalten (mod_php/Apache) und CLI

a2dismod php8.2 && a2enmod php8.4
crm res restart rcapache2
update-alternatives --set php /usr/bin/php8.4