staging.inyokaproject.org

Sammelthema: Vorstellungsthread für Skriptlösungen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1269

Moin,

ich hab hier einen Einzeiler entwickelt, vielleicht kann das jemand gebrauchen. Es geht darum, mit printf einen Text auszugeben und dabei die gesamte Terminalzeile einzufärben.

bash:

1
printf "\e[48;5;19m%*s\rDies ist ein Test\e[0m\n" $(tput cols)

Perl:

1
perl -e 'printf "\e[48;5;19m%*s\rDies ist ein Test\e[0m\n", `tput cols`, "";'

Dabei wird die Terminal-Breite mit "tput cols" ermittelt und an printf als erstem Parameter übergeben. Der wird ausgewertet, weil mit "%*s" die Länge nicht explizit angegeben wird, sondern als erster Parameter angefordert wird.

So lässt sich in eigenen Skripten z. B. eine Logo-Zeile mit eingefärbtem Hintergrund ausgeben.

Grüsse, juribel

Moderiert von rklm:

An das passende Thema angehängt

Bearbeitet von rklm:

Syntaxhighlighting

lx_uwe

Avatar von lx_uwe

Anmeldungsdatum:
29. August 2017

Beiträge: 105

Ich habe mir in Kubuntu einen Kurzbefehl / Hotkey angelegt, mit dem markierter Text aus einem in das nächste mit Alt-Tab erreichbare Fenster kopiert wird

(oder anders: ... ich statt "Ctrl-C (bzw. Shift-Ctrl-C) / Alt-Tab / Ctrl-V (bzw. Shift-Ctrl-V)" nur den Hotkey drücken muss).

Der zuvor mit der Maus markierte Text wird mit

1
xclip -o

in einer Variablen gespeichert, dann mit

1
xdotool

Alt-Tab emuliert und der Text eingefügt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# markierten Text speichern:
text=$(xclip -o)

# Alt-Tab:
sleep .5
xdotool keydown Alt 
sleep .5 
xdotool key Tab 
sleep .5
xdotool keyup Alt

# Text einfuegen:
# xdotool type " $text"
xdotool type "$text"

# und noch die Home-Taste emulieren:
sleep .5
xdotool key Home

xdotool und xclip müssen natürlich installiert sein (sudo apt install ...). Das Kopieren / Einfügen hatte ich zuvor mit Emulieren von Tastenkombinationen wie Ctrl-C versucht, klappte aber nicht so gut. Die Lösung mit "xclip" und "xdotool type" ist auch universeller. Ggf. sind nicht alle sleeps nötig (oder die Zeiten müssen erhöht werden, wenn es nicht klappt). Bei mir funktioniert es aber so zu 99%. Falls vor den eingefügten Text noch ein Leerzeichen soll oder kein <Home> gedrückt werden soll, muss das noch angepasst werden. Um es zu nutzen, das Script speichern / ausführbar machen und ggf. Hotkey einstellen, der das Script dann aufruft.

lx_uwe

Avatar von lx_uwe

Anmeldungsdatum:
29. August 2017

Beiträge: 105

Da ich mich eben fragte, aus welchem apt-Paket die bei mir vorhandene "Datei" /bin/rlogin (bzw. /etc/alternatives/rlogin) ist, und mit "dpkg -S" nichts finden konnte, habe ich nach Recherche mir das folgende Script gebaut, was dann u.a. auch noch in den Installer-Skripten nach dem Dateinamen sucht. (geht nur für per apt installierte Dateien)

 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
27
28
29
30
31
32
#!/bin/bash

