Ich bin ein bisschen erstaunt, dass dies noch von niemandem gefragt wurde, aber auf hoher Ebene, was sollte jeder Entwickler über die Arbeit mit UNIX-basierten Systemen wissen?
Meine * nix-Erfahrung ist sehr begrenzt, da ich absolut keinen Grund habe, sie über Windows für meine eigenen Zwecke zu verwenden, aber es stehen zwei Interviews an, in denen die Unternehmen idealerweise jemanden mit * nix-Erfahrung wünschen. Ich habe kein Problem damit, mich damit vertraut zu machen, wenn sie ein Angebot machen, das ich annehmen möchte, aber die Investition lohnt sich nicht, wenn sich die meisten meiner Angebote mit Windows-Systemen befassen. hoffentlich ist das verständlich.
Welche Tools sollte ich kennen? Irgendwelche Macken, die ich beachten sollte? Gibt es gute, präzise Ressourcen, die schnell gelesen werden können, um ein umfassendes Verständnis zu erhalten?
Antworten:
Neben den Grundlagen wie der Verwendung der Befehlszeile usw. denke ich, dass das Grundlegende darin besteht, zu verstehen, wie das System strukturiert ist.
Ich denke, der größte Unterschied zwischen Windows und Unix besteht darin, zu verstehen, wie das System zusammenpasst. Windows passt mithilfe seiner API und der zugrunde liegenden Betriebssystemkomponenten wie COM zusammen. Obwohl dies oft vom Programmierer weg abstrahiert wird, weiß man beim Codieren über lange Zeit etwas über das COM-Threading-Modell, GDI und so weiter. Unix passt ganz anders. Unix basiert auf der Idee, kleine Komponenten und daraus größere Systeme mithilfe von IPC zu erstellen (häufig über einfache Pipes).
Sie fragen nach einer prägnanten Ressource, und zumindest für mich ist das Kernighan and Pike-Buch Unix Programming Environment der einzige Ausgangspunkt, um zu verstehen, wie Unix als Programmierumgebung funktioniert . Das Buch selbst fühlt sich zwar etwas veraltet an, ist aber das perfekte Beispiel dafür, was die Unix-Philosophie ist und wie man beim Codieren den "Unix-Weg" nutzen kann.
Wenn Sie zumindest die Seiten durchblättern, werden Sie verstehen, wie Sie Unix verwenden, um bessere Programme zu erstellen. Selbst wenn Sie sich als Windows-Typ identifizieren, ist das Wissen, das Sie daraus gewinnen, mehr oder weniger universell, wie dies bei Entwurfsmustern oder Softwareentwicklungspraktiken der Fall ist.
Wenn Sie mehr wissen möchten - vielleicht für Ihren Job oder vielleicht nur, weil es Ihnen gefallen hat -, probieren Sie nach dem Lesen der Unix-Programmierumgebung die erweiterte Programmierung in der UNIX (R) -Umgebung von Stevens aus. Es ergänzt das Kernighan- und Pike-Buch gut, und nach beiden haben Sie das meiste behandelt, was ich von einem Unix-Programmierer erwarte. Es gibt auch ein Stevens-Buch über Netzwerkprogrammierung, es wird auch empfohlen.
Neben Linux gibt es zwei Betriebssysteme, die es wert sind, ausprobiert zu werden: eines ist Plan9 , das in gewisser Weise ein besseres Unix als Unix ist, und das andere ist OpenBSD . OpenBSD wird von einem kleinen Team erstellt, ist also sehr konsistent und sehr gut dokumentiert, sodass es Spaß macht, darin herumzustöbern.
quelle
Wenn eine Organisation Unix-ähnliche Betriebssysteme verwendet, sollten alle Entwickler die grundlegenden Terminalbefehle kennen, um in der Dateistruktur zu navigieren, neue Dateien und Verzeichnisse zu erstellen, Dateien zu löschen, Tools zum Erstellen von Befehlszeilen zu verwenden, die Versionskontrolle in der Befehlszeile zu verwenden und Möglicherweise grundlegende Shell-Skripte, um sich wiederholende Aufgaben zu automatisieren. Meiner Meinung nach ist die Leistung des Terminals und die Verfügbarkeit von Befehlszeilentools auf Unix-ähnlichen Systemen ein großer Vorteil, zusammen mit der einfachen Möglichkeit, Skripte zu schreiben, um eine Reihe komplexer Aufgaben zu automatisieren, die Sie möglicherweise regelmäßig ausführen Basis.
Es gibt eine Reihe von Befehlszeilenanwendungen, mit denen Sie sich möglicherweise vertraut machen möchten. Werkzeuge wie
cat
,grep
,head
,tail
,more
, undless
für eine Reihe von Aufgaben nützlich sein, im Bereich von Dateien suchen durch Textübereinstimmungen zu finden, durch Log - Dateien zu lesen in Debuggen von Anwendungen zu unterstützen. Die Möglichkeit, Pipes und Feed-Ausgaben über diese Anwendungen zu verwenden, ist auch hilfreich, um die verfügbaren Informationen zu analysieren.Kenntnisse eines der wichtigsten Texteditoren (vi oder emacs) wären ebenfalls hilfreich. Welches Sie verwenden, ist eine persönliche Meinung, aber ich würde empfehlen, das zu verwenden, was Ihr Team verwendet (auf diese Weise gibt es jemanden in Ihrem Team, der Fragen beantwortet, wenn Sie Fragen haben). Nach meinen Erfahrungen bevorzugen viele "Hardcore" -Unix-Entwickler diese Tools gegenüber IDEs. Ich selbst bevorzuge eine IDE (auch in einer Unix-ähnlichen Umgebung), aber Texteditoren haben ihre Vorteile beim Lesen von Dateien. Ihre Befehlszeilennatur erleichtert das Durchsuchen von Dateien mit den im letzten Absatz erwähnten Tools und das anschließende Öffnen aller übereinstimmenden Dateien in einem dieser Editoren.
Neben der Verwendung der mit dem Betriebssystem gelieferten Tools sollten Sie auch die Unterschiede in den Bibliotheken berücksichtigen. Bibliotheken, die Systemaufrufe ausführen (z. B. Threading), unterscheiden sich wahrscheinlich zwischen den Betriebssystemen. Makefiles, die Flags zum Kompilieren auf einer bestimmten Architektur oder für ein bestimmtes Betriebssystem haben, können ebenfalls Probleme verursachen. Wenn Sie wissen, welche Betriebssysteme verwendet werden, wird dies einfacher. Sie finden Referenzen, die sich mit der Implementierung bestimmter Funktionen in diesem Betriebssystem befassen. Dies ist jedoch etwas, von dem ich erwarten würde, dass Sie es bei der Arbeit erledigen können (insbesondere für Betriebssysteme, die normalerweise in Unternehmensumgebungen verwendet werden und auf die Einzelpersonen nicht häufig Zugriff haben, wie z. B. Solaris).
quelle
Das Buch, das ich in meiner UNIX-Klasse verwendet habe, war "UNIX für Programmierer und Benutzer" von Glass and Ables . Gute solide Einführung in Systembefehle, Ablage- und Programmiertools, System- und Netzwerkübersicht und die verschiedenen Shells. Ziemlich kurz, wenn auch etwas teuer neu. Kommt auch in einer Linux-Variante .
Für mehr Tiefe: "Die Linux-Programmierschnittstelle" . Es ist kein leichtes Intro, aber wenn Sie jemals ein Referenzhandbuch benötigen, um alle Referenzhandbücher zur Programmierung auf Systemebene auf Systemen der * nix-Familie zu beenden, würde ich dieses auswählen.
quelle
Zunächst würde ich empfehlen, Ubuntu , einen guten Ausgangspunkt, auf einer Partition in Ihrem Computer zu installieren. Versuche ein bisschen damit zu spielen. Zum Beispiel ein Video mit seltsamen Codecs ansehen ... Dann müssen Sie wahrscheinlich das Terminal verwenden, um einige
apt-get install
Befehle auszuführen, und los geht's! Sie lernen, wie Sie ein Unix-ähnliches System verwenden. Das ist es. Beginnen Sie mit dem Codieren und Sie werden das Bedürfnis verspüren, beim Codieren zu lernen.Eine kurze Liste, die mir in den Sinn kommt:
Wenn Sie wirklich wissen möchten , wie ein Betriebssystem funktioniert und wie Unix-ähnliche Systeme funktionieren, werfen Sie zunächst einen Blick auf minix und lesen Sie das Betriebssystembuch von Tanenbaum .
quelle
apt-get
ist wahrscheinlich nutzlos undgedit
sollte jedem bekannt sein, der zuvor einen Texteditor verwendet hat. Jede Linux-Distribution (und jedes Unix-basierte Betriebssystem) verfügt über ein anderes Installations- / Update-Tool, und ich würde nicht erwarten, dass ein Entwickler die Umgebung so warten muss, wie dies von der IT durchgeführt wird. Außerdem haben Sie vergessen,emacs
als Alternative zu erwähnenvi
- welche Sie verwenden, hängt stark von Ihren persönlichen Vorlieben (und meiner Meinung nach von den Teampräferenzen) ab.purge
etwas tun. . Man weiß nie.