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

13.2.19

SSH Zertifikats Check - One-liner

Bash-Script

#!/bin/bash
echo | openssl s_client -servername "$1" -connect "$1":443 2>/dev/null | openssl x509 -noout -issuer -dates -subject
Abspeichern z.B. als checkSSLCert.sh in /usr/bin

chmod +x /usr/bin/checkSSLCert

Aufruf

checkSSLCert [Domain]

Keys checken:

echo "--Certificate:" && openssl x509 -noout -modulus -in certificate_file && echo "--Key:" && openssl rsa -noout -modulus -in private_key


22.11.18

Firefox Extensions im JSON Format parsen

Ich suche ein bestimmtes Addon. Zunächst die komplette Anzeige

jq -r '.'  ~/.mozilla/firefox/xead1hks.default/extensions.json
 (Pfad zu den Extensions entsprechend anpassen)

 Alle Pfade zu den installierten Extensions ausgeben

jq -r '.addons[]| "\(.id) \(.path) \(.locales[0].name)"' ~/.mozilla/firefox/xead1hks.default/extensions.json

Suche nach einer bestimmten Extension.
Um eine Variable zu übergeben, muss diese als Argument an jq übergeben werden:
Beispiel: Suche nach Namen => $1 in Bash => $v1 in jq

found_ext=$(jq -r --arg v1 "$1" '.addons[] | select(.locales[0].name == $v1) | .path'  $extension_path)

 

 

IP-Adressen von Amazon parsen:

