Author Archive

Adressen zerlegen mit Python

Ich bin kürzlich auf die Herausforderung gestoßen, verschiedene Adresstypen aufzusplitten. Gegeben war immer die Straße und die Hausnummer, allerdings in verschiedenen länderspezifischen Variationen.

Hier eine Datei Datensatz.txt mit den Straßen:

Thanelstr. 46
Sieglinde-Briemer-Straße 716
Rennerstr. 542a
34, Rue de la Chanson
456 Market Square
Auf der Burg
Auf der Burg 234
90211 Melrost Place, Apt. 1

Hinweis: Benötigt man größere Mengen an Fake-Adressen, dann leistet die Faker-Bibliothek (https://github.com/joke2k/faker) gute Dienste. Mit dem folgenden Python-Code gelingt der Split in Straße und Hausnummer recht gut:

with open('Datensatz.txt', 'rt', encoding='utf-8') as eingabedatei:
    for zeile in eingabedatei:
 
        if zeile[-1] == '\n':
            zeile = zeile[:-1] # Entferne Zeilenumbruch, falls vorhanden
        gesplittet = zeile.split(' ') # Splitte anhand des Leerzeichens
        print(gesplittet) # gibt die Liste aus
 
        if gesplittet[-1].isdigit() and gesplittet[0].isdigit():
            namensteil = ''
            for i in gesplittet[1:]:
                namensteil = namensteil + " " + i 
            print('Name ist "', namensteil.strip() ,  '", Hausnummer ist ',  gesplittet[0], sep = '')
 
        elif gesplittet[-1][0].isdigit() and gesplittet[-1][-1].isalpha():
            namensteil = ''
            for i in gesplittet[:-1]:
                namensteil = namensteil + " " + i 
            print('Name ist "', namensteil.strip() ,  '", Hausnummer ist ',  gesplittet[-1], sep = '')
 
        elif gesplittet[-1].isdigit():
            namensteil = ''
            for i in gesplittet[:-1]:
                namensteil = namensteil + " " + i 
            print('Name ist "', namensteil.strip() ,  '", Hausnummer ist ',  gesplittet[-1], sep = '')
 
        elif gesplittet[0].isdigit():
            namensteil = ''
            for i in gesplittet[1:]:
                namensteil = namensteil + " " + i 
            print('Name ist "', namensteil.strip() ,  '", Hausnummer ist ',  gesplittet[0], sep = '')            
 
        elif gesplittet[0][0].isdigit() and gesplittet[0][-1] == ',':
            namensteil = ''
            for i in gesplittet[1:]:
                namensteil = namensteil + " " + i 
            print('Name ist "', namensteil.strip() ,  '", Hausnummer ist ',  gesplittet[0][:-1], sep = '')

Ergebnis:

['Thanelstr.', '46']
Name ist "Thanelstr.", Hausnummer ist 46
['Sieglinde-Briemer-Straße', '716']
Name ist "Sieglinde-Briemer-Straße", Hausnummer ist 716
['Rennerstr.', '542a']
Name ist "Rennerstr.", Hausnummer ist 542a
['34,', 'Rue', 'de', 'la', 'Chanson']
Name ist "Rue de la Chanson", Hausnummer ist 34
['456', 'Market', 'Square']
Name ist "Market Square", Hausnummer ist 456
['Auf', 'der', 'Burg']
['Auf', 'der', 'Burg', '234']
Name ist "Auf der Burg", Hausnummer ist 234
['90211', 'Melrost', 'Place,', 'Apt.', '1']
Name ist "Melrost Place, Apt. 1", Hausnummer ist 90211

Die Lösung ist nicht optimal, besser fährt man sicher mit libpostal und seinen Python-Bindings (https://github.com/openvenues/pypostal)

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Ein Jahreskalender mit LaTeX und Excel

This entry is part 2 of 3 in the series Kalender mit tikz-kalender

Anbei ein Jahreskalender für 2020, erstellt mit LaTeX und Excel. Excel deshalb, weil die Datumsfunktionen recht praktisch sind und mein LaTeX-Programmierkünste dafür nicht ausreichen.

Die Formel für die einzelnen Tage lautet:

=WENNFEHLER("\node at (" & C$2-1 &"," & -1* $B3 & ") [" & WENN(LINKS(TEXT(DATWERT($B3&"."&C$2&"."&$B$2);"TTT");1)="S";"weekend";"workday") & "] {\hspace*{-0.9em}{"  & TEXT(DATWERT($B3&"."&C$2&"."&$B$2);"TTT")   & "}};";"")

Inhaltlich geschieht dabei folgendes, am 1.1.2020 (Zelle C3)erklärt:

  1. Ich baue ein Datum aus dem Jahr in B2, dem Monat in C2 und dem Tag in B3
  2. Dieses Datum wird mittels TEXT() Funktion in den Tagesnamen umgewandelt
  3. Fängt dieser Tagesname mit „S“ an, handelt es sich um einen Wochenendtag, dann wird „weekend“ genutzt, sonst „workday“
  4. Dann setze ich den Tagesnamen in jeden einzelnen Node und verschiebe den Text dabei um -0.9em nach links (gibt sicher auch was in TikZ, was das macht, so ging es schneller)
  5. Wenn die Formel für den entsprechenden Tag einen Fehler bringt, weil der Tag (31.2.2020) nicht existiert, so wird nichts ausgegeben.
  6. Alle Node-Infos werden dann per copy paste in die TeX-Datei eingefügt und kompiliert

Hier die Dateien:

kalender.pdf

Kalendermacher_blog.xlsx

Hier der LaTeX-Code:

\documentclass{scrartcl}
\usepackage[a4paper,landscape,left=0.25cm,right=0.25cm,top=0.5cm,bottom=0.5cm]{geometry}
 
\usepackage[]{ifdraft}
\usepackage[]{attachfile}
\usepackage[]{eso-pic}
 
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\renewcommand{\familydefault}{\sfdefault}
\RequirePackage[scaled=0.9]{helvet}
\usepackage{tikz}
\usepackage[right]{showlabels}
\usetikzlibrary{positioning}
\pagestyle{empty}
 
\usepackage{xcolor}
 
\usepackage{hyperref}
\usepackage{url}
 
\definecolor{weekendday}{RGB}{240,240,240}
\newcommand{\file}[1]{\textattachfile{#1}{\textcolor{blue}{\LaTeX\ Sourcecode}}}
 
\begin{document}  
 
\AddToShipoutPictureFG*{
  \put(35,10){\footnotesize Uwe Ziegenhagen, ziegenhagen@gmail.com %, \file{\jobname.tex}	
}
}
 
\begin{center}
\begin{tikzpicture}
[
    x=23mm,y=6mm,
    mybox/.style={rectangle,rounded corners,minimum width=23mm, minimum height=6mm,align=left},
	month/.style={mybox,align=center,draw=black,align=left,fill=white,thick,font=\bfseries\large},
    date/.style={mybox,draw=gray,fill=white,align=left,thick,minimum width=5mm,font=\bfseries\large},
    workday/.style={mybox,draw=black,text width=1.5cm,font=\bfseries\tiny},
    weekend/.style={mybox,draw=black,text width=1.5cm,fill=weekendday,font=\bfseries\tiny}
]
\node at (0,0) [month] {Januar};
\node at (1,0) [month] {Februar};
\node at (2,0) [month] {März};
\node at (3,0) [month] {April};
\node at (4,0) [month] {Mai};
\node at (5,0) [month] {Juni};
\node at (6,0) [month] {Juli};
\node at (7,0) [month] {August};
\node at (8,0) [month] {September};
\node at (9,0) [month] {Oktober};
\node at (10,0) [month] {November};
\node at (11,0) [month] {Dezember};
 
\node at (-0.7,-1) [date] {01};
\node at (-0.7,-2) [date] {02};
\node at (-0.7,-3) [date] {03};
\node at (-0.7,-4) [date] {04};
\node at (-0.7,-5) [date] {05};
\node at (-0.7,-6) [date] {06};
\node at (-0.7,-7) [date] {07};
\node at (-0.7,-8) [date] {08};
\node at (-0.7,-9) [date] {09};
\node at (-0.7,-10) [date] {10};
\node at (-0.7,-11) [date] {11};
\node at (-0.7,-12) [date] {12};
\node at (-0.7,-13) [date] {13};
\node at (-0.7,-14) [date] {14};
\node at (-0.7,-15) [date] {15};
\node at (-0.7,-16) [date] {16};
\node at (-0.7,-17) [date] {17};
\node at (-0.7,-18) [date] {18};
\node at (-0.7,-19) [date] {19};
\node at (-0.7,-20) [date] {20};
\node at (-0.7,-21) [date] {21};
\node at (-0.7,-22) [date] {22};
\node at (-0.7,-23) [date] {23};
\node at (-0.7,-24) [date] {24};
\node at (-0.7,-25) [date] {25};
\node at (-0.7,-26) [date] {26};
\node at (-0.7,-27) [date] {27};
\node at (-0.7,-28) [date] {28};
\node at (-0.7,-29) [date] {29};
\node at (-0.7,-30) [date] {30};
\node at (-0.7,-31) [date] {31};
 
\node at (11.7,-1) [date] {01};
\node at (11.7,-2) [date] {02};
\node at (11.7,-3) [date] {03};
\node at (11.7,-4) [date] {04};
\node at (11.7,-5) [date] {05};
\node at (11.7,-6) [date] {06};
\node at (11.7,-7) [date] {07};
\node at (11.7,-8) [date] {08};
\node at (11.7,-9) [date] {09};
\node at (11.7,-10) [date] {10};
\node at (11.7,-11) [date] {11};
\node at (11.7,-12) [date] {12};
\node at (11.7,-13) [date] {13};
\node at (11.7,-14) [date] {14};
\node at (11.7,-15) [date] {15};
\node at (11.7,-16) [date] {16};
\node at (11.7,-17) [date] {17};
\node at (11.7,-18) [date] {18};
\node at (11.7,-19) [date] {19};
\node at (11.7,-20) [date] {20};
\node at (11.7,-21) [date] {21};
\node at (11.7,-22) [date] {22};
\node at (11.7,-23) [date] {23};
\node at (11.7,-24) [date] {24};
\node at (11.7,-25) [date] {25};
\node at (11.7,-26) [date] {26};
\node at (11.7,-27) [date] {27};
\node at (11.7,-28) [date] {28};
\node at (11.7,-29) [date] {29};
\node at (11.7,-30) [date] {30};
\node at (11.7,-31) [date] {31};
 
 
% hier kommen die Sachen aus Excel rein
 
\end{tikzpicture}
\end{center}
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mit Python PDFs herunterladen

Mit dem folgenden Python-Skript lassen sich auf einfache Weise alle PDFs von einer Webseite herunterladen.

from bs4 import BeautifulSoup
import urllib.request
import requests
 
url = 'http://irgendeineurl.de'
 
r  = requests.get(url)
data = r.text
soup = BeautifulSoup(data)
 
for link in soup.find_all('a'):
    if link.get('href').endswith('.pdf'):
        urllib.request.urlretrieve(url + link.get('href'), link.get('href'))
        print(url + link.get('href'))

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Beancount: einfache Beispieldatei

This entry is part 2 of 2 in the series beancount

Hier eine einfache Datei für die Arbeit mit beancount.

  • Max Mustermann hat ein Girokonto mit 0,00 Euro zum 1.1.2019
  • Er bezieht 1000,00 Euro Netto-Einkommen am 3. eines Monats
  • Am 15. eines Monats bezahlt er 300 Euro Miete
  • Am 20. eines Monats zahlt er 50 Euro Nebenkosten
  • Er gibt ungefähr 100 Euro für Lebensmittel aus, die er bar oder per Lastschrift kauft
option "name_assets"  "Vermoegen"
option "name_liabilities" "Verbindlichkeiten"
option "name_income"  "Einkommen"
option "name_expenses" "Ausgaben"
option "name_equity"  "Eigenkapital"

2019-01-01 open Vermoegen:Girokonto EUR
2019-01-01 open Vermoegen:Barkasse EUR
2019-01-01 open Ausgaben:Lebensmittel
2019-01-01 open Ausgaben:Wohnen:Miete
2019-01-01 open Ausgaben:Wohnen:Nebenkosten
2019-01-01 open Einkommen:Gehalt

2019-01-03 * "Gehalt"
  Einkommen:Gehalt -1000.00 EUR
  Vermoegen:Girokonto 1000.00 EUR

2019-01-15 * "Miete"
  Vermoegen:Girokonto -300.00 EUR
  Ausgaben:Wohnen:Miete 300.00 EUR

2019-01-20 * "Nebenkosten"
  Vermoegen:Girokonto -50.00 EUR
  Ausgaben:Wohnen:Nebenkosten 50.00 EUR

2019-01-17 * "Geld abheben"
  Vermoegen:Girokonto -50.00 EUR
  Vermoegen:Barkasse 50.00 EUR

2019-01-17 * "Lebensmittel"
  Vermoegen:Barkasse -29.95 EUR
  Ausgaben:Lebensmittel 29.95 EUR

2019-01-23 * "Lebensmittel"
  Vermoegen:Girokonto -70.88 EUR
  Ausgaben:Lebensmittel 70.88 EUR

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Kalender mit tikz-calendar erstellen

This entry is part 3 of 3 in the series Kalender mit tikz-kalender

Hier ein Beispiel, wie man mit tikz-calendar Jahreskalender erstellen kann. Kalenderereignisse müssen in einer externen Datei abgelegt werden, im Beispiel ist das die meineevents.events.

Die Farbnamen für die einzelnen Elemente lassen sich in https://www.sciencetronics.com/greenphotons/wp-content/uploads/2016/10/xcolor_names.pdf nachlesen.

\documentclass{tikz-kalender}
 
\setup{%
lang=german,
year=2020,
showweeknumbers=true,
title={Urlaub},
xcoloroptions={x11names},
titleColor=cyan, 
eventColor=brown,
periodColor=lime,
monthBGcolor=red,
monthColor=Purple0,
workdayColor=yellow,
saturdayColor=magenta,
sundayColor=orange,
events={meineevents} % Einbinden der events-Datei
}
 
\begin{document}
\makeKalender
\end{document}

Hier der Inhalt der meineevents.events:

\event{\year-10-09}{John Lennon (1940)}
\event{2020-10-03}{Tag d. dt. Einheit}
\event*{2020-04-12}{Ostersonntag}
\period{2020-02-01}{2020-02-06}[color=Gray0,name={Urlaub}]; 

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mit RSA-Schlüsseln auf Linux anmelden

Bislang habe ich immer die Kombination aus Username/Passwort für die Authentifizierung an meinen Linux-Maschinen genutzt, aus purer Faulheit stelle ich aber aktuell auf schlüssel-basierte Logins um. Hier eine kurze Anleitung, wie man die entsprechenden Schlüssel unter Windows erstellt.

Als SSH-Shell nutze ich unter Windows putty, das mit puttygen auch einen entsprechenden Key-Generator mit sich bringt. Diesen startet man, wählt „SSH-2 RSA“ aus, trägt bei der Schlüssellänge 4096 ein und drückt „Generate“

Anschließend bewegt man die Maus, um genügend Entropie zu erzeugen.

Nachdem die Schlüssel fertiggestellt sind, kann man mit „Save public key“ und „Save private key“ die beiden Schlüssel speichern. Ein Passwort legen wir hier explizit nicht fest, denn wir wollen ja ein passwort-losen Login.

Die public-Key-Datei kopieren wir dann auf die Linux-Maschine, ich habe dazu einfach WinSCP genutzt.

Auf der Linux-Maschine loggt man sich dann mit Username und Passwort ein und legt a) die Datei ~/.ssh/authorized_keys an, falls diese noch nicht existiert. Dann kopiert man mittels cat >> .ssh/authorized_keys den neuen Key an das Ende der authorized_keys.

Nun muss nur noch in Putty in den Eigenschaften der Verbindung der private key hinterlegt werden und die Session gespeichert werden, die schlüssel-basierte Verbindung sollte jetzt klappen.

Bei mir tat sie das nicht, mein Linux-Server brachte nur die Meldung „Server refused our key“. Die Lösung fand sich dann unter https://www.hpbyte.ch/index.php?/archives/842-PuTTY-und-Server-refused-our-key.html bzw. unter http://www.walkernews.net/2009/03/22/how-to-fix-server-refused-our-key-error-that-caused-by-putty-generated-rsa-public-key/

Der Key muss a) in einer Zeile stehen und b) es muss ssh-rsa davor stehen. Diese Anpassungen habe ich dann unter Windows schnell gemacht (per Ultraedit, jeder andere Editor sollte auch gehen, mit vim wie unter den Links beschrieben kenn ich mich nicht so gut aus) und die oben erwähnten Schritte (auf den Server kopieren, an die authorized_keys anhängen) nochmal gemacht. Jetzt klappt’s auch mit der Verbindung.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Doppelte Buchführung mit Beancount

This entry is part 1 of 2 in the series beancount

Seit einiger Zeit trage ich mich mit der Idee, privat auf doppelte Buchführung umzusteigen, um vielleicht einen besseren Überblick über die Finanzen zu gewinnen. Es gibt neben den diversen kommerziellen Lösungen einige OpenSource-Programme, die doppelte Buchführung umsetzen, ich bin bei Beancount hängengeblieben. Alternativen im OpenSource-Bereich wären noch hledger (https://hledger.org) oder GnuCash (https://www.gnucash.org).

An beancount hat mir gefallen, dass es a) in Python implementiert ist und b) es mit fava (https://github.com/beancount/fava) ein leistungsfähiges Web-Interface gibt. Die Installation unter Linux ist einfach, unter Windows benötigt man leider einen installierten C++ Compiler. Dazu vielleicht in einem anderen Beitrag mehr.

Hier nun ein Beispiel für beancount, ich wähle dazu eine einfache Blumengeldkasse, in die einige Kollegen einzahlen, um daraus Blumensträuße zu kaufen.

Die Datei beginnt damit, dass einige Standard-Kategorien eingedeutscht werden und dann zum 01.01.2019 eröffnet werden. Zum 1.10.2019 werden dann zwei Forderungen gebucht (gegenüber den beiden Kollegen Martina und John haben wir eine Forderung von jeweils 5 Euro), Martina Mustermann zahlt dann am 03.10.2019 ihre 5 Euro in bar ein, was einerseits die Reduktion der Forderungen und zweitens die Erhöhung der Barkasse nach sich zieht. Am 5.10.2019 werden dann aus der Kasse 2 Euro genommen und für Blumen ausgegeben.

option "name_assets"  "Vermoegen"
option "name_liabilities" "Verbindlichkeiten"
option "name_income"  "Einkommen"
option "name_expenses""Ausgaben"
option "name_equity"  "Eigenkapital"

2019-01-01 open Vermoegen:Forderungen EUR
2019-01-01 open Vermoegen:Barkasse EUR
2019-01-01 open Ausgaben:Blumengeld EUR
2019-01-01 open Einkommen:Blumengeld EUR

2019-10-01 * "Martina Mustermann"
  Vermoegen:Forderungen                         5.00 EUR
  Einkommen:Blumengeld                          -5.00 EUR

2019-10-01 * "John Doe"
  Vermoegen:Forderungen                         5.00 EUR
  Einkommen:Blumengeld                          -5.00 EUR

2019-10-03 * "Martina Mustermann"
  Vermoegen:Barkasse                            5.00 EUR
  Vermoegen:Forderungen                         -5.00 EUR

2019-10-05 * "Blumen für Max"
  Ausgaben:Blumengeld                              2 EUR
  Vermoegen:Barkasse                              -2 EUR

In fava sieht die Auswertung dann so aus:

Ich bin in dem Thema noch sehr am Anfang, je nach verfügbarer Zeit werde ich noch einige Grundlagenartikel zu diesem Thema schreiben.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mehr Power im Terminal mit tmux – Teil 3

This entry is part 3 of 3 in the series tmux

Hier nun zum letzten Teil der tmux Serie. Neben der Möglichkeit, mehrere Fenster zu erstellen, zwischen denen man hin- und herwechseln kann, bietet tmux auch die Möglichkeit der sogenannten „panes“ bzw. „Scheiben“.

Wir schließen wir dazu alle Fenster und nutzen dann Ctrl-b %, um das Fenster entlang der vertikalen Achse zu splitten.

Mit Ctrl-b " könnten wir das Fenster entlang der horizontalen Achse splitten.

Diese beiden Befehle können auch kombiniert werden, wie das folgende Bild zeigt.

Zwischen den Fenstern wechselt man mittels Ctrl-b Pfeiltaste, mit Ctrl-b x wird die aktuelle „Scheibe“ geschlossen.

Noch mehr Hinweise zu tmux findet man unter anderem hier:

  • https://tmuxcheatsheet.com
  • „tmux 2: Productive Mouse-Free Development“ von Brian P. Hogan
  • „Getting Started with tmux“ von Victor Quinn J.D.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mehr Power im Terminal mit tmux – Teil 2

This entry is part 2 of 3 in the series tmux

Ausgehend von einer laufenden tmux Session schauen wir uns heute die grundlegende Bedienung an.

Innerhalb meiner tmux Session kann man beispielsweise mittels Ctrl-b c ein neues Fenster erstellen.

Man erkennt es im folgenden Bild daran, dass neben 0:bash- ein 1:bash* steht. Das Sternchen steht dabei für das gerade aktive Fenster.

Zwischen den verschiedenen Fenstern kann man über die folgenden Tastenkombinationen wechseln:

  • Ctrl-b 0 .. 9 um direkt zu einer Shell zu springen
  • Ctrl-b n für das nächste Shell-Fenster
  • Ctrl-b p für das letzte

Mittels Ctrl-b & schließt das aktuelle Shell-Fenster, tmux fragt sicherheitshalber aber noch einmal nach, ob man das Fenster wirklich schließen möchte.

Da viele identische „Bash“ Strings als Bezeichner schnell unübersichtlich sind, kann man mit Ctrl-b , das aktuelle Fenster umbenennen.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mehr Power im Terminal mit tmux – Teil 1

This entry is part 1 of 3 in the series tmux

In den letzten Tagen habe ich mich ein wenig mit tmux beschäftigt, einem Terminal-Multiplexer für Linux und Unix, der aber auch im Windows-Subsystem für Linux funktioniert.

Was ist ein Terminal-Multiplexer? Die englische Wikipedia [1] schreibt dazu folgendes:

„tmux is a terminal multiplexer for Unix-like operating systems. It allows multiple terminal sessions to be accessed simultaneously in a single window. It is useful for running more than one command-line program at the same time. It can also be used to detach processes from their controlling terminals, allowing SSH sessions to remain active without being visible.“

Also:

  • man kann mehrere Terminal-Sessions gleichzeitig in einem Fenster offen haben, bricht die Verbindung ab
  • bricht die SSH-Verbindung ab, so bleibt die Session trotzdem erhalten

Die Installation war recht einfach, per apt install tmux holt man sich das Paket auf die Maschine. Um bei jedem Login tmux sofort zur Verfügung zu haben, habe ich gemäß [2] folgendes der ~/.profile hinzugefügt:

if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then
    tmux attach -t default || tmux new -s default
fi

Startet man jetzt tmux, so erhält man den folgenden Bildschirm:

Im nächsten Teil schauen wir uns dann die grundlegende Bedienung an.

[1] https://en.wikipedia.org/wiki/Tmux
[2] https://www.tecmint.com/tips-for-tmux-terminal-sessions/

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website