Philosophie der UNIX-Entwicklung

 Jeff Foster
Jeff Foster

Folgen

Jul 31, 2019 · 5 min lesen

Unix ist ein faszinierendes Betriebssystem. Ursprünglich bei Bell Labs in den späten 1960er Jahren konzipiert, wurde es aus Frustration über das Betriebssystem „Multics“ (Multiplexed Information and Computing Service) geboren. Unix ist mittlerweile über 50 Jahre alt (!) und die Linux-Implementierung treibt riesige Teile des Internets an.

Also – warum ist Unix so beliebt?

Meiner Meinung nach beruht der Erfolg von Unix auf der philosophischen Herangehensweise an die Entwicklung. Die UNIX-Philosophie wird von Doug McIlroy im Bell System Technical Journal in dokumentiert 1978:

1. Lassen Sie jedes Programm eine Sache gut machen. Um einen neuen Job zu machen, bauen Sie neu auf, anstatt alte Programme durch Hinzufügen neuer „Funktionen“ zu komplizieren.

2. Erwarten Sie, dass die Ausgabe jedes Programms zur Eingabe für ein anderes, noch unbekanntes Programm wird. Überladen Sie die Ausgabe nicht mit fremden Informationen. Vermeiden Sie stringent spaltenförmige oder binäre Eingabeformate. Bestehen Sie nicht auf interaktiven Eingaben.

3. Entwerfen und erstellen Sie Software, sogar Betriebssysteme, die frühzeitig, idealerweise innerhalb von Wochen, ausprobiert werden können. Zögern Sie nicht, die ungeschickten Teile wegzuwerfen und wieder aufzubauen.

4. Verwenden Sie Tools lieber als ungelernte Hilfe, um eine Programmieraufgabe zu erleichtern, auch wenn Sie einen Umweg machen müssen, um die Tools zu erstellen, und erwarten, dass Sie einige davon wegwerfen, nachdem Sie sie fertig verwendet haben.

Das war vor über 40 Jahren und fängt SOLID (Single Responsibility Principle, open/closed), Microservices, funktionale Pipelines, Agile und den Geist von DevOps ein!

Für viel mehr Details über die Unix-Philosophie, lesen Sie dieses Buch (frei verfügbar hier, aber kaufen Sie eine Kopie, um den Autor zu unterstützen!).

Schauen wir uns einige Beispiele der Unix-Philosophie in Aktion an.

Lassen Sie jedes Programm eine Sache gut machen. Um einen neuen Job zu machen, bauen Sie neu auf, anstatt alte Programme durch Hinzufügen neuer „Funktionen“ zu komplizieren.

cat macht genau eine Sache. Es verkettet Dateien und zeigt sie in der Standardausgabe an. Das ist alles, was es tut. Es macht keine Paginierung. Es bietet keine Suchfunktion. Es macht genau das, was es auf der Dose sagt und nicht mehr.

tr ist ähnlich. Es ersetzt „Text“, indem es von der Eingabe liest, Übersetzungen vornimmt und in die Ausgabe schreibt.

tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file

true und false sind vielleicht die besten Beispiele dafür, eine Sache gut zu machen. true tut nichts, erfolgreich! false tut nichts.

false && echo Hi # does nothing
true && echi Hi # Prints Hi

Zusammensetzung

“ Erwarten Sie, dass die Ausgabe jedes Programms zur Eingabe für ein anderes wird“

In Unix haben die meisten Operationen die Fähigkeit, die Standardausgabe in einem gut verstandenen Textformat zu lesen und zu schreiben. Mit einigen Befehlen wie | , > und < können wir die Ausgabe eines Programms einem anderen zuführen. Schauen wir uns einige Beispiele an:

In diesem Beispiel verwenden wir cat , um den Inhalt einer Datei auszugeben und die Ausgabe in wc einzuspeisen, der die Anzahl der Zeilen in einer Datei zählen kann.

cat foo.txt | wc -l

In diesem Beispiel verwenden wir history, um unsere am häufigsten verwendeten Befehle zu finden, indem wir sie mit cut, sort, uniq und head.

history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head

xargs ist das ultimative Schweizer Taschenmesser, mit dem Sie Befehle aus der Standardausgabe erstellen können. Lassen Sie es uns verwenden, um alle zu löschen „.tmp“ -Dateien im aktuellen Verzeichnis, nachdem sie mit find gefunden wurden.

find -type f *.tmp | xargs rm

Alles ist eine Datei

In UNIX ist alles eine Datei (oder genauer gesagt, alles ist ein Strom von Bytes). Dies bedeutet, dass dieselben APIs / Befehle zum Lesen eines CD-ROM-Laufwerks, zum Schreiben eines Netzwerksockels oder zum Ermitteln von CPU-Informationen verwendet werden können.

Zum Beispiel ist das gesamte /proc Dateisystem unter Linux nicht wirklich Dateien — es ist eine dynamische Ansicht von Informationen, die als eine Reihe von Dateideskriptoren verfügbar gemacht wird.

Einige Beispiele:

cat /proc/cpuinfo # Displays your CPU info exposed as a filefoo > /dev/null # Redirect output into a file called
# null (which discards everything)od -vAn -N1 -td1 < /dev/urandom # Display a random 1 byte number
# (via https://unix.stackexchange.com/a/268960

Automation

Lange vor dem „automate-all-the-things“war Unix da, errr, automatisieren alle Dinge

Obligatorische automatisieren alle Dinge Bild

cron ( mehr hier) hat in den letzten 40+ Jahren alle Dinge automatisiert. Cron-Jobs sind geplante Skripte, die zu festen Zeiten oder in festen Intervallen ausgeführt werden können.

Jeder Benutzer auf einem Unix-System verfügt über eine Reihe geplanter Aufgaben, die mit dem Befehl crontab angezeigt werden. Die Datei hat ein sehr einfaches Format, das Datum und Uhrzeit des ausgeführten Skripts angibt.

Der Befehl at ist eine freundlichere Alternative, hier ist ein Beispiel für das Auslösen eines Befehls bei 1145 am 31.

echo "cc -o foo foo.c" | at 1145 jan 31

Puppet, Chef, CFEngine, Ansible — all diese DevOps-Tools sind auf Unix-basierten Systemen geboren und aufgewachsen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Previous post Wie man verschiedene Sorten von Begonien anbaut
Next post Vitamin B-100 Komplex oral