[BASH] Frickler-Pipes

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    heute habe ich mich gefragt, wie man feststellen kann, ob bestimmte Prozesse oder eigene Anwendungen noch laufen. Wenn man die Programme namentlich kennt, dann kan man mit [font="Courier New"]pidof[/font] die Prozess-ID (PID) erhalten.

    Was macht man aber, wenn man eine PID-Liste hat und den einzelnen Prozessen irgendwelche Signale senden möchte? Dazu muss überhaupt erstmal bekannt sein, ob die PID-Liste noch aktuell ist.

    Code
    ps -o pid= -p <PID>

    Läuft der Prozess mit der PID <PID>, dann meldet das obige Linux-Kommando die betreffende PID zurück.
    Existiert der Prozess nicht mehr, erfolgt keine Rückmeldung.

    Und wo ist jetzt die Eingabe-/Ausgabe-Weiterleitung?

    :( Das ist dann zwar keine Pipe, aber ich finde das Linux-Kommando trotzdem passend, um hier aufgenommen zu werden. ;)


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Nicht schlecht :thumbs1: ,
    ich hätte da noch pgrep zu bieten (nehme ich meist, bin schreibfaul :D:(

    Dein Beispiel wäre dann:

    Code
    > pgrep -s <PID>

    Nett auch:

    Code
    pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi


    Die bash ist doch was cooles :bravo2: ... :thumbs1:

  • Hi Zentris,

    über [font="Courier New"]pgrep[/font] bin ich danach auch noch gestoßen. Da ich kein ausgewiesener Freund regulärer Ausdrücke bin udn meine ersten drei Versuche, pgrep irgendwas Gehaltvolles zu entlocken, doch recht kläglich verliefen, habe ich es bei dem oben belassen.

    Aber vielen Dank für Deine Lösung, die auf pgrep zur gleichen Erkenntnis kommt.
     

    Zitat von &quot;Zentris&quot; pid='294342' dateline='1502047508'


    Nett auch:

    Code
    pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi


    Na, da hört's dann aber auch auf! ;) Das habe ich vorhin auch irgendwo gefunden...


    Zitat von &quot;Zentris&quot; pid='294342' dateline='1502047508'


    Die bash ist doch was cooles :bravo2: ... :thumbs1:


    Ja, wenn sich jeder damit besser auskennen würde, dann würden viel mehr Leute für kleine Tools auch mal BASH eine Chance geben. Und wenn ich erst mal in Rente bin, dann lese ich mir auch mal die BASH-Bücher durch... versprochen!


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (6. August 2017 um 22:16)

  • Zitat von &quot;Andreas&quot; pid='294347' dateline='1502048217'
    Code
    pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi


    Na, da hört's dann aber auch auf! ;) Das habe ich vorhin auch irgendwo gefunden...

    Nix da "gefunden", :lol:
    das hab ich vor Ewigkeiten mal geklöppelt... für was ganz anderes... ist aus einem größerem Script gerissen :)

  • Hi Zentris,

    hier habe ich das "gefunden":

    Code
    command="httpd"
    running=`ps ax | grep -v grep | grep $command | wc -l`
    if [ running -gt 0 ]; then
        echo "Command is running"
    else
        echo "Command is not running"
    fi

    hat schon strukturelle Ähnlichkeit zu

    Zitat von &quot;Zentris&quot; pid='294360' dateline='1502049792'
    Code
    pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi

    Nix da "gefunden", :lol:
    das hab ich vor Ewigkeiten mal geklöppelt... für was ganz anderes... ist aus einem größerem Script gerissen :)

    Jetzt werde ich aber meine strukturelle Ähnlichkeit mit dem Bett steigern. Morgen 5:30 wird der Wecker klingeln.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Zitat von &quot;Andreas&quot; pid='294366' dateline='1502050548'


    hier habe ich das "gefunden":

    Code
    command="httpd"
    running=`ps ax | grep -v grep | grep $command | wc -l`
    if [ running -gt 0 ]; then
       echo "Command is running"
    else
       echo "Command is not running"
    fi

    hat schon strukturelle Ähnlichkeit zu
    ...

    Fehler: :lol:
    if [ $running -gt 0 ]; then...

    Klar, das "Konzept" (Abfrage des Rückgabeparameters eines Kommandos und anschließender Interpretation) gibt ja nicht viel Variationsbreite her :lol:

  • Hallo zusammen,

    für eine aktuelle Entwicklung muss ich feststellen, ob in einem Verzeichnis eine neue Datei dazugekommen ist, die innerhalb der Ereignisbehandlung mit aufgenommen werden soll.

    Folgende Pipe ermittelt Datum und Uhrzeit der aktuellen Datei im Zielverzeichnis.

    Code
    ls -cAlt --time-style=long-iso | head -n2 | tail -n1 | awk {'print $6 " " $7'}

    Ergebnis ist z.B.

    Code
    2017-09-17 13:00

    Dieses Ergebnis kann ich einlesen, mit der aktuellen Systemzeit vergleichen und ggf. entsprechende Aktionen folgen lassen.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Zitat von &quot;Andreas&quot; pid='300158' dateline='1505646624'
    Code
    ls -cAlt --time-style=long-iso | head -n2 | tail -n1 | awk {'print $6 " " $7'}

    Oder kürzer:

    Code
    ls -cAltr --time-style=long-iso | tail -n1 | awk {'print $6 " " $7'}
  • Zitat von &quot;Andreas&quot; pid='300158' dateline='1505646624'

    für eine aktuelle Entwicklung muss ich feststellen, ob in einem Verzeichnis eine neue Datei dazugekommen ist, die innerhalb der Ereignisbehandlung mit aufgenommen werden soll.

    incron - cron-like daemon which handles filesystem events
    Automatisch zusammengefügt:

    Zitat von &quot;Manul&quot; pid='300166' dateline='1505648738'


    Oder kürzer:

    Code
    ls -cAltr --time-style=long-iso | tail -n1 | awk {'print $6 " " $7'}


    Oder kürzer:

    Code
    ls -cAltr --time-style=long-iso | awk 'END{print $6 " " $7}'

    Allgemein wäre ich vorsichtig, die Ausgabe von "ls" weiter zu verarbeiten. Zu viele Fallen lauern (LANG, IFS, etc.), wenn kein definiertes Environment besteht.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (17. September 2017 um 14:02)

  • Links in Beitrag #1 korrigiert

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo zusammen,

    momentan bin ich dabei, meine knapp 6000 Beiträge in diesem Forum anzuschauen und die Links des alten Forums in das neue Forum zu ändern. Abgesehen, dass es eine Schweinearbeit ist und ich jetzt noch ca. 2000 Beiträge durchgehen muss, habe ich dabei doch einige Beiträge "wiedererentdeckt". Einer davon ist eine Pipe, die die größten z.B. 100 Dateien des Dateisystems ermittelt. Diese Pipe ist z.B. dann sinnvoll, wenn man feststellt, dass der Speicherplatz auf der SD-Karte, der Festplatte oder der SSD zur Neige geht - man aber keine Vorstellungen hat, welche Dateien denn so groß (geworden) sind.

    Code
    sudo du --block-size=MiB --max-depth=10 | sort -rn | head -n 100

    Bevor man diese Pipe startet, gilt es den Tip von linusg zu berücksichtigen, nämlich per cd /Pfad/zum/Ausgangsverzeichnis in das Verzeichnis zu wechseln, ab dem man diese 100 größten Dateien ermitteln möchte.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (15. Oktober 2017 um 20:45)

  • Hallo linusg,

    ja, das mit dem Startverzeichnis ist ein so guter Einwand, dass ich ihn gleich in #33 aufgenommen habe. Startet man aber bei /, dann muss man da echt Geduld mitbringen.

    Aber das Ergebnis ist eine gute Informationsquelle bei solchen Problemen.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Und für Leute, die das wilde Umherspringen im Dateisystem nicht mögen:

    Code
    sudo du /startpfad --block-size=MiB --max-depth=10 | sort -rn | head -n 100

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Hallo zusammen,

    im Dezember habe ich den Auftrag bekommen, ein Reinraum-Monitoring-Programm zu entwickeln. Das Programm macht schon lange, was es soll. Aber ein paar Paranoia sollen noch hinein.

    Eines davon besteht darin, einen Controller auszulesen, auf dem die Daten gesammelt weden. Diese Daten landen in einem Download-Verzeichnis der Anwendung. Um zu verhindern, dass irgendjemand eine manipulierte Version der Daten bereitstellt, die dann von der Anwendung verarbeitet werden, soll das Download-Verzeichnis einfach gelöscht werden, wenn mehr als eine Datei vorhanden ist - anstatt sich mit der Frage zu quälen, welche von beiden Dateien nicht manipuliert sein könnte.

    Frickler-Pipe:

    Code
    find .../MCM_Download -type f | wc -l"

    ermittelt die Anzahl der Dateien im anwendungseigenen Download-Verzeichnis.

    Und in Icon sieht das dann so aus [Code-Ausschnitt]

    Statt ... steht dann natürlich der Pfad zum Verzeichnis.

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo zusammen,

    für ein aktuelles Projekt brauche ich die IP-Adresse des WLAN-Interfaces.

    Frickler-Pipe:

    Code
    ifconfig wlan0 | grep inet | awk '{print $2}' | cut -d':' -f2 | head -n 1

    Und in Icon sieht das dann so aus:

    Code
    ip := piper("ifconfig wlan0 | grep inet | awk '{print $2}' | cut -d':' -f2 | head -n 1")

    Gibt es eine IP-Adresse zum WLAN-Interface, dann steht das Ergebnis in der Variablen ip.

    Gibt es diese Schnittstelle nicht, oder ging sie verloren, dann wird ip der Nullwert &null zugewiesen.

    Die Funktion piper() kann über

    Code
    link icontoolbox

    eingebunden werden.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo zusammen,

    für ein aktuelles Projekt brauche ich die IP-Adresse des ETH-Interfaces.

    Frickler-Pipe:

    Code
    ifconfig eth0 | grep inet | awk '{print $2}' | cut -d':' -f2 | head -n 1

    Und in Icon sieht das dann so aus:

    Code
    ip := piper("ifconfig eth0 | grep inet | awk '{print $2}' | cut -d':' -f2 | head -n 1")

    Gibt es eine IP-Adresse zum ETH0-Interface, dann steht das Ergebnis in der Variablen ip.

    Gibt es diese Schnittstelle nicht, oder ging sie verloren, dann wird ip der Nullwert &null zugewiesen.

    Die Funktion piper() kann über

    Code
    link icontoolbox

    eingebunden werden.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!