Die Textkodierung einer Datei ändern (macOS)

Mit dem Kommandozeilentool iconv kann mit im macOS Terminal die Kodierung von Dateien ändern. Wenn man zum Beispiel die Kodierung einer Datei von iso-8859-1 auf utf-8 ändern möchte, geht das ungefähr so:

iconv -f iso-8859-1 -t utf-8 datei_iso.txt > datei_utf8.txt

In OS-X ist das Tool iconv standardmäßig enthalten, es sollte aber so ähnlich auch unter anderen Unixen und Linux funktionieren.

Der Terminal-Fenstermanager Screen

In letzter Zeit lerne ich immer mehr das Programm Screen schätzen. Es macht die Verwaltung von Server-Systemen wesentlich angenehmer, da es mehrere virtuelle Terminals bzw. „Fenster“ über einen Login erlaubt.

Eine sehr praktische Eigenschaft an Screen ist, dass die Screen-Sessions unabhängig von der bestehenden Server-Verbindung erhalten bleiben. Das heisst, man kann ein Script gefahrlos innerhalb einer Screen-Session starten, ohne Angst haben zu müssen, dass es durch einen Verbindungsabbruch gestoppt wird.

Im folgenden die wichtigsten Kommandozeilen-Parameter und Tastenkürzel nach dem Aufruf von Screen.

Eine neue Screen-Session startet man mit dem Kommando „screen“.

screen

Optional kann man der Session mit dem Parameter -S einen Namen geben.

screen -S SessionName

Wenn man mehrere Screen-Sessions mit verschiedenen Namen gestartet hat, kann man sich mit dem Parameter -ls eine Liste der bestehenden Screen-Sessions anzeigen lassen.

screen -ls

Wie gesagt, bleibt eine Screen-Session nach Beendigung des Terminals erhalten, vorausgesetzt, auf dem Server wurde kein Reboot durchgeführt.

Eine früher gestartet Screen-Session lässt sich mit dem Parameter -r wieder reaktivieren. Der SessionName ist nur dann notwendig, wenn mehrere screen-Sessions gestartet wurden.

screen -r SessionName

Im Folgenden, die Kürzel zur Steuerung innerhalb der Screen-Session. Screen-Kommandos werden im Allgemeinen mit ctrl-a und einer weiteren Taste ausgeführt.

ctrl-a d 	Screen Session in den Hintergrund setzen (detach)
ctrl-a ? 	Hilfe anzeigen

ctrl-a c 	Eine neues Fenster erstellen
ctrl-a 1-n 	Auf Fenster Nr. 1-n schalten 
ctrl-a "	Liste der Fenster anzeigen
ctrl-a A	Das aktuelle Fenster umbenennen
exit		Das aktuelle Fenster schliessen

Screen-Fenster lassen sich teilen um so mehr Informationen gleichzeitig im Terminal anzuzeigen.

ctrl-a S	Das aktuelle Fenster horizontal teilen
ctrl-a |	Das aktuelle Fenster vertikal teilen
ctrl-a tab	Zur nächsten Fensterregion springen
ctrl-a X	Die aktuelle Fensterregion entfernen
ctrl-a Q	Alle Regionen ausser der aktiven entfernen

Mit Python schnell mal einen HTTP- oder SMTP-Server starten

In Python ist so einiges nützliches eingebaut. Wir finden in Python beispielsweise einen kleinen HTTP-Server und auch einen SMTP-Server. Auf Systemen mit installiertem Python lassen sich so Dateien schnell und unproblematisch zum Download durch andere Computer freigeben oder man kann mal eben einen Mail-Server zum Testen der selbst programmierten E-Mail-Versende-Funktion starten.

Mit dem HTTP-Server Verzeichnisse freigeben

Um Dateien per HTTP freizugeben, einfach mit dem Terminal in den Ordner wechseln, den man freigeben möchte und dann den Python-HTTP-Server mit

python -m SimpleHTTPServer

starten.

Der Server ist danach auf Port 8000 erreichbar, also unter http://MEIN_COMPUTER:8000/.

Mit dem Python-SMTP-Server E-Mail-Versendung testen

Sehr nützlich für die Software-Entwicklung ist der Python-SMTP-Debug-Server, der alle empfangenen E-Mails lediglich direkt auf der Kommandozeile ausgibt. Einen solchen SMTP-Server kann man auf Port 1025 mit dem Befehl

python -m smtpd -n -c DebuggingServer localhost:1025

starten.

Weitere Informationen:

Der Befehl „cp -r *“ kopiert keine versteckten Dateien

Wenn man mit beispielsweise

cp -r * /zu/diesem/verzeichnis/

den Inhalt eines Verzeichnisses in ein anderes kopieren will, so werden keine versteckten Dateien kopiert. Der bash-Wildcard ‚*‘ gilt nämlich nicht für versteckte Dateien, also Dateien, die mit einem Punkt anfangen, wie z.B. „.htaccess“. Mit

cp -r * .[!.]* /zu/diesem/verzeichnis/

kopiert man auch die versteckten Dateien.

  • * kopiert „normale“ Dateien
  • .[!.]* kopiert Dateien, die mit einem ‚.‘ beginnen, ohne das übergeordnete Verzeichnis ‚..‘ zu kopieren

Siehe hierzu auch: Bash Wildcards

