Jemanden für allgemeine Unix-Kenntnisse interviewen [geschlossen]

20

Wie würden Sie einen Entwickler testen, der behauptet, über * nix-Shell-Erfahrung zu verfügen? (Um ganz klar zu sein, wir möchten nicht testen, ob sich jemand auf * nix entwickeln kann, nur, dass er sich mit der Befehlszeile auskennt.)

Ich habe darüber nachgedacht, sie dazu zu bringen, das Problem zu lösen, Informationen aus Protokolldateien zu erhalten, die einige grundlegende Dinge wie cat, grep, cut, ... in Kombination mit Piping beinhalten.

Welche weiteren Grundkenntnisse würden Sie verlangen? Dies ist wiederum nicht für Interviews mit Personen gedacht, die für * nix-Systeme entwickelt werden, und auch nicht für * nix-Systemadministratoren, sondern nur für normale Entwickler, die manchmal etwas an einem * nix-System arbeiten müssen.

Christophe Vanfleteren
quelle
Diese Art von Shell-Training ist ein Kinderspiel für alle, die bereits eine Programmiersprache beherrschen. Seit wann interessiert es die Leute, ob die Befragten die Wahrheit in ihren Lebensläufen ein bisschen angenehmer erscheinen lassen? Es passiert ständig. Klingt für mich kleinlich.
Yam Marcovic
@YamMarcovic - Wenn du sagst "Lass die Wahrheit ein bisschen angenehmer erscheinen", sagst du dann "behauptest, dass sie keine Fähigkeiten haben"? Wenn ja, würde ich sagen, dass das ziemlich relevant ist, um es während des Interviews herauszufinden. Wenn sie lügen, um durch die Tür zu kommen, wie kann man ihnen dann vertrauen, wenn sie einmal drinnen sind?
Vatine
@Vatine Weil zumindest aus meiner Erfahrung jeder seine Fähigkeiten in Lebensläufen übertrieben hat. Wenn Sie diese Leute disqualifizieren, können Sie nur dogmatisch ehrliche oder naive Leute einstellen. Das sind viel weniger Möglichkeiten.
Yam Marcovic

Antworten:

13

Aus meiner persönlichen Erfahrung muss der Entwickler, der an einem * nix-System arbeitet, wissen:

  • Shell-Variablen (wie man + Kenntnisse über spezielle Variablen wie PATH einstellt / erhält)
  • Shell-Umleitung (Ausgabe eines Programms erfassen)
  • Pipes (das Extrahieren einiger Informationen aus der Protokolldatei ist ein hervorragendes Beispiel)
  • Prozesskontrolle (ps, nice / renice, kill)
  • Dateizugriffsrechte (ls / chmod / chown / chattr)
  • Benutzer (aber hauptsächlich im Kontext von Dateien / Prozessen, dh: Kann dieser Prozess auf diese Datei zugreifen? Warum kann / kann er nicht?)

... und als Bonus:

  • Starten / Beenden von Systemdiensten

Mit solchen Fähigkeiten können die meisten Aufgaben im Zusammenhang mit Entwicklern problemlos ausgeführt werden.

Jacek Prucia
quelle
Gute Antwort. Welche Befehle werden zum Starten / Stoppen von Systemdiensten verwendet?
Tim
11

Aus meiner Erfahrung mit meinen zahlreichen Kollegen seit ich anfing zu arbeiten, möchte niemand Unix-Kenntnisse vortäuschen: Entweder sie " kennen sich in der Kommandozeile aus " oder sie sagen einfach "no way!".

Fragen Sie einfach, ob der Kandidat bereit ist, an einer Unix-Workstation zu arbeiten, und lassen Sie sich sagen, wie weit er durch Bash gehen kann. Er wird irgendwann einige Befehle benennen; die offensichtlichsten diejenigen sind cd, cat, moreoder less, vioder emacs, grep, awk, sed. Hören Sie genau zu, ob er erwähnt man.

Wenn es für die Entwicklung ist, sollte er vertraut sein mit makeund Makefiles, und einige Quellensteuerbefehlszeilenschnittstelle ( svn, git, cleartool, hg, cvs...)

