Posts mit dem Label linux werden angezeigt. Alle Posts anzeigen
Posts mit dem Label linux werden angezeigt. Alle Posts anzeigen

Donnerstag, 16. Juni 2016

Unix Befehle

Eine Liste von eher unbekannten Unix Befehlen und Ihre Anwendung

paste

paste kann als Join eingesetzt werden. Dabei werden die einzelnen Zeilen zu einer Zeile zusammengefügt. Als Trenner wird TAB eingesetzt. Alternativ können Trenner mit Hilfe des Parameters -d angegeben werden.

Beispiel:

ls -1 | paste -s 

comm

Vergleicht zwei sortierte Dateien Zeile für Zeile. Sind die Zeilen in beiden Dateien enthalten, werden sie in der dritten Spalte ausgegeben. Sind sie nur in der ersten Datei enthalten, werden sie in der ersten Spalte ausgegeben. Zeilen, die nur in der zweiten Datei enthalten sind, landen in der zweiten Spalte.
Mittels Parametern kann man die Ausgabe der Spalten unterdrücken.

Beispiel:

$ cat 1
a
b
c

tmp$ cat 2
b
c
d

$ comm 1 2
a
		b
		c
	d

column

Der column Befehl erstellt eine Tabelle aus dem Input. Dies kann z.B. verwendet werden, um eine einfache CSV Datei auf dem Bildschirm darzustellen.

Manchmal nützlich

factor

Zerlegt eine Zahl in ihre Primfaktoren

$ factor 666
666: 2 3 3 37

numfmt

Formatiert eine Zahl in SI oder IEC Einheiten und umgekehrt

$ echo 1000000 | numfmt --to=iec
977K
$ echo 1M | numfmt --from=iec
1048576

Dienstag, 7. Juli 2015

CIFS über SSH

Um eine CIFS Verbindung über einen SSH Tunnel zu fahren, muss zuerst der SSH Tunnel aufgebaut werden. Dabei sollte statt des veralteten Port 139 der aktuellere Port 445 verwendet werden, da es ansonsten zu Problemen kommen kann.

Der Aufbau der SSH Verbindung kann auf unterschiedliche Weise geschehen. Die einzelnen Verfahren haben dabei Vor- und Nachteile.

  1. Aufbau im Vordergrund ohne Command. Hier muss man den Tunnel manuell in der Hintergrund schicken
    ssh -N -L 10445:10.5.107.32:445 user@jumpserver
    
  2. Aufbau im Hintergrund ohne Command. Zum stoppen muss der Prozess gefunden werden.
    ssh -f -N -L 10445:10.5.107.32:445 user@jumpserver
    
  3. Aufbau im Hintergrund mit Master ohne Command. Extra Aufwand, dafür gute Steuerung
    ssh -f -N -M -S  -L 10445:10.5.107.32:445 user@jumpserver
    
  4. Aufbau im Hintergrund mit Timeout. Auto-Close
    ssh -f -L 10445:10.5.107.32:445 user@jumpserver sleep 60
    

Sobald die Verbindung steht, kann man dann einen CIFS Mount durchführen:

mount -t cifs //WINSERVER/SHARE /mnt/ -o user=winuser,port=10445,ip=127.0.0.1,domain=windomain

Donnerstag, 20. März 2014

Automatisches Umleiten des stdout/stderr in einem Shell Script

Üblicherweise schreibt ein Shell Script seine Meldungen auf stdout und gegebenenfalls auf stderr. Wenn diese statt dessen in ein File geschrieben werden sollen, wird das Script mit entsprechenden Umlenkungen gestartet:
script.sh > script.log 2> script.err
Soll das Script aber seine Meldungen von vornherein in Dateien schreiben (ggf. getriggert durch einen Parameter) kann man mit Hilfe des Befehls exec dies einstellen.
Ein Beispiel veranschaulicht dies am besten:

#!/usr/bin/env bash

echo Hallo

exec > logme.log 2> logme.err

echo Log

echo Error >&2

Mittwoch, 5. Februar 2014

Threaddump für JVM

Unter Linux kann man mit einem QUIT Signal die JVM dazu veranlassen, einen Threaddump zu schreiben:
kill -3 pid kill -QUIT pid
Der Threaddump wird auf stdout geschrieben.
Alternativ kann ab JDK6 das Programm jstack benutzt werden. Dieses zeigt den Threaddump direkt an. Um die verfügbaren Java-Maschinen zu sehen bietet sich das Programm jps an.

Montag, 13. Januar 2014

iscsiadm Übersicht

Kleine Übersicht über die wichtigsten iscsiadm Befehle

Verfügbare Targets an einem Server finden
iscsiadm -m discovery -t sendtargets -p ipaddress

An einem Target anmelden
iscsiadm -m node -T targetname -p ipaddress -l

Von einem Target abmelden
iscsiadm -m node -T targetname -p ipaddress -u

Weitere Befehle:

Informationen über das Target bekommen
iscsiadm -m node -T targetname -p ipaddress

Alle eingeloggten Sessions anzeigen
iscsiadm -m session

Multipath-Infos anzeigen
multipath -ll

Quelle:  http://axelilly.wordpress.com/2010/05/27/help-iscsi-initiator-commands-for-linux/

Donnerstag, 21. November 2013

GNU getopt in Shellskripten

Auch in Shell Skripten möchte man hin- und wieder Optionen einsetzen. Hierzu bieten sich das GNU getopt Programm an, das neben kurzen Argumenten auch lange Argumente erlaubt. Auch optionale Parameter werden unterstützt.

Der Aufruf von getopt sortiert die Parameter nach ihrer Beschreibung um, so dass die zugewiesenen Parameter am Anfang stehen. Nach diesen folgt ein --, das von den nicht-zugewiesenen Parametern gefolgt wird.

Ein Beispiel: Wir erwarten einen Parameter a. Der dazugehörige Aufruf von getopt lautet:
getopt --options a -- "$@"
Wenn wir diesen Aufruf mit den Parametern "x -a y" aufrufen, dann liefert getopt den String "-a -- x y" zurück.
Falls wir ein notwendiges Argument mittels des Kennzeichners ":" markiert haben, wird dieser an die Option angehängt. Ein optionales Argument (markiert mit "::") führt, je nachdem ob es angegeben wurde oder nicht, zu einem Leerstring oder dem Argument. Auch hier wieder die Beispiele:
getopt --option a: -- "$@"
führt beim Aufruf mit "x -a y" zu dem String "-a y -- x". Wird das notwendige Argument weggelassen, bricht der getopt Aufruf mit einem Fehler ab.
Die optionale Variante:
getopt --option a:: -- "$@"
beim Aufruf mit "x -a y" zum Ausgabestring " -a '' -- 'x' 'y'" führt. Wenn hier das Argument y Teil von -a sein soll, muss der Aufruf "x -ay" lauten.

Doch wie wertet man das Ergebnis aus? Hier kann man am einfachsten die Aufrufargumente mittels
eval set -- "$TEMP"
neu setzen. Danach kann man in einer Schleife die Argumente prüfen und per shift entfernen, bis man zum "--" Argument kommt. Somit bleiben die restlichen Argumente übrig.
while true ; do
  case "$1" in
    -a|--along) do-something; shift ;;
    --) shift; break;;
    *) Error
  esac
done
Ein Beispiel findet man häufig auch unter: /usr/share/doc/util-linux/examples/getopt-parse.bash

Donnerstag, 26. September 2013

PKCS#7 gegen Content prüfen

Falls man ein PKCS#7 Signaturfile und einen Datenblock hat und prüfen möchte, ob die beiden zusammengehören, kann man dies manuell auf der Kommandozeile durchführen:
openssl smime -verify -inform DER -in sign.p7 -content data.bin  > /dev/null
Die inform muss natürlich für das PKCS#7 File angepasst werden. Hier sind DER und PEM möglich.
Falls die Prüfung mit einem Fehler der Art ":unable to get local issuer certificate" fehlschlägt, konnte das Zertifikat nicht korrekt geprüft werden (fehlende CA?). Falls man nur die Signatur prüfen möchte, kann man zusätzlich den Parameter noverify verwenden, der die Zertifikatsprüfung überspringt:
openssl smime -verify -noverify -inform DER -in sig.p7 -content data.bin  > /dev/null
Der Befehl gibt am Schluss den Datenblock auf stdout aus, daher sollte man stdout nach /dev/null schicken.
Die Prüfung kann auch über den Errorcode erfolgen:
  • 0: Erfolgreich
  • 1: Fehler beim Parsen der Argumente
  • 2: Fehler beim Lesen einer der Dateien
  • 3: Fehler beim Lesen des Datenfiles
  • 4: Fehler beim Verifizieren der Nachricht
  • 5: Die Nachricht konnte verifiziert werden, aber es trat ein Fehler beim Schreiben der Zertifikate auf