if [ $# -ne 1 ]; then
	echo "Pfad_zur_Datei/Datei fehlt"
	exit 1
fi

f="$1"

echo "ls ...:"
ls -l "$f"
if [ $? -ne 0 ]; then
	echo "Datei nicht vorhanden: $f"
	exit 2
fi

echo -e "\ndpkg -S ...:"
dpkg -S "$f"
if [ $? -ne 0 ]; then
	such=$(basename $f)
	echo -e "\nIn diesen installierten Paketen wurde \"$such\" gefunden:"
	pkgs=$(apt search "$such" 2>/dev/null|grep "/.*nstall"|cut -d/ -f1)
	echo $pkgs
	echo -e "\nSuche nach \"$such\" in den install Scripten von:"
	for i in $pkgs; do
		echo -e "\n $i"
		grep "$such" /var/lib/dpkg/info/$i*{inst,rm} 2>/dev/null
		[ $? -eq 0 ] && echo -e "\n*** GEFUNDEN im Paket $i !!! ***"
	done
else
	echo "** GEFUNDEN **"
fi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ ./woher_stammt.sh /bin/rlogin
ls ...:
lrwxrwxrwx 1 root root 24 Jul 14  2022 /bin/rlogin -> /etc/alternatives/rlogin

dpkg -S ...:
dpkg-query: Kein Pfad gefunden, der auf Muster /bin/rlogin passt

In diesen installierten Paketen wurde "rlogin" gefunden:
libwrap0 openssh-client putty-tools

Suche nach "rlogin" in den install Scripten von:

 libwrap0

 openssh-client
/var/lib/dpkg/info/openssh-client.postinst:        update-alternatives --install /usr/bin/rlogin rlogin /usr/bin/slogin 20 \
/var/lib/dpkg/info/openssh-client.postinst:            --slave /usr/share/man/man1/rlogin.1.gz rlogin.1.gz /usr/share/man/man1/slogin.1.gz
/var/lib/dpkg/info/openssh-client.prerm:        update-alternatives --remove rlogin /usr/bin/slogin

*** GEFUNDEN im Paket openssh-client !!! ***

 putty-tools
$ 

rklm Team-Icon

Projektleitung
(Themenstarter)

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

lx_uwe schrieb:

Da ich mich eben fragte, aus welchem apt-Paket die bei mir vorhandene "Datei" /bin/rlogin (bzw. /etc/alternatives/rlogin) ist,

1
2
$ apt-file search /bin/rlogin
expect: /usr/bin/rlogin-cwd

lx_uwe

Avatar von lx_uwe

Anmeldungsdatum:
29. August 2017

Beiträge: 105

Es hat aber nicht jeder apt-file installiert oder möchte es.

Außerdem funktioniert es in so einem Fall auch nicht:

1
apt-file search /usr/bin/pager

... findet bei mir nichts, mein Script aber schon.

lx_uwe

Avatar von lx_uwe

Anmeldungsdatum:
29. August 2017

Beiträge: 105

 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash
#
# Ersatzfunktion für nmap
# Liefert schnell alle IPs eines Adressbereichs, bei denen es bei einer Verbindung zu einem bestimmten Port kein "Timeout" gab.
# Angezeigt werden nur die, bei denen es erfolgreich oder nicht oder beides war.
#
# verwendetete Tools: seq, grep, nc und xargs
#
# Beispiele:
# getips 192.168.178 22 2
# ... liefert alle IP-Adressen zwischen 192.168.178.1 und .254 mit erfolgreicher Verbindung zu Port 22
#
# getips 192.168.178 22 1
# ... liefert alle IP-Adressen mit "Connection refused" bei Port 22
#
# getips 192.168.178 22 0
# ... liefert alle gefundenen IP-Adressen ("1" und "2" zusammen)
#
# Beispiel mit paralleler Weiterverarbeiung:
# getips 192.168.178 22 2 | xargs -P 50 -I {} bash -c 'ssh -o BatchMode=yes uwe@{} hostname' 2>/dev/null
#
# ggf. anpassen:
# "-P 50" bzw. 254 gibt die Anzahl paralleler Jobs an (man xargs)
# "-w 1" gibt das Timeout in Sekunden vom nc an (man nc)
#
# Man sollte besser die "-P 254" am Anfang der Funktion ändern in "-P 50" und erstmal damit testen (bzw. sich sicher sein, dass "-P 254" kein Problem bereitet)

function getips {
    # Setze Standardwerte für IP-Bereich, Modus und Port
    local ipber="${1:-192.168.178}"
    local port="${2:-22}"
    local mode="${3:-0}"

    # Scanne den IP-Bereich parallel mit nc (netcat)
    local text
    text=$(seq 1 254 | xargs -P 254 -I {} bash -c "nc -w 1 -zv $ipber.{} $port 2>&1 | grep -v 'timed out'")

    # Verarbeite die Ausgabe basierend auf dem Modus
    case "$mode" in
        0)
            # Gib alle gefundenen IPs zurück
            echo "$text" | grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b'
            ;;
        1)
            # Gib nur IPs zurück, bei denen die Verbindung abgelehnt wurde
            echo "$text" | grep -oP '\d{1,3}(\.\d{1,3}){3}(?=.*refused)'
            ;;
        2)
            # Gib nur IPs zurück, bei denen die Verbindung erfolgreich war
            echo "$text" | grep -oP '\d{1,3}(\.\d{1,3}){3}(?=.*succeeded)'
            ;;
        *)
            echo "Ungültiger Modus: $mode. Verwende 0 (alle IPs), 1 (abgelehnte IPs) oder 2 (erfolgreiche IPs)."
            return 1
            ;;
    esac
}
Antworten |