Webserver als Shell-Einzeiler

Unter den zahlreichen Möglichkeiten, einen Webserver zu implementieren, tauchen immer wieder sehr sparsame auf. Ein Blogger hat nun eine Variante vorgestellt, die in eine übersichtliche Bash-Zeile passt.

In Pocket speichern vorlesen Druckansicht 157 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Dusan Zivadinovic

Wenn zur Dateiübertragung zwischen zwei Rechnern die üblichen Wege per SMB-Freigabe oder USB-Stick gerade versperrt oder unbequem sind, kann man sich auf diverse Arten behelfen. Ein einfacher Weg besteht darin, auf Rechner A mal eben einen Webserver zu starten und die zu übertragende Datei per Browser auf Rechner B zu laden. Natürlich gehört es aber zum guten Entwickler-Ton, dafür möglichst wenig Aufwand zu betreiben – bis Apache geladen, eingerichtet und gestartet ist, hat man das längst per Kommandozeile erledigt.

Der Entwickler Răzvan Tudorică beschreibt in seinem Blog, wie man einen Webserver auf einem Linux-System mittels einer einzigen Bash-Zeile implementiert. Tudorică kommt mit den Befehlen echo, cat und netcat aus, die er in einer while-Schleife einbaut:

while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \
cat Dateiname; } | nc -l 8080; done

Von Rechner B ruft man den Webserver nach dem Muster http://IP-Adresse:8080 auf; also etwa http://192.168.112.36:8080, wenn das die IP-Adresse von Rechner A ist; der Browser erhält nun den Inhalt der Datei, die in dem Bash-Einzeiler genannt ist. Beim Speichern aus dem Browser muss man einen lokalen Dateinamen wählen, denn der Webserver liefert nur den Dateiinhalt ohne weitere Angaben. Auf Rechner A kann man in der Shell wunderbar die Anfrage des Browsers mitlesen.

Weitere Lösungen sind natürlich leicht denkbar und auf Tudoricăs Blog haben Leser schon einige genannt. Wer eine sportliche Herausforderung sucht: Wie wäre es mit einer noch kürzeren Variante? Oder einer, die mit noch weniger externen Befehlen auskommt? Netcat hat schließlich nicht jede Distribution an Bord, aber mittels Bash-Socket-Programming über das Pseudo-Device /dev/tcp sollte es auch ohne gehen. Und Windows? (dz)