Mittwoch, 11. September 2013

Label eines RAID Arrays ändern

SUSE (und wahrscheinlich auch andere Distributionen) legen ein RAID Array mit einem automatischen Namen an. Wenn man das RAID Array immer an der gleichen Stelle verwendet, ist das üblicherweise auch kein Problem. Hat man aber mehrere Arrays oder will man das Array aber auf einen anderen Rechner transportieren, möchte man vielleicht wissen, was das Array mit dem Namen "/dev/md?" enthält. Hierzu ist dann ein aussagekräftiges Label des RAID-Arrays sinnvoll.

Ein bestehenden Label kann man mit diesem Befehl ändern:
mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]
  • /dev/md/alpha ist der Name des RAID Devices (hier kann man auch /dev/md0) verwenden
  • newname ist der neue Name des RAID Arrays
  • /dev/sd[gf] sind die Einzeldevices des RAID-Arrays

Den Array-Namen kann man in der Ausgabe des blkid Befehls auf den Einzeldevices sehen oder in der Ausgabe von:
mdadm --detail /dev/md/alpha

Quelle: http://askubuntu.com/questions/63980/how-do-i-rename-an-mdadm-raid-array

Freitag, 9. August 2013

Reboot required?

Ein notwendiger Reboot eines Ubuntu Systems (z.B. wenn ein Paket-Update diesen erfordert), wird über die Datei
/var/run/reboot-required
signalisiert.

Donnerstag, 25. Juli 2013

Gründe, warum umount nicht funktioniert

Quelle: http://oletange.blogspot.de/2012/04/umount-device-is-busy-why.html


  • Ein Prozess greift gerade auf das gemountete Verzeichnis zu. Dieser kann üblicherweise mittels lsof gefunden und getötet werden.
  • Der nfs Kernelserver verwendet das gemountete Verzeichnis. Dies kann über den Befehl showmount geürft werden. Nach einem Stopp des Servers sollte das umount funktionieren
  • Ein loopback Device verwendet eine Datei im gemounteten Verzeichnis. Dies lässt sich per "losetup -a" überprüfen.
  • Ein Swap-File existiert im gemounteten Verzeichnis. Dies lässt sich per "cat /proc/swaps" prüfen. Falls ja, wird das Swapfile mittels "swapoff" abgeschaltet.
  • Das Device hat einen Fehler. Dieser Fall lässt sich per "dmsg" überprüfen. 

Mittwoch, 13. Februar 2013

Durchsatz einer Pipe

Um schnell Daten von einem Linux Rechner auf einen anderen zu transportieren kann man einen ssh tunnel benutzen. Zum Beispiel mit der Befehlszeile:

tar cf - src | ( ssh other "cd dest && tar xfv - " )

Dabei kann man aber leider nicht sehen, wie schnell die Übertragung ist. Hierzu kann man dann den pv (Pipe Viewer) Befehl verwenden. Dieser misst den Durchsatz durch die Pipe. Eingesetzt wird er (im obigen Beispiel) wie folgt:

tar cf - src | pv | ( ssh other "cd dest && tar xfv - " )

Leider ist pv unter SLES nicht im Standard-Repository zu finden. Eine passende Datei lässt sich aber hier herunterladen.

Mittwoch, 4. August 2010

Wie fährt man Oracle herunter?

Stoppen des Listeners:
lsnrctl stop

Shutdown der Datenbank
sqlplus system as sysdba
shutdown

Befehlsliste für Services

invoke-rc.d
service SCRIPT CMD

Falls der Service ein Upstart Service ist, kann der aktuelle Status mit Hilfe dieses Befehls erfragt werden:
status SERVICE

Wie speichert man in vi als root?

Wenn man vi nicht als root gestartet hat, aber trotzdem die Datei als root speichern möchte, kann man folgenden Befehl verwenden:
:w !sudo tee %

Wie verwendet man einen privilegierten Port?

Siehe authbind