halloICKEbins
Anmeldungsdatum: 12. September 2017
Beiträge: 226
|
Mahlzeit, ich habe mir ein Skript (/bin/sh) auf meinem OpenBSD-System geschrieben, welche ps aux | grep "begriff1" | grep "begriff2" ausführt. Wenn ich es lokal ausführen, bekomme ich eine Ausgabe mittels echo des Befehls. Führe ich es per SSH mit Python3 remote aus, bekomme ich diese Ausgabe nicht. Durch Probieren habe ich rausbekommen, dass es an dem doppelten grep-Befehl liegt - bei einem grep funktioniert alles wunderbar. Jetzt zur Frage: Woran liegt das und gibt es eine Möglichkeit mit mehreren greps hintereinander zu arbeiten? PS: Hat jemand eine gute Anleitung der Expressions von grep mit Beispielen - als Alternative zu den mehreren greps?
|
mhe
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 210
|
halloICKEbins schrieb: ich habe mir ein Skript (/bin/sh) auf meinem OpenBSD-System geschrieben, welche ps aux | grep "begriff1" | grep "begriff2" ausführt. Wenn ich es lokal ausführen, bekomme ich eine Ausgabe mittels echo des Befehls.
Den letzten Halbsatz verstehe ich nicht. Aber hier mal ein Beispiel um nicht zwei greps zu verwenden .. bitte immer die einfachen Anführungsstriche verwenden: $ echo -e "aa\nbb\ncc\n" | grep '[aa|cc]'
aa
cc Ansonsten mal hier schauen: https://wiki.ubuntuusers.de/grep/
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11248
Wohnort: München
|
Zeig mal bitte, wie du den Shell-Befehl aus Python heraus aufrufst (und warum du da überhaupt grep brauchst - die Ausgabe des Shell-Befehls könnte man immerhin auch in Python zeilenweise nach den Begriffen durchsuchen).
|
halloICKEbins
(Themenstarter)
Anmeldungsdatum: 12. September 2017
Beiträge: 226
|
Vielleicht habe ich mich ja komisch ausgedrückt: Ich habe ein Skript für /bin/sh geschrieben, welches auf meinem OpenBSD-System liegt, welches mittels grep bestimmte Informationen ausliest. Wenn ich dieses auf meinem OpenBSD-System mittels /bin/sh /home/myuser/myscript.sh ausführe, bekomme ich die gewünschten Ausgaben. Jetzt rufe ich das selbe Script mittels ssh von einem Ubuntu-System auf und die eine Anzeige mit dem Mehrfach-grep bleibt leer??? Habe den Quelltext jetzt nicht hier aber ich benutze paramiko dafür.
|
mhe
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 210
|
halloICKEbins schrieb: Vielleicht habe ich mich ja komisch ausgedrückt:
ja, scheint so.
Ich habe ein Skript für /bin/sh geschrieben, welches auf meinem OpenBSD-System liegt, welches mittels grep bestimmte Informationen ausliest. Wenn ich dieses auf meinem OpenBSD-System mittels /bin/sh /home/myuser/myscript.sh ausführe, bekomme ich die gewünschten Ausgaben.
Jetzt rufe ich das selbe Script mittels ssh von einem Ubuntu-System
Ok, jetzt wissen wir auch alle was mit "lokal" gemeint ist ☺
auf und die eine Anzeige mit dem Mehrfach-grep bleibt leer???
Die Ausgabe des ps wird sich auf den beiden Systemen unterscheiden .. schau dir mal die Ausgabe des ps auf den beiden Systemen an, vermutlich wirst Du Deine Match-Bedingung anpassen müssen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13174
|
mhe schrieb:
Den letzten Halbsatz verstehe ich nicht. Aber hier mal ein Beispiel um nicht zwei greps zu verwenden .. bitte immer die einfachen Anführungsstriche verwenden: $ echo -e "aa\nbb\ncc\n" | grep '[aa|cc]'
aa
cc
Das ist doppelt falsch. Erstens funktioniert das anders, als Du denkst. Der Regex erfasst nicht etwa "aa ODER cc" sondern alle Zeilen mit mindestens einem "a", "c" oder "|": | $ echo -e 'ab\ncd\nef|gh' | grep '[aa|cc]'
ab
cd
ef|gh
|
Du meintest eher so etwas grep 'aa\|cc . Aber das tut, zweitens, nicht das gleiche wie der ursprüngliche Befehl, denn es liefert alle Zeilen, die die eine oder die andere Sequenz enthalten. Um die ursprüngliche Abfrage mit einem grep nachzubilden, muss man es so machen: | grep 'begriff1.*begriff2\|begriff2.*begriff1'
|
Ggf. kann man das noch anders formulieren; das hängt von den konkreten Suchbegriffen ab. mhe schrieb:
Die Ausgabe des ps wird sich auf den beiden Systemen unterscheiden .. schau dir mal die Ausgabe des ps auf den beiden Systemen an, vermutlich wirst Du Deine Match-Bedingung anpassen müssen.
Das ist vermutlich der Grund. Man kann übrigens auch pgrep verwenden, so dass man nicht mit ps und grep hantieren muss.
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
Ich schließe mich der Annahme an, dass das OpenBSD-ps eine andere Ausgabe hat als das Ubuntu-ps. Ich kenne OpenBSD selbst nicht so gut, aber geh davon aus, dass du sehr viele Befehle, die unter Ubuntu funktionieren, unter OpenBSD nochmal nachschlagen musst. Das hängt damit zusammen, dass die BSD-Varianten ihren Unix-Wurzeln treu bleiben, während viele der täglich verwendeten Progrämmchen unter Linux GNU-Implementierungen sind - und ja, ich meine "GNU's Not Unix"-GNU. Ich habe hier auf meinem MacBook ein FreeBSD-Userland in der Kommandozeile (also voraussichtlich die gleichen Befehlsvarianten wie OpenBSD) und parallel dazu noch die GNU {core,file,find}utils installiert, um sinnvolle Antworten geben zu können.
|
halloICKEbins
(Themenstarter)
Anmeldungsdatum: 12. September 2017
Beiträge: 226
|
@mhe und cranvil Die ps-Anzeige ist doch immer noch die gleicher, da das Skript immer noch auf dem OpenBSD-System ausgeführt wird.
Einmal halt "lokal" gestartet und das andere Mal remote per SSH.
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
Da hast du recht. Ok, nächster Stolperstein: Funktioniert das denn ohne Python auf der Kommandozeile? Ich habe das eben mal in die andere Richtung probiert (macOS nach Ubuntu). Mein Befehl führt zu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.8 77980 9008 ? Ss 16:58 0:02 /sbin/init maybe-ubiquity
root 2 0.0 0.0 0 0 ? S 16:58 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 16:58 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? I< 16:58 0:00 [mm_percpu_wq]
root 7 0.0 0.0 0 0 ? S 16:58 0:00 [ksoftirqd/0]
root 8 0.0 0.0 0 0 ? I 16:58 0:01 [rcu_sched]
root 9 0.0 0.0 0 0 ? I 16:58 0:00 [rcu_bh]
root 10 0.0 0.0 0 0 ? S 16:58 0:00 [migration/0]
root 11 0.0 0.0 0 0 ? S 16:58 0:00 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 16:58 0:00 [cpuhp/0]
root 13 0.0 0.0 0 0 ? S 16:58 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? I< 16:58 0:00 [netns]
root 15 0.0 0.0 0 0 ? S 16:58 0:00 [rcu_tasks_kthre]
root 16 0.0 0.0 0 0 ? S 16:58 0:00 [kauditd]
root 17 0.0 0.0 0 0 ? S 16:58 0:00 [khungtaskd]
root 18 0.0 0.0 0 0 ? S 16:58 0:00 [oom_reaper]
root 19 0.0 0.0 0 0 ? I< 16:58 0:00 [writeback]
root 20 0.0 0.0 0 0 ? S 16:58 0:00 [kcompactd0]
root 21 0.0 0.0 0 0 ? SN 16:58 0:00 [ksmd]
root 22 0.0 0.0 0 0 ? SN 16:58 0:00 [khugepaged]
root 23 0.0 0.0 0 0 ? I< 16:58 0:00 [crypto]
root 24 0.0 0.0 0 0 ? I< 16:58 0:00 [kintegrityd]
root 25 0.0 0.0 0 0 ? I< 16:58 0:00 [kblockd]
root 26 0.0 0.0 0 0 ? I< 16:58 0:00 [ata_sff]
root 27 0.0 0.0 0 0 ? I< 16:58 0:00 [md]
root 28 0.0 0.0 0 0 ? I< 16:58 0:00 [edac-poller]
root 29 0.0 0.0 0 0 ? I< 16:58 0:00 [devfreq_wq]
root 30 0.0 0.0 0 0 ? I< 16:58 0:00 [watchdogd]
root 32 0.0 0.0 0 0 ? I 16:58 0:00 [kworker/0:1]
root 34 0.0 0.0 0 0 ? S 16:58 0:00 [kswapd0]
root 35 0.0 0.0 0 0 ? I< 16:58 0:00 [kworker/u3:0]
root 36 0.0 0.0 0 0 ? S 16:58 0:00 [ecryptfs-kthrea]
root 78 0.0 0.0 0 0 ? I< 16:58 0:00 [kthrotld]
root 79 0.0 0.0 0 0 ? I< 16:58 0:00 [acpi_thermal_pm]
root 80 0.0 0.0 0 0 ? S 16:58 0:00 [scsi_eh_0]
root 81 0.0 0.0 0 0 ? I< 16:58 0:00 [scsi_tmf_0]
root 82 0.0 0.0 0 0 ? S 16:58 0:00 [scsi_eh_1]
root 83 0.0 0.0 0 0 ? I< 16:58 0:00 [scsi_tmf_1]
root 89 0.0 0.0 0 0 ? I< 16:58 0:00 [ipv6_addrconf]
root 98 0.0 0.0 0 0 ? I< 16:58 0:00 [kstrp]
root 115 0.0 0.0 0 0 ? I< 16:58 0:00 [charger_manager]
root 153 0.0 0.0 0 0 ? I 16:58 0:02 [kworker/0:2]
root 167 0.0 0.0 0 0 ? I< 16:58 0:00 [kworker/0:1H]
root 194 0.0 0.0 0 0 ? S 16:58 0:00 [scsi_eh_2]
root 195 0.0 0.0 0 0 ? I< 16:58 0:00 [scsi_tmf_2]
root 196 0.0 0.0 0 0 ? I< 16:58 0:00 [ttm_swap]
root 197 0.0 0.0 0 0 ? S 16:58 0:00 [irq/18-vmwgfx]
root 262 0.0 0.0 0 0 ? I< 16:58 0:00 [raid5wq]
root 314 0.0 0.0 0 0 ? S 16:58 0:00 [jbd2/sda2-8]
root 315 0.0 0.0 0 0 ? I< 16:58 0:00 [ext4-rsv-conver]
root 383 0.0 1.5 94844 16100 ? S<s 16:58 0:00 /lib/systemd/systemd-journald
root 389 0.0 0.1 97708 1824 ? Ss 16:58 0:00 /sbin/lvmetad -f
root 399 0.0 0.0 0 0 ? I< 16:58 0:00 [iscsi_eh]
root 405 0.0 0.4 45688 4484 ? Ss 16:58 0:00 /lib/systemd/systemd-udevd
root 406 0.0 0.0 0 0 ? I< 16:58 0:00 [ib-comp-wq]
root 407 0.0 0.0 0 0 ? I< 16:58 0:00 [ib_mcast]
root 408 0.0 0.0 0 0 ? I< 16:58 0:00 [ib_nl_sa_wq]
root 409 0.0 0.0 0 0 ? I< 16:58 0:00 [rdma_cm]
root 429 0.0 0.0 0 0 ? S< 16:58 0:00 [loop0]
systemd+ 441 0.0 0.3 141928 3052 ? Ssl 16:58 0:00 /lib/systemd/systemd-timesyncd
root 517 0.0 0.0 0 0 ? I< 16:58 0:00 [iprt-VBoxWQueue]
systemd+ 631 0.0 0.4 80044 5040 ? Ss 16:58 0:00 /lib/systemd/systemd-networkd
systemd+ 643 0.0 0.5 70628 5056 ? Ss 16:58 0:00 /lib/systemd/systemd-resolved
root 704 0.0 0.1 95540 1544 ? Ssl 16:59 0:00 /usr/bin/lxcfs /var/lib/lxcfs/
daemon 706 0.0 0.2 28332 2068 ? Ss 16:59 0:00 /usr/sbin/atd -f
root 707 0.0 0.6 286252 6536 ? Ssl 16:59 0:00 /usr/lib/accountsservice/accounts-daemon
syslog 711 0.0 0.3 263036 4024 ? Ssl 16:59 0:00 /usr/sbin/rsyslogd -n
root 712 0.0 0.6 70660 6076 ? Ss 16:59 0:00 /lib/systemd/systemd-logind
root 728 0.0 0.2 30028 2824 ? Ss 16:59 0:00 /usr/sbin/cron -f
root 732 0.0 1.6 169096 16808 ? Ssl 16:59 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
message+ 733 0.0 0.4 50176 4384 ? Ss 16:59 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root 735 0.0 1.9 185948 19696 ? Ssl 16:59 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root 760 0.0 0.6 72296 6160 ? Ss 16:59 0:00 /usr/sbin/sshd -D
root 766 0.0 0.1 14888 1620 tty1 Ss+ 16:59 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root 781 0.0 0.6 288880 6256 ? Ssl 16:59 0:00 /usr/lib/policykit-1/polkitd --no-debug
root 905 0.0 2.8 91036 28576 ? Ss 16:59 0:00 /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf
root 1599 0.0 0.0 0 0 ? S< 16:59 0:00 [loop1]
root 1632 0.0 2.3 635312 24180 ? Ssl 16:59 0:00 /usr/lib/snapd/snapd
root 2712 0.0 0.0 0 0 ? I 17:19 0:00 [kworker/u2:2]
root 2714 0.0 0.0 0 0 ? I 17:31 0:00 [kworker/u2:1]
root 2717 0.0 0.0 0 0 ? I 17:37 0:00 [kworker/u2:0]
root 3220 0.0 0.7 107984 7240 ? Ss 17:42 0:00 sshd: ben [priv]
ben 3222 0.0 0.6 76644 6660 ? Ss 17:42 0:00 /lib/systemd/systemd --user
ben 3223 0.0 0.2 111964 2624 ? S 17:42 0:00 (sd-pam)
ben 3297 0.0 0.3 107984 3548 ? S 17:42 0:00 sshd: ben@notty
ben 3298 0.0 0.3 38372 3608 ? Rs 17:42 0:00 ps aux Da habe ich mir eine Zeile mit systemd und udevd ausgesucht ssh ubuntu ps aux | grep systemd | grep udevd und root 405 0.0 0.4 45688 4484 ? Ss 16:58 0:00 /lib/systemd/systemd-udevd erhalten. Sollte bei dir also auch klappen. Wenn nein, müssten wir hier ansetzen, andernfalls brauchen wir wohl deinen Python-Code.
|
mhe
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 210
|
rklm schrieb: Das ist doppelt falsch.
Facepalm .. keine Ahnung wo ich da mal wieder mein Hirn verlegt hatte / Danke für den Hinweis!
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13174
|
mhe schrieb: rklm schrieb: Das ist doppelt falsch.
Facepalm .. keine Ahnung wo ich da mal wieder mein Hirn verlegt hatte / Danke für den Hinweis!
Kein Ding. Dafür lag ich bei der Ausgabe der unterschiedlichen ps falsch. ☺ halloICKEbins kannst Du bitte mal folgendes posten:
Es wäre immer noch denkbar, dass der Prozess, nach dem Du suchst, gar nicht läuft, wenn Du Dich per ssh anmeldest. Falls Du z.B. gar kein Desktopenvironment startest und nach einem Prozess suchst, der dazu gehört, wirst Du den natürlich per ssh nicht finden.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17604
Wohnort: Berlin
|
| ps aux | grep "begriff1" | grep "begriff2"
|
Je nach dem, wofür begriff1 und -2 stehen, könnte auch ein
| ps u -C "begriff1" | grep "begriff2"
|
helfen, aber nur je nach dem. Und ob OBSD:ps den -C Parameter kennt weiß ich auch nicht. ☺
|
halloICKEbins
(Themenstarter)
Anmeldungsdatum: 12. September 2017
Beiträge: 226
|
Quellcode mit stdout schicke ich morgen!
|
halloICKEbins
(Themenstarter)
Anmeldungsdatum: 12. September 2017
Beiträge: 226
|
HOST_LOCAL# ps aux
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
...
root 81236 0.0 0.0 544 2184 ?? Isp 23Oct19 0:00.07 syslogd: [priv] (syslogd)
... HOST_LOCAL# vi /root/scripts/test.sh
| #!/bin/sh
echo "EINTRAG DAVOR"
if [ $1 = "test" ]; then
PROZESS=$(ps aux | grep "syslogd" | grep "priv")
if [ $? -eq 0 ]; then
echo "gefunden"
fi
fi
echo "EINTRAG DANACH"
|
HOST_LOCAL# /bin/sh /root/scripts/test.sh test
EINTRAG DAVOR
gefunden
EINTRAG DANACH HOST_SSH# vi /home/report/scripts/test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import paramiko
from functools import partial
def prepare_ssh_client():
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect_with_id = partial(client.connect, timeout=5, username='user1', pkey = paramiko.RSAKey.from_private_key_file(os.path.expanduser('/home/rsa.key')))
return client
client = prepare_ssh_client()
client.connect_with_id('1.1.1.1')
cmd = 'doas /bin/sh /root/scripts/test.sh test'
stdin, stdout, stderr = client.exec_command(cmd)
result = stdout.readlines()
for z in result:
line = z.strip()
print (line)
client.close()
|
HOST_SSH# python3 /home/report/scripts/test.py
EINTRAG DAVOR
EINTRAG DANACH
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11248
Wohnort: München
|
Hast du mal geschaut, ob da etwas in stderr landet (z.B. weil der PATH bei der SSH-Sitzung nicht passend gesetzt ist)?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import paramiko
from functools import partial
def prepare_ssh_client():
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect_with_id = partial(client.connect, timeout=5, username='user1', pkey = paramiko.RSAKey.from_private_key_file(os.path.expanduser('/home/rsa.key')))
return client
client = prepare_ssh_client()
client.connect_with_id('1.1.1.1')
cmd = 'doas /bin/sh /root/scripts/test.sh test'
stdin, stdout, stderr = client.exec_command(cmd)
for line in stderr:
print("stderr:", line, end='')
for line.stdout:
print("stdout:", line, end='')
client.close()
|
|