mouviciel
quelle
4
Ich weiß Bescheid manund benutze es, wenn Google nicht hilft, aber ich würde es nie auf meiner
Befehlsliste
3
manist die effizienteste Methode, um sich mit Unix-Befehlszeilen- und C-Bibliotheken vertraut zu machen, wenn Sie offline sind. Übrigens habe ich Unix gelernt, als das fortschrittlichste Tool zum Durchsuchen des Internetstelnet archie.cs.mcgill.ca
mouviciel
1
Obligatorisch xkcd.com/293 xkcd.com/456 xkcd.com/434
Mehrdad
@mouviciel: Es ist auch das effizienteste Erlernen der Unix-Befehlszeile, wenn Sie online sind , da die meisten Foren Sie zu rtfm auffordern, wenn Sie sie nach Details zu den Befehlen fragen. Dies sollte in Ordnung sein, wenn die Manpages nicht unglaublich kompliziert und schwer zu navigierend sind. Zum Glück gibt es Stapelüberlauf!
Joren
Das weiß ich nicht. Ich benutze Manpages übermäßig und hatte nie Probleme damit, wenn ich mich erst einmal daran gewöhnt hatte. Es ist ein Kinderspiel, das zu finden, wonach Sie suchen. Sie haben Abschnitte, Sie haben "Siehe auch" und Sie können das Ganze mit einem Klick auf eine Schaltfläche durchsuchen. Sie erhalten eine Manpage für jeden Befehl und jeden Systemaufruf sowie eine ganze Reihe von Bibliotheksaufrufen. Ich würde sagen, Manpages sind das, was mich so verrückt nach UNIX macht.
Yam Marcovic
10

Warum das machen?

Die * nix-Shells (und andere OS-Shells, fwiw) sind sehr tiefe und breite Arbeitsumgebungen. Es ist möglich, dass jemand jahrelang dort arbeitet und nur einen sehr geringen Prozentsatz der Kapazität der Muscheln nutzt.

Wenn Sie nicht erwarten, dass die Person a) ein Shell-Programm ausführt oder b) das System über die Shell verwaltet, warum ist das dann wichtig? Alles, was getan wird, ist so grundlegend, dass ein handliches * nix-Spickzettel den "Mangel an Fähigkeiten" mehr als ausgleicht.

Joe Internet
quelle
Es ist eine Ehrlichkeitsprüfung. Wenn jemand Unix-Erfahrung in seinen Lebenslauf einfügt (was wir nicht wirklich benötigen), möchte ich in der Lage sein, zu überprüfen, was diese beanspruchten Fähigkeiten sind. Wenn Sie nur in der Lage sind, cd und ls zu verwenden, sollten Sie imo keine Unix-Erfahrung beanspruchen.
Christophe Vanfleteren
Nun, ich würde sie dann fragen, welche Unix-Systeme sie verwendet haben, und ihnen Unterschiede zwischen Unix-Systemen und wahrscheinlich Linux / Mac
auflisten lassen
1
@Christophe - Nun, hier ist der Deal ... es spielt keine Rolle, denn sie werden wahrscheinlich nicht für Sie arbeiten. Es ist eine große rote Fahne für einen Befragten, wenn der potenzielle Arbeitgeber beginnt, alberne Stunts wie diese zu machen, weil er nicht vertraut, was auf dem Lebenslauf steht. Ihr "Test" und Ihre Rechtfertigung dafür lautet im Grunde, dass Sie versuchen, jemanden einzustellen, der einen Scheißjob bei einer Scheißfirma hat. Ich kann mich irren, aber ich vermute, dass ich nicht bin. Wenn ich mich jedoch irre, schlage ich vor, dass Sie Ihre "Erwartungen" neu bewerten.
Joe Internet
1
@Yam - Es sagt so ... Wenn Sie einstellen und jemand Ihnen einen Lebenslauf schickt, von dem Sie glauben, dass er erfunden wurde, interviewen Sie diese Person einfach nicht. Was Sie nicht tun, ist eine dumme Prüfung zu erstellen, die a) Sie zugeben, dass sie keinen Einfluss auf die Anforderungen der Position hat, und b) zuzugeben, dass sie nur dazu gedacht ist, die "Ehrlichkeit" der von jemandem behaupteten Erfahrung zu testen. Wenn jemand nicht einmal ein Interview bei OP bekommen kann, ohne dass seine "Ehrlichkeit" in Frage gestellt wird, weil er sagt, dass er die * nix-Shell verwendet hat, was sagt das über das Unternehmen aus? Für mich heißt es Scheißjob bei der Scheißfirma. YMMV.
Joe Internet
1
@Christophe - Wenn Sie fähige * nix-Programmierer einstellen, ist es IMO fair anzunehmen, dass sie "sich in der Kommandozeile auskennen". Wenn Sie fähige Entwickler für andere Betriebssysteme einstellen, kann IMO davon ausgegangen werden, dass ihre * nix-Befehlszeilenfähigkeiten minimal sind. Gruppe A muss nicht getestet werden, Gruppe B erhält einen automatischen Fehler. Warum sollten Sie sie dann auch testen? Wenn Ihre Kriterien für die Einstellung eines Softwareentwicklers davon abhängen, wie gut er die Befehlszeile verwendet, ist Ihr Einstellungsprozess meines Erachtens fehlerhaft. Anders wäre es, wenn Shell-Scripting die Hauptverantwortung der Position wäre.
Joe Internet
3