{
  "syncToken": "1640134401",
  "createDate": "2021-12-22-00-53-21",
  "prefixes": [
    {
      "ip_prefix": "3.5.140.0/22",
      "region": "ap-northeast-2",
      "service": "AMAZON",
      "network_border_group": "ap-northeast-2"
    },
 

wget -qO-  https://ip-ranges.amazonaws.com/ip-ranges.json | jq '.prefixes[] | .ip_prefix' -r

 

31.5.18

Bash - aktuellen Pfad herausfinden

## Aktuellen Pfad des Scripts herausfinden
Location="$(dirname "$(readlink -e "$0")")"


Bei Qnap mit Entware:
Location=$(/opt/bin/dirname $(/opt/bin/readlink -e "$0"))

Snippet, um Bilddaten aus einer Kameraüberwachung nach Datum abzulegen

checkfile()
{

    ## Datum holen  => 2018:05:15 19:01:26+02:00
    newdate=$(exiftool -T "-FileModifyDate" "$1") # | tr -d ':' | tr ' ' '_' | cut -d '+' -f 1)
    year=$(echo "$newdate" | cut -d ":" -f 1)
# Jahr, Monat und Tag holen => 2018-05-26
    yearandmonth=$(echo "$newdate" | awk -F ":" '{ print $1 "-" $2 "-" $3 }' | cut -d ' ' -f 1)
    newname=$(echo "$newdate" | tr -d ':' | tr -d ' ' | cut -d '+' -f 1 )
# Das entsprechende Unterverzeichnis anlegen  
mkdir -p "$year/$yearandmonth"
## Bilder verschieben
    mv "$1" "$SRCDIR/$year/$yearandmonth/${newname}_terrasse_move.jpg"

}


find $SRCDIR_TERRASSE -maxdepth 2 -iname '*.jpg' | while read file; do checkfile "$file";done

Ergebnis:
Verschieben zu 2018/2018-05-26/20180526122404_terrasse_move.jpg


Einzeiler, um Bilder anhand der Exif-Daten umzubenennen:

exiftool -d %Y-%m-%d_%H%M%S".jpg" "-filename<datetimeoriginal" "-filemodifydate<datetimeoriginal#" -ext jpg images/

Besser (bei mehreren zeitgleich aufgenommenen Bildern)
exiftool -d '%Y%m%d-%H%M%S%-02.c.%%e' '-filename<CreateDate'

Einzeiler, um Bildern aus einem Ordner ein Datum zuzuweisen
exiftool -m -overwrite_original "-AllDates=1990:01:01 12:00:00" -r -if '($filetype eq "JPEG")' .
-m ignoriert Fehlermeldungen, bei mir:
"Bad MakerNotes offset for Unknown_......"
 -overwrite_original Original wird überschrieben

3.5.18

Android SD-Karte unter Linux Shell ansprechen

Wenn man z.B. ein Linux System unter Virtualbox auf einem Windows-Hostsystem laufen hat, kann man wie üblich USB Geräte durchreichen.

Das funktioniert auch bei vielen Android Handys.
In der Ansicht des Dateimanagers erhält man dann z.B. ein Android-Gerät, über das man auf den dortigen Speicher zugreifen kann.

Wie aber kann ich dann ein rsync veranlassen?

Lösung:
Wenn auf das Android Gerät geklickt wird, sieht man z.B. "Interner gemeinsamer Speicher". Per Klick and Drop auf ein Terminal schieben und man sieht den kompletten Pfad, den man auch über die Kommandozeile ansprechen kann.

So kann es aussehen:

'/run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C004%5D/Interner gemeinsamer Speicher'


13.2.17

Bash - viele viele Nutzer anlegen

#!/bin/bash

GROUP="GRUPPE"
PASSWORD="Passwort"
HOME_BASE="/home/"
USER="Benutzername"

for ((i=1;i<25;i++))
do
  echo "Lege Benutzer ${USER}${i} an"
  /usr/sbin/useradd -g ${GROUP} -m -d "${HOME_BASE}${USER}${i}" "${USER}${i}"
echo "${USER}${i}":"${PASSWORD}${i}" | chpasswd
done.

11.2.17

Mit dem Raspberry den Arduino steuern

Hintergrund:
Ich habe ein Codeschloss installiert und mit einem Arduino verbunden.
Nun soll ein PI diesen ansteuern.
Nach etlichen Versuchen mit Python Scripten, nun erst einmal ein sehr einfaches Shell Script, mit dem ich das Menü des Arduino aufrufen kann.
Verbunden ist der Arduino ganz normal per USB mit dem Raspberry.

#!/bin/bash
SERIAL="/dev/ttyACM0"
while true
do
    read line
    echo $line > $SERIAL
    sleep 2
....
    cat $SERIAL
done
Ausgabe:

***** MENU ****
<enter> -> print this menu
  1     -> learn a code / paste csv-list of codes
  2     -> delete a code
  3     -> display all codes
  7     -> reset tamper flag & reboot
  8     -> save all codes to eeprom
  999   -> delete ALL codes in eeprom
Notes: Name entries max 9 characters.
       Action entries 1 for open, 0 for close.
To be continued...

20.10.15

Anruf von der FB über ein Bash-Script

Ziel:
Ich möchte automatisiert bei bestimmten Ereignissen angerufen werden.
Meine Fritzbox 7240 bietet ein Telnet-Login, wodurch ich durch Eingabe von

 echo 'ATDT[RUFNUMMER]' | nc 127.0.0.1 1011

einen Anruf veranlassen kann.

Das Ganze lässt sich mittels 'expect' auch mit einem Bash-Script realisieren.

Expect lässt sich auf einem Ubuntu System über

apt-get install expect installieren.

Dann muss man nur noch eine Befehlsdatei 'phone_me' anlegen, die folgenden Inhalt haben kann:

spawn telnet 192.168.1.1
expect "password:"
send "PASSWORT\n"
expect "#"
send  "echo 'ATDT[RUFNUMMER' | nc 127.0.0.1 1011 \n"
expect "OK"

Durch Eingabe von

expect phone_me

wird automatisiert ein telnet-Login durchgeführt und anschließend die Befehle abgearbeitet.
Bei manchen Fritzboxen kann anstelle des '#' auch etwas anderes nach dem Login erscheinen. Dieses also ggfs. anpassen.

16.8.15

Linux Bash: Fortschritt beim Kopieren berechnen

Ich kopiere oftmals große Datenmengen und möchte auf einen Blick wissen, welche Datenrate im Moment genutzt wird.
Das ganze gestaltet sich schwierig, wenn Hintergrundprozesse verwendet werden wie bei meinem NAS, wo ein Rsync läuft.

Aber ein Einzeiler hilft hier:

a=0;wait=10;while true; do i=`df -m | grep sdd | awk '{ print $3 }'`; echo -n $i " MByte => "; echo -n $(($i-$a)); echo " ==> " $((($i-$a)/$wait)) " MB/s"; a=$i; sleep $wait; done

Ich lasse mir anzeigen, welche Fortschritte im 10-Sekunden-Rhytmus gemacht werden, hier bei meiner Platte sdd1.
Natürlich ist die Anzeige nur korrekt, wenn nur ein Rsync-/Kopierauftrag läuft :)

Ausgabe z.B.:
104876  MByte => 44 ==>  4  MB/s


Das ist die belegte Plattengröße in Megabyte und anschließend die Änderung seit der letzten Anzeige.

Openhab und Ecoflow Max - API Anbindung

 Ich wollte die neu erworbene Powerstation in Openhab einbinden, um den aktuellen Status (Ladestand etc.) über Openhab auswerten zu können. ...