Was sollten Entwickler über UNIX-basierte Systeme wissen?

8

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?

rwar
quelle
Welche Art von Entwicklung machst du? Für die Programmierung auf hoher Ebene wäre es ein großes Plus, die grundlegenden Befehle auf dem Terminal zu kennen, zusammen mit der Kenntnis eines der wichtigsten Texteditoren (vi, emacs). Für die Programmierung auf niedrigerer Ebene müssen Sie mehr über Systemaufrufe, systemspezifische Header-Dateien und den Umgang mit Threading auf Systemebene wissen. Zum Beispiel hat plattformübergreifendes C ++ viele Nuancen - ich habe jetzt ein System, das auf allen wichtigen Betriebssystemen außer Solaris kompiliert werden kann.
Thomas Owens
Ah, tut mir leid. Ich interessiere mich hauptsächlich für die Programmierung auf niedrigerer Ebene, aber es ist auch hilfreich, Befehle zu kennen.
Rwar
Vielleicht möchten Sie auch dies lesen: programmers.stackexchange.com/questions/89249/…
WarrenFaith
1
Unix, insbesondere Linux / FreeBSD / etc, ist billiger als Windows, um Dienste auszuführen. Wenn Sie also sowohl unter Unix als auch unter Windows liefern können, ist Ihr Unternehmen wettbewerbsfähiger.
Sogar junge Mädchen wissen es youtube.com/watch?v=dFUlAQZB9Ng
MattyD

Antworten:

8

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.

Vitor Py
quelle
5

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, und lessfü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).

Thomas Owens
quelle
3

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.

Weltingenieur
quelle
Ich bin im Moment ungefähr in der Mitte von "The Linux Programming Interface". Es ist eine sehr gründliche Lektüre, und die darin enthaltenen Informationen sind äußerst nützlich. Es geht sogar um Dinge, die tragbar sind und wie tragbar sie sind, was ebenfalls sehr nützlich ist.
Michael Trausch
-1

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 installBefehle 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:

  1. apt-get - wie man Pakete installiert
  2. top - laufende Prozesse
  3. ps - Listenprozesse, Verknüpfung: ps -fea | grep "Prozessname"
  4. kill -9 PID - töte einen Prozess
  5. sudo cmd - führt einen Befehl mit Root-Berechtigungen aus
  6. vi-Datei - öffnet den Schnelleditor, google for vi und lernt, wie man ihn benutzt
  7. gedit - lernen Sie, wie man es benutzt und erweitern Sie es mit Plugins (es kann sehr gut wie eine voll funktionsfähige IDE funktionieren)
  8. tail -fn500 file - Tails einer Datei und druckt die letzten 500 Zeilen, sehr nützlich zum Überprüfen von Protokollen
  9. Mann cmd - Mann !!! Es sollte der erste in der Liste sein ... Grundsätzlich erhalten Sie alle Hilfe, die Sie für einen Befehl namens cmd benötigen
  10. Lerne .sh Bash Skripte. Google es und füge es deinem Programmierer-Toolkit hinzu. Eines Tages wirst du es benutzen.
  11. CD-Ordner - Navigation
  12. ls - listet Dateien in einem Verzeichnis auf
  13. ll - shorcut to ls -l, liste Dateien mit Details auf

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 .

wleao
quelle
2
Von diesen apt-getist wahrscheinlich nutzlos und geditsollte 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, emacsals Alternative zu erwähnen vi- welche Sie verwenden, hängt stark von Ihren persönlichen Vorlieben (und meiner Meinung nach von den Teampräferenzen) ab.
Thomas Owens
1
Ja! Emacs! Sie sollten lernen, wie man es benutzt. Nun, ich spreche hier von Ubuntu (daher apt-get). Und ja, Sie sollten lernen, wie Sie Ihre Pakete verwalten. Andernfalls würden Sie eines Tages stecken bleiben und versuchen, eine Abhängigkeit zu beheben, und Sie müssen möglicherweise purgeetwas tun. . Man weiß nie.
Wleao
Ich wünschte, ich hätte ein IT-Personal, um meine Entwicklungsumgebung jedes Mal betriebsbereit zu halten = /
wleao
Wie ich bereits sagte, sollte in keinem Unternehmen mit angemessener Größe jemals ein Softwareentwickler Software installieren. Wenn etwas auf dem System installiert werden muss, sollte die IT damit umgehen.
Thomas Owens
1
@Thomas, für IT-Entwicklungssysteme ist in der Regel nur Zeitverschwendung. Das Produktionssystem ist eine ganz andere Sache.