Suche
Suche Menü

Emoji in Windows und Mac einfügen

Windows

Mit dem Kurzbefehl

Windows + .

wird an jedem Ort mit Texteingabe eine vollständigen Emoji-Palette angezeigt.

Mac

Mit dem Kurzbefehl

Cmd + Ctrl + Leertaste

wird an jedem Ort mit Texteingabe eine vollständigen Emoji-Palette angezeigt. Über das >>-Symbol können weitere Sonderzeichen wie mathematische, technische oder logische Sonderzeichen einfügen, welche über die normale Tastatur nicht eingefügt werden können.

QNAP: E-Mail in einem Bashscript versenden

In QNAP funktioniert der Versand von E-Mails ein wenig anders als von anderen Linuxsystemen gewohnt. QNAP setzt eine eingeschränkte Version von Linux ein, welche das Tool «ssmtp» einsetzt.

Hier ein Beispiel wie in einem Bashscript ein E-Mail über ssmtp versandt werden kann:

email="mail@domain.ch"
from="server@domain.ch"
subject="Backup successful"
message=$(tail -1000 "$logfile")
echo -e "To:$email\nFrom:$from\nSubject:$subject\n\n$message" | ssmtp $email

Im obigen Beispiel sende ich nach erfolgreichem Backup ein E-Mail an mail@domain.ch und befülle den Inhalt mit einem tail der letzten 1000 Zeilen des Backup Logs.

ssmtp nutzt die in QNAP hinterlegten Zugangsdaten für den Mailversand, welche auf der Weboberfläche konfiguriert werden können.

PHP 8.1 auf einem Raspberry Pi installieren

Vor kurzem ist die neue PHP Version 8.1 herausgekommen. Hier die Beschreibung wie PHP 8.1 auf einem Raspberry Pi installiert werden kann.

PHP Installieren

Als erstes müssen die entsprechenden Sourcen hinzugefügt werden. Als erstes müssen die GnuPG Keys heruntergeladen werden um die Pakete der Sourcequelle verifizieren zu können:

sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Nun das Repository hinzufügen:

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

Die Paketliste aktualisieren

sudo apt update

Nun kann PHP 8.1 sowie das Commandozeilen Interface (CLI) und weitere Extensions installiert werden. Der Platzhalter [ExtensionName] muss durch den Namen der jeweiligen Extension ersetzt werden.

sudo apt install -y php8.1-common php8.1-cli php8.1-[ExtensionName]

Beispiel mit gängigen Extensions:

sudo apt install -y php8.1-common php8.1-cli php8.1-mysql php8.1-xml php8.1-curl php8.1-zip php8.1-gd php8.1-imap 

Danach kontrollieren ob die PHP Version auch aktiv ist:

php --version

Mit folgendem Befehl kann geprüft werden, welche PHP Extensions installiert sind:

php -m

PHP in Apache Integrieren

sudo apt install -y libapache2-mod-php8.1

Sollte bereits eine Version von PHP in Apache aktiviert sein, so meldet die Installation

...
Creating config file /etc/php/8.1/apache2/php.ini with new versionlibapache2-mod-php8.1: php8.0 module already enabled, not enabling PHP 8.1

In diesem Fall muss die alte PHP Version deaktiviert werden und die neue Version aktiviert:

sudo a2dismod php8.0
sudo a2enmod php8.1

In diesem Fall ist die alte Verision die PHP Version 8.0.

Nun den Apache Webserver neustarten, damit die Anpassung aktiv wird.

sudo service apache2 restart

PHP Testen

Im public Verzeichnis des Webservers z.B. /var/www/html eine neue Datei phpinfo.php mit folgendem Inhalt erstellen:

<?php
phpinfo();

Nun kann kontrolliert werden, ob die korrekte PHP Version angezeigt wird. Die Datei sollte unbedingt nach dem Testen wieder gelöscht werden, sofern die Seite öffentlich zugänglich ist.

PHP deinstallieren

Wenn PHP wieder komplett entfernt werden soll, müssen folgende Befehle ausgeführt werden:

sudo apt purge --autoremove -y php-common mime-support

GPG Keys und Repositorys entfernen

sudo rm -rf /etc/apt/trusted.gpg.d/php.gpg
sudo rm -rf /etc/apt/sources.list.d/php.list

Weitere verknüpfte Datei entfernen:

sudo rm -rf /var/lib/systemd/timers/stamp-phpsessionclean.timer

Anrufkennung explizit unterdrücken oder anzeigen

Im Smartphone kann die Anzeige der eigenen Nummer global unterdrückt werden. Soll jedoch die Nummer nur vereinzelt unterdrückt oder angezeigt werden, so kann dies mit folgender Zeichenkette gemacht werden

Rufnummer für einzelnen Anruf unterdrücken

Mit der Zeichenfolge #31# zu beginn der Nummer wird die eigene Rufnummer für diesen Anruf unterdrückt.

Beispiel: #31#0621234567

Die Nummer kann so auch im Adressbuch gespeichert werden.

Rufnummer anzeigen

Wird die Rufnummer grundsätzlich unterdrückt, so kann diese für einzelne Anrufe auch wieder aktiviert werden. Dazu vor der Rufnummer mit der Zeichenfolge *31# beginnen.

Beispiel: *31#0621234567

Linux: mit grep Text in Dateien anzeigen

Um unter Linux Text in Dateien zu finden ist grep ein mächtiges Tool welches viele Optionen zum suchen ermöglicht.

grep -rnwi '/Pfad/zum/Ordner' -e 'Suchbegriff'

Bedeutung der Optionen:

  • -r bedeutet rekursiv, also über mehrere Ordnerebenen
  • -w wählt nur solche Zeilen aus, deren Treffer aus vollständigen Wörtern bestehen. So wird bei der Suche nach «Bad» keine «Badewanne» gefunden
  • -n gibt die Zeilennummer vor jedem Treffer aus
  • -i unterscheide nicht zwischen Groß- und Kleinschreibung.

Nur in bestimmten Dateitypen suchen / Dateitypen ausschliessen

Mit include und exclude kann in bestimmten Dateien gesucht werden, respektive bestimmte Dateitypen ausgeschlossen werden:

grep -rnwi --include=\*.{php,css} '/var/www/html/' -e "main"

grep -rnwi --exclude=\*.{php,css} '/var/www/html/' -e "main"

Bestimmte Ordner ausschliessen

Sollen beim Suchen bestimmte Ordner ausgeschlossen werden, so können diese über --exclude-dir ausgeschlossen werden. Wird dem Namen des Ordners ein * angehängt, kann auch nach allen Ordnern welche mit einem Namen beginnen oder enden gesucht werden.

grep -rwni --exclude-dir={lib,wp-*,admin} '/var/www/html/' -e "main"

Im obigen Beispiel werden die Ordner «lib», «admin» und alle Ordner welche mit «wp-» beginnen ausgeschlossen.

Weitere Optionen

  • -A gibt zusätzlich NUM Zeilen vor dem Kontext aus
  • -B gibt zusätzlich NUM Zeilen nach dem Kontext aus
  • -C gibt zusätzlich NUM Zeilen vor und nach dem Kontext aus. Zwischen zusammenhängende Gruppen von Treffern werden Zeilen mit «–» eingefügt
  • -c unterdrückt die normale Ausgabe und gibt stattdessen für jede Eingabedatei an, wieviele Zeilen auf die regular expression passen
  • -e verwende Muster als regular expression. Nützlich um Ausdrücke zu schützen, die mit einem - beginnen.
  • -H gibt den Dateinamen vor jedem Treffer aus.
  • -P verwendet Perl regular expressions.

Linux bash – Lockfiles

Um während einer Scriptausführung eine parallele Ausführung des selben Scirpts zu verhindern, kann man dazu ein Lockfile einsetzen.

Hier ein Beispiel wie der Lock aufgebaut werden kann:

#!/bin/bash

lockfile=~/lockfile.lock

# Check is Lock File exists, if not create it and set trap on exit 
if { set -C; 2>/dev/null >${lockfile}; }; then
         trap "rm -f ${lockfile}" EXIT
else
         echo "Lock file exists… exiting"
         exit
fi

# Do Something, Main script work here…  
echo "I am a script and I am doing something… anything…"  
sleep 30

Weitere Beispiele und Möglichkeiten finden sich hier:

https://www.putorius.net/lock-files-bash-scripts.html

Spaltenmodus in Notepad++

Von Ultraedit und Eclipse bin ich mir gewohnt mit dem Spaltenmodus zu arbeiten. Im Notepad++ fehlte mir diese Funktion jedoch. Vorhin habe ich entdeckt wie diese Funktionalität umgesetzt ist.

Alt+C öffnet den Spaltenmodus (Block-Editor). Der Befehl findet sich auch im «Bearbeiten»-Menü. Allerdings lässt sich damit nicht viel steuern. Nun ist der Einsatz als Spalteneditor simpel über reine Tasten respektive Tasten/Maus Steuerung gelöst.

Mit Alt+Shift+Cursor Tasten kann man eine Spalte selektieren.

Mit Alt+Mauszeiger ziehen lässt sich ebenfalls eine Spalte selektieren

Sollen fortlaufende Nummern in die Zeilen eingefügt werden, mit einem der obenstehenden Befehle den entsprechenden Bereich markieren. Dann mit Alt+C den Block Editor öffnen und die Option «Zahlen einfügen» wählen. Hier kann der Startwert und der Interval definiert werden.

Cronjob auf QNAP einrichten

Damit ich das nächste Mal nicht suchen muss, dokumentiere ich hier, wie auf einem QNAP NAS ein Cronjob eingerichtet werden kann.

Mit folgendem Befehl können die aktuellen Cronjobs angezeigt werden:

crontab -l

Der normale Befehl crontab -e funktioniert auf QNAP nicht, da dieser bei einem Neustart des Geräts überschrieben werden würde. Deshalb muss die Crontab Datei direkt bearbeitet werden.

vi /etc/config/crontab

Nach dem die Cronjobs angepasst und die Datei gespeichert wurde, muss das Crontab file neu geladen und der cron daemon neu gestartet werden.

crontab /etc/config/crontab && /etc/init.d/crond.sh restart

Postfix als Send-Only-SMTP Server installieren und konfigurieren

Um auf einem Linux Server (in meinem Beispiel Ubuntu) Mails versenden zu können, kann Postfix als SMTP Server konfiguriert werden.

Postfix installieren

Postfix lässt sich am schnellsten mit den Mail-Utils installieren

sudo apt update
sudo apt install mailutils

Während der Installation fragt Postfix nach dem Modus in dem es installiert werden soll

Als Standard-Option ist «Internet Site» vorbelegt. Dies ist für unseren Anwendungsfall korrekt. Sollte diese Meldung während der Installation nicht erfolgen, so kann dies mit folgenem Befehl die Konfiguration von Postfix nochmals durchgeführt werden:

sudo dpkg-reconfigure postfix

Anschliessend den Namen des Servers festlegen. Der System-E-Mail-Name muss gleich sein wie der Name, welcher deim erstellen des Servers diesem zugewiesen wurde.

Konfiguraton von Postfix

Nun muss die Konfiguration von Postfix angepasst werden, so dass die E-Mails über einen externen SMTP Server versandt werden können.

sudo nano /etc/postfix/main.cf

Folgende Zeilen müssen angepasst werden (bestehende Werte ersetzen)

inet_interfaces = loopback-only
mydestination = localhost.$mydomain, localhost, $myhostname

SMTP Authentification über SASL aktivieren

In der main.cf folgende weiteren Zeilen erweitern (relayhost ist bereits im File vorhanden)

smtp_use_tls = yes
smtp_tls_wrappermode = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

relayhost = [mail.domain.ch]:465

–> relayhost muss mit dem genutzten Mailserver ergänzt werden.

sasl_passwd Datei erstellen

Nun die sasl_passwd Datei erstellen

sudo nano /etc/postfix/sasl_passwd

Folgenden Inhalt einfügen:

[mail.domain.ch]:port user:pass
Anschliessend die Datenbank hashen

sudo postmap /etc/postfix/sasl_passwd

Nun Postfix neustarten

sudo service postfix restart

Test-E-Mail versenden

Über folgenden Befehl kann nun getestet werden ob E-Mails über Postfix versandt werden können:

echo "Das ist der E-Mail Inhalt!" | mail -s "Betreff des Mails" -a "From: absender@domain.ch" empfaenger@domain.ch

Sollte kein E-Mail ankommen, so kann im Logfile nachgeschaut werden was Postfix zurückmeldet:

tail -100 /var/log/mail.log

Absenderadresse fix einstellen

Je nach dem kann es sinn machen, eine fixe E-Mailadresse als Absender einzustellen, da über den SMTP Server nur definierte E-Mailadressen oder Domains verwendet werden können. Diese Konfiguration ändert die Absenderadressen sowohl von lokalem als auch von weitergeleitetem SMTP-Mailverkehr:

In der /etc/postfix/main.cf folgendes einfügen:

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

Rewrite der Absenderadresse von E-Mails, die vom Server selbst stammen.

In der /etc/postfix/sender_canonical_maps folgendes hinterlegen:

/.+/    adresse@domain.ch

Rewrite von Adressen welche über SMTP relayed wurden

In der /etc/postfix/header_check folgendes hinterlegen:

/From:.*/ REPLACE From: adresse@domain.ch

Mac spezifische Dateien .DS_Store und __MACOSX Ordner aus einer Zip-Datei entfernen

Erhält man von einem Mac-User eine Zip-Datei, enthält diese immer Dateien und Ordner welche unter Windows oder Linux keinen Zweck haben. So gibt es .DS_Store Dateien und einen __MACOSX Ordner. Diese Dateien sind normalerweise versteckt und werden je nach Einstellung angezeigt.

In den Dateien werden von MacOS Informationen zur Datei- und Ordnerstruktur sowie Datei-Icons gespeichert. Diese Dateien werden automatisch angelegt und können nicht wirklich gelöscht werden, da sie als Metadaten vom Betriebssystem unmittelbar danach wieder angelegt werden.

Die nachfolgende Anleitung bezieht sich auf das Entfernen unter Mac OS.

.DS_Store Dateien aus einem Zip-Archiv entfernen

Auf dem Mac das «Terminal» öffnen. Danach den folgenden Befehl eingeben.

zip -d /pfad/zur/zip-datei/DATEINAME.zip \*.DS_Store

Mit dem -d werden die angegebenen Dateien entfernt.

__MACOSX Ordner entfernen

Auch diese Ordner können über das Terminal in der Zip-Datei bereinigt werden

zip -d /pfad/zur/zip-datei/DATEINAME.zip "__MACOSX*" 

Beide Befehle kombinieren

Natürlich kann die Bereinigung auch mit einem Durchgang ausgeführt werden:

zip -d /pfad/zur/zip-datei/DATEINAME.zip "__MACOSX*" \*.DS_Store