Aus meinem Kopf heraus würde ich sie wahrscheinlich um zwei Dinge bitten:

  1. Als Sie zuvor die * nix-Befehlszeile verwendet haben, sind Sie auf einen Fall gestoßen, in dem Sie durch einen durchdachten Befehl viel Zeit gespart haben? Wenn ja, bitte erläutern.

  2. Bitte erläutern Sie die Hauptunterschiede zwischen der * nix-Befehlszeile und einem Standard-Windows-Desktop. Was sind die Vor- und Nachteile eines jeden?

Das erste Beispiel gibt Ihnen einen Hinweis darauf, wie tief das Wissen des Bewerbers über die Befehlszeile reicht. Wenn er jahrelang an einem * nix gearbeitet hat, wird er Ihnen nicht nur sagen, dass er stolz darauf war, ein Grep zu haben. Erwarten Sie nicht, dass sie sich die genauen Befehle merken (dafür gibt es immer Manpages), sondern die allgemeine Vorstellung davon, was sie getan haben.

Die zweite Frage prüft stattdessen, ob sie verstehen, wozu die Kommandozeile wirklich gut ist und wofür sie nicht geeignet ist. Es ist leicht zu lernen, einen Hammer zu benutzen, aber viel schwieriger, auf ein anderes Werkzeug zu wechseln, falls der Hammer ungeeignet ist. Diese Frage gibt Ihnen einen guten Hinweis auf die Sichtweise des Bewerbers außerhalb der * nix-Box und ist offen genug, damit er mit seinem Wissen punkten kann (und sollte). (Nichts Schlimmeres, als etwas wie "ähm ... Fenster haben diese Fenster" zu beantworten.)

Frank
quelle
2

Kommt darauf an, was sie tun sollen.

Zum Abrufen von Informationen aus Protokolldateien Ihr Vorschlag für cat + grep absolut sinnvoll. Ich würde dazu ls, cd und less / more hinzufügen.

Wenn Sie erwarten, dass sie auch kleinere Änderungen vornehmen (z. B. in Konfigurationsdateien), ist es sinnvoll, Tests für vi und / oder emacs und für Dinge wie cp / mv / rm / mkdir hinzuzufügen.

Mücke
quelle
1
Ich würde mir mehr Sorgen machen, wenn sie alle kennen
NimChimpsky
1
wenn auch der Kerl erreicht für Google und startet die Eingabe in dem Suchfeld , Sachen wie „ vi Editor - Befehle “ , dann würde ich prüfen Test 90% bestanden :)
gnat
1

Ich würde empfehlen, dass sie Emacs oder vi / m, tar, sed, e / f / grep, die verschiedenen Compiler und einige Shell-Skripte kennen. Führen Sie möglicherweise einen Test durch, bei dem diese Tools verwendet werden müssen, um Code aus einer Datei abzurufen, ohne ihn zu öffnen, und fügen Sie ihn in ein anderes Programm ein. Kompilieren Sie dann das Programm, das bei einem geringfügigen Fehler abbricht. Sie müssen dann einen Texteditor verwenden, um den Fehler zu finden, den Code zum Laufen zu bringen und die Binärdatei zu archivieren. Verschicken Sie es dann an einen beliebigen Ort, und geben Sie dem Empfänger die Berechtigung, es auszuführen.

Weltingenieur
quelle
1

Ich weiß nicht, wie es Ihnen geht, aber ich würde mich darüber ärgern, wenn mein Interviewer mich fragt und ich nicht weiß, wie ich unter Linux arbeiten soll.

Sie sollen nicht wirklich zu wissen , was sie richtig weiß jetzt , aber was sie können lernen , die Chance , wenn gegeben. Das Erlernen von * nix-Tools ist nicht allzu schwierig, erfordert jedoch ein wenig Entschlossenheit - Sie sollten wirklich eher die Fähigkeit als das Wissen testen.

Mehrdad
quelle
2
aber Sie interviewen Kandidaten, um zu arbeiten, nicht um zu lernen.
NoChance
1
-1 @Emmad. Sie haben also in Ihrem Beruf noch nie etwas gelernt ...?
3
-1 @EmmadKareem Jede Arbeit lernt auf irgendeine Weise.
Nicholas Smith
Ja, Lernen wird in gewissem Umfang erwartet, es sei denn, die Rolle ist trivial. Ich gehe davon aus, dass der Kandidat in etwa zwei Wochen nach der Einstellung produktiv sein wird. In Kanada würde mich das durchschnittlich 3000 US-Dollar kosten. Es sei denn, die Fähigkeit ist selten, ist dies, was ich erwarte.
NoChance
Klingt so, als wäre Emmad eine Person, für die ich nicht arbeiten möchte, zusammen mit dem OP.
kirk.burleson
1

Es hängt davon ab, welche Erfahrung Sie haben möchten. WENN dies nicht für jemanden ist, der für * nix-Systeme und auch nicht für * nix-Systemadministratoren entwickelt, sondern nur für normale Entwickler, die manchmal etwas an einem * nix-System arbeiten müssen, wie viel Erfahrung benötigen sie dann tatsächlich?

Alles, was ein solcher Entwickler in * nix-Shells (ls, chmod, cat usw.) benötigt, könnte wahrscheinlich auf einem einzigen Seiten-Spickzettel geschrieben werden. Wenn dies der Fall ist, können einige gute Kandidaten eliminiert werden, wenn Sie * nix-Shell-Kenntnisse benötigen, für die dies nicht erforderlich ist.


quelle
0

Normalerweise wähle ich eine einfache Aufgabe und fordere die Person auf, ein Shell-Skript auf einem Whiteboard zu schreiben.

"Sie haben ein Verzeichnis" foo "und ein Sicherungsverzeichnis" foo_backup ". Schreiben Sie ein Shell-Skript, um zu sehen, was sich in" foo "geändert hat, seit sich" foo_backup "geändert hat.

Scott C Wilson
quelle
0

"Erklären Sie den Anmeldevorgang unter Linux mit so vielen Details, wie Sie möchten", ist eine gute Frage. Der Anmeldevorgang beinhaltet zufällig das Wechseln von Benutzern, Berechtigungen und Eigentümern sowie viele allgemeine Unix-Philosophien. Wenn sie klar erklären können, wie und warum es ein /etc/passwdund gibt/etc/shadow gibt und wie ein nicht-privater Benutzer sein eigenes Passwort ändern kann, aber nicht andere ", bedeutet dies, dass sie Unix" bekommen ".

Ein weiterer Vorteil ist alles mit Protokollanalyse oder schnellen Sicherheitsüberprüfungen. Wenn sie die Gesamtbandbreite, die für einen bestimmten vhost bereitgestellt wird, aus einem Apache-Protokoll addieren können oder wenn sie herausfinden, ob sich andere Benutzer mit einer UID von 0 im System befinden, sind sie in der Befehlszeile praktisch.

Und eine Sache, die Sie NICHT mit ihnen machen sollten: Lassen Sie sie das nicht auf Papier / Whiteboard machen. Gib ihnen ein Live-System (aber kein Internet, weil das fast schummelt) und sieh ihnen beim Gehen zu. Wenn sie sich in Manpages auskennen und spontan Multi-Pipe-Ausdrücke erstellen können, ist das ein gutes Zeichen. Wenn sie für alles Google benötigen, ist ihre Fähigkeiten fraglich.

Marcin
quelle
0

Warum sollen sie ein funktionales Programm schreiben? was ist falsch daran zu sagen "sag mir den Unterschied zwischen grep und sed, oder was macht X command? etc. auf diese Weise kannst du sie ein wenig herumführen.

Wenn sie an der spezifischen Aufgabe herumfummeln, die Sie ihnen geben, denken Sie vielleicht nicht, dass sie schlau sind. Aber wenn Sie allgemeine Fragen stellen, geben Sie ihnen die Möglichkeit, Ihnen zu zeigen, was sie wissen. Dies kann wesentlich sein, aber auf andere Weise als das, was Sie sich gefragt haben.

Timmah
quelle
-1

Unix-Gurus haben grundlegende Kommandozeilenbefehle wie sed, grep usw. in einem Finger und können sie leicht verwenden, um das zu erreichen, was sie wollen, indem sie alle Arten von Anführungszeichen, erweiterte reguläre Ausdrücke usw. verwenden einfacher zu verstehen, wie man auf Chinesisch geschrieben ist;)

Sie können davon ausgehen, dass sie unabhängig von der Shell-Programmierung mindestens eine zusätzliche Skriptsprache wie Perl kennen.

Sie kennen die Konfigurations-Interna des Unix-Systems. Wenn Sie sie also bitten, das Tastaturlayout zu ändern (indem Sie rechts alt + eine Bindung hinzufügen), sind sie nicht verwirrt.

Auch die Verwaltung installierter Pakete wäre kein Problem. Oracle installieren, 4 Anwendungsserver mit jeweils einer anderen JVM ausführen - ebenfalls kein Problem. Virtuelle Netzwerkkonfiguration, erweitertes Routing und Port-Filtering, virtuelle Maschinen usw., Verwaltung der Sicherheit - sind ebenfalls vorhanden.

Donau Seemann
quelle
2
Bei der Frage geht es darum zu testen, ob ein Entwickler über allgemeine Unix-Kenntnisse verfügt, und nicht darum, Gurusysadmins zu identifizieren, die sich besonders auf Oracle und Java konzentrieren.
Peter Taylor
JVN? Was hat das Jewish Volunteer Network damit zu tun?
ocodo