Passwortlose ssh-Authentifizierung

In Linux und Unix (also auch in macOS) kann man mit dem Kommandozeilen-Tool ssh-keygen ein Schlüsselpaar mir Public- und Private-Key anlegen, welches zur  Authentifizierung über ssh genutzt werden kann.

Über die Console bzw. das Terminal geben wir hierzu den Befehl ssh-keygen -t dsa ein

 1 | Sylvester:~ lisa$ ssh-keygen -t dsa
 2 | Generating public/private dsa key pair.
 3 | Enter file in which to save the key (/Users/lisa/.ssh/id_dsa): 
 4 | Created directory '/Users/lisa/.ssh'.
 5 | Enter passphrase (empty for no passphrase): 
 6 | Enter same passphrase again: 
 7 | Your identification has been saved in /Users/lisa/.ssh/id_dsa.
 8 | Your public key has been saved in /Users/lisa/.ssh/id_dsa.pub.
 9 | The key fingerprint is: [...]
10 | Sylvester:~ lisa$ cd ~/.ssh
11 | Sylvester:~ lisa$ ls
12 | id_dsa     id_dsa.pub

In Zeile 3 wird gefragt, wo man die Keys abspeichern möchte, als Antwort einfach Return drücken. Falls das Verzeichnis .ssh noch nicht existiert, wird es nun erstellt. Zur Passwortlosen Authentifizierung bei der Frage nach dem passphrase in Zeile 5 und 6 auch nur Return drücken (empty for no passphrase).

Im Verzeichnis ~/.ssh werden von dem Programm nun die zwei Dateien id_dsa und id_dsa.pub erstellt. id_dsa ist der Private-Key, id_dsa.pub der Public-Key. Der Private-Key sollte möglichst nicht in fremde Hände geraten.

Der Public-Key, also der Inhalt von id_das.pub muss nun auf dem Server in die Datei ~/.ssh/authorized_keys kopiert werden. Wenn der Ordner ~/.ssh oder die Datei noch nicht existiert kann man sie einfach erstellen.

Nachdem das alles erledigt ist sollte beim Login auf dem Server nicht mehr nach dem Passwort gefragt werden, da sich der Computer automatisch über die hinterlegten Keys authentifiziert.

Sylvester:~ lisa$ ssh techblog.7d0.de -l techlisa
Last login: Sat Jan 24 13:25:45 2009 from p0815ea9d.dip.t-dialin.net
Have a lot of fun...
techlisa@techblog.7d0.de:~>

Ich find´s praktisch und es soll ja auch sicherer sein, als die Authentifizierung mit Login und Passwort.

Zum Schluss noch die Manpage von ssh-keygen.

Beispiele zur Benutzung von grep und find

In einer bestimmten Datei nach einem Wort suchen:

grep suchwort datei.txt

Alle Dateien im aktuellen Ordner und Unterordnern finden, die einen bestimmten Text enthalten:

grep -R "suchwort" *

Alle Dateien im aktuellen Ordner finden, die wort1 oder wort2 im Inhalt haben

grep -E "(wort1|wort2)" *

Dateien im aktuellen Ordner und Unterordnern finden, deren Namen einem bestimmen Muster entsprechen:

find . -name "*.jpg"

Dateien finden, deren Namen nicht einem bestimmten Muster entsprechen:

find . ! -name "*.jpg"

Dateien finden, deren Namen einem bestimmten Muster entsprechen und die einen bestimmten Text enthalten:

find . -name "*.php" -exec grep -il "suchtext" {} ;

Dateien finden, die bestimmte Datei-Endungen haben (Mit Regular-Expressions finden):

find . -regex ".*(php|html|tpl)$"

Große Dateien finden (Dateien finden, die größer als ca. 500 MB sind):

find . -type f -size +500000k -exec ls -lh {} ;

Dateien finden, deren Pfade einem bestimmten Pattern entsprechen:

find . -path "*/.svn*"

Dateien finden, deren Pfade nicht einem bestimmten Pattern entsprechen:

find . ! -path "*/.svn*"

Dateien finden, die nicht einem bestimmten User (nicht root) gehören:

find . ! -user root

Dateien finden, die „oo“ oder „ee“ im Namen haben:

find . ( -name "*oo*" -or -name "*ee*" )

Dateien finden, die nicht „oo“ oder „ee“ im Namen haben:

find . ! ( -name "*oo*" -or -name "*ee*" )

Hier noch die Manpages zu grep und find.

„RewriteEngine not allowed here“ Fehlermeldung in apache2 (XAMPP)

Wenn vom apache-Webserver der Fehler „RewriteEngine not allowed here“ kommt, kann das daran liegen, dass, wie in meiner aktuellen XAMPP-Installation unter OS-X, „AllowOverride“ in der httpd.conf  auf „AuthConfig“ oder „None“ gesetzt wurde.

„AllowOverride“ definiert, welche Einstellungen der httpd.conf in einer .htaccess überschrieben oder geändert werden dürfen. Wenn man „AllowOverride“ auf „All“ setzt, lassen sich alle gewünschten Einstellungen in der .htaccess tätigen.

Hier der Ausschnitt aus meiner httpd.conf, der das Problem behoben hat:

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

Siehe hierzu auch: Konfigurationsdirektive: AllowOverride