Posts Tagged ‘Unix’

Dienstag, 1. Dezember 2020

Mehrere Unix Timestamps auf der macOS Kommandozeile in Daten umwandeln

Voraussetzung: MacPorts und das Utility gdate (unter Linux: date) (Teil des Pakets coreutils) sind installiert.

$ python -mjson.tool < netatmo.json | grep utc | cut -d ":" -f 2 | awk '{print $1}' | xargs -I '{}' gdate -d "@{}"
Mon Nov 30 22:28:06 CET 2020
Mon Nov 30 22:27:57 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 22:27:38 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 17:07:34 CET 2020
Mon Nov 30 17:07:21 CET 2020
Mon Nov 30 17:07:21 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:46 CET 2020
Mon Nov 30 22:07:42 CET 2020
Mon Nov 30 22:07:00 CET 2020
Mon Nov 30 22:07:07 CET 2020

Im vorliegenden Fall nahm mich Wunder, wann meine Netatmo-Sensoren das letzte Mal einen Wert an den Server übertragen hatten.

Mindestens zwei Stationen mit einer handvoll Sensoren haben den Wert seit gestern nicht mehr aktualisiert. Ich vermute auf Grund dieses Absturzes.

Hierzu lud ich über die Netatmo API das JSON mit den Daten aller meiner Stationen herunter, gab das JSON schön formatiert aus (ein Key-Value Pair pro Zeile), selektierte die Zeilen mit dem Attribut time_utc, isolierte deren Wert — die Unix Timestamp (ein Integer), entfernte die Leerzeichen vor und nach dem Wert und übergab die Liste der Werte mittels xargs dem Tool gdate zur Umwandlung in ein menschenlesbares Datum.

Tags: , , , , , , , , , , , , , ,
Labels: Apple, IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 14. April 2019

Apache meldet HTTP 403

Kürzlich hatte ich ein seltsames Problem, dass eine Web-Site bei einem Hosting-Anbieter beim Zugriff auf einen Unterordner folgende Fehlermeldung ausspuckte:

Im Pfad und im Unterordner war aber keine .htaccess-Datei vorhanden, die solche Zugriffe verhindert hätte. Nach einigen Minuten pröbeln und googlen dann die Lösung:

Die Verzeichnisse im Pfad zur index.php wiesen fehlerhafte Unix-Permissions auf; anstelle 755 war 700 eingestellt. Mit Transmit passte ich die Permissions an, und das Script reagierte darauf wie erwartet.

Tags: , , , , , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2011

Mehrere private SSH-Schlüssel auf einem Rechner?

Kein Problem! Man benutze hierzu einfach Einträge in der Datei ~/.ssh/config à la:

Host github github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa_git

Quelle: Best way to use multiple ssh private keys on one client

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 22. Dezember 2010

.bashrc wird beim Login nicht gelesen/ausgeführt

Da habe ich also all die nützlichen Anweisungen in meine ~/.bashrc eingefügt, damit beim Shellzugriff auf einen Linux-Server einerseits die Listings schön farbig ausgegeben werden, andererseits Nachfragen beim Löschen und Verschieben von Dateien erscheinen und so sicherstellen, dass ich aus Flüchtigkeit keine Dummheiten begehe:

...
export CLICOLOR=1
export LSCOLORS=DxGxcxdxCxegedabagacad
 
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
 
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Doch was ist los? Nach einem Login bleiben die Terminalfarben bei einem Listing eines Verzeichnisses … weiss auf schwarz!

Ein kurzer Test mittels

$ . ~/.bashrc

Quelle: Kurztipp: bash neustarten und .bashrc neu einlesen

zeigt dann aber rasch, dass die Farben wirklich erscheinen — wenn denn .bashrc auch beim Login geladen werden würde.

Ein Vergleich mit einem anderen, ordungsgemäss funktionierenden Debian GNU/Linux zeigt das Problem umgehend auf: Es fehlt die ~/.profile. Nachdem ich diese Datei erstellt und mit folgenden Zeilen gefüllt habe, funktioniert das Farbfernsehen per SSH dann auch ab dem ersten Login:

# ~/.profile: executed by Bourne-compatible login shells.

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

mesg n

Quelle: bashrc not getting read at login

Tags: , ,
Labels: IT, Linux

2 Kommentare | neuen Kommentar verfassen

Samstag, 14. August 2010

E-Mails mit imapfilter serverseitig ablegen

Seit vielen Jahren verwende ich das IMAP-Protokoll zum Zugriff auf alle meine Mail-Adressen. Doch leider nimmt die Mailflut immer mehr zu, und das stört.

Bis zum heutigen Tag habe ich mich „Regeln“ in Apple Mail beholfen, um Mails beim Eintreffen in die entsprechenden Unterordner abzulegen. Seit ich aber einen Laptop und ein iPhone besitze und zunehmend auch unterwegs Mails abrufe, wäre es äusserst nützlich, wenn ich eingehende Mails vollständig automatisch serverseitig vorsortieren und in Unterordner ablegen könnte.

Bisher war ich dazu genötigt, die Regeln von Apple Mail auf meiner Workstation zu Hause auf den Laptop zu übertragen. Immer wieder habe ich mir dabei vorgenommen, diese Redundanz aufzuheben. Heute ist es nun soweit!

Was tun? Wer einen dedizierten Mailserver im Keller stehen hat, wird sich auf procmail-Scripts stützen (ich habe auch schon darüber berichtet), die eingehende E-Mails nach bestimmten Kriterien in Unterordner verschieben. Dies ist für mich keine Option, weil mein von Genotec betriebener Mailserver keinen Shellzugriff bietet. Auch bietet der Hoster keine anständige Möglichkeit an, serverbasierte Filter einzurichten.

Heute nun bin ich via einer diesbezüglichen Frage auf der Community Serverfault auf imapfilter gestossen.

Installation

Zuerst installiert man sich das Paket unter Debian auf einem ans Internet angeschlossenen Server, der nonstopp läuft:

apt-get install imapfilter

Filterregeln erstellen

Anschliessend schreibt man sich mit der Sprache Lua (vgl. die Beispiele Rotating email into your inbox using imapfilter sowie sample.config.lua.txt) entsprechende Filter-Rezepte und legt diese nach einem chmod 600 * im Homefolder beispielsweise unter ~/.imapfilter/filter/ ab.

Nachfolgend ein solches „Rezept“ für einen meiner Mailkonti:

mbox = IMAP {
    server = 'mail.server.tld',
    username = 'user@domain.com',
    password = '********',
    ssl = 'ssl3'
}

-- Facebook
messages = mbox.INBOX:contain_from('facebookmail.com')
messages:move_messages(mbox['Facebook'])

...

-- AHC
messages = mbox.INBOX:contain_field('List-ID','gi-ch.googlegroups.com')
messages:move_messages(mbox['AHC'])

...

Wie man anhand dieses Beispiel sieht, kann man jedes beliebige Feld des Mail-Headers auswerten. Als Hilfe für alle verfügbaren contain_X-Befehle sei auf die Dokumentation unter imapfilter_config – imapfilter configuration file verwiesen. Es gibt auch noch andere Befehle, die es ermöglichen, noch deutlich feingranuliertere Regeln zu programmieren.

Hat man wie ich mehrere Mail-Konti, die abgegrast werden sollen, erstellt man entsprechende Filter für jedes Konto und legt diese im selben Ordner unter einem aussagekräftigen Namen ab.

Shell-Script schreiben

Damit man diese nun alle auf’s Mal durchackern lassen kann, empfiehlt sich, ein kleines Shell-Script zu schreiben:

#!/bin/sh

IMAPFILTER=`which imapfilter`
RECIPESROOT="~/.imapfilter/filter"

cd $RECIPESROOT

for RECIPE in *
do
        #echo "Running $IMAPFILTER -c '$RECIPESROOT/$RECIPE'"
        $IMAPFILTER -c "$RECIPESROOT/$RECIPE"
done

exit 0

Cron-Job einrichten

Anschliessend richtet man einen Cron-Job ein, der die Mailserver beispielsweise alle 5 Minuten nach neuen Nachrichten abfragt und je nachdem die Filterregeln anwendet:

*/5 * * * *	/usr/local/bin/imapfilter.sh

Fertig ist der kostenlose, transparente Filterservice für eingehende Mails.

Tags: , , ,
Labels: Linux

3 Kommentare | neuen Kommentar verfassen

Sonntag, 16. August 2009

UNIX-Porn

unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep

Quelle: What is your best programmer joke? – Stack Overflow

Tags:
Labels: Funny, IT

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 11. Dezember 2008

Perl 5 sucks!

Heute gerade erlebt:

For example, to install a module from the CPAN, you must first answer several questions to configure the CPAN client. Then, you download a package, which runs a small program, which generates a Makefile, which configures, builds, tests, and installs the module — if everything went correctly.

Quelle: Five Features Perl 5 Needs Now – O’Reilly Broadcast

Ich wollte mir App::Ack installieren. Zuerst versuchte ich es als normaler User, was aber (wohl wegen den Berechtigungen) nicht geklappt hat. Der Fragekatalog wurde durchgespult, viele Module heruntergeladen und irgendwo unter den vorbeiflimmernden Zeilen gab es dann irgendwann einmal eine Fehlermeldung, die ich natürlich übersehen habe.

Die Installation via sudo klappte leider auch nicht viel besser – vorerst jedenfalls. Auch hier lief irgendein Test schief und Ack wurde nicht installiert. Zwar war anhand der Fehlermeldung erkennbar, dass etwas schief gelaufen war – wie das Problem zu beheben sei, erfuhr ich aber nicht. Es ist dem Zufall zuzuschreiben, dass ich im Anschluss einige als „optional“ bezeichnete Test-Pakete installieren liess – und plötzlich war ack unter /usr/bin/ vorhanden. Heureka.

Was Perl braucht? Ein apt-get install ack – fertig. Obwohl ich Perl nicht gut genug kenne, denke ich, dass CPAN das Spiegelbild seiner Benutzer und seiner Programmierer ist: Umständlich, kompliziert, technikbesessen. Und somit für Endbenutzer wie mich nicht geeignet.

Tags: ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 9. Juli 2008

Der Programmier-Superstar und seine Mutter

Avie Tevanian had been working on Mach as a PhD student at Carnegie Mellon, and Steve Jobs recognized he was a star and hired him straight away. (Microsoft countered by hiring Avie’s old advisor to work on NT, which is kind of like Microsoft hiring my mom because I’m a good programmer.)

Quelle: Call Me Fishmeal.: Pimp My Code, Part 15: The Greatest Bug of All

Tags: , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen