Wie verhält sich die Mac-Befehlszeile zu Linux?

30

Ich liebe Ubuntu Linux - besonders die Kommandozeile. Aber ich muss zugeben, dass Windows zumindest im Moment benutzerfreundlicher ist - es gibt mehr Software dafür, mehr Treiber und mehr Dinge, die einfach funktionieren.

Wenn ich weiß, dass Mac auf Unix basiert, frage ich mich, ob es der Sweet Spot zwischen ihnen ist. Aber ich frage mich: Wie ähnlich ist die Mac-Befehlszeile der von Linux ? Könnte ich mit vim und bash scripting und git, etc. weiterkommen? Würden allgemeine Befehle wie das Ändern von Verzeichnissen unterschiedlich sein? Kennt jemand eine Online-Ressource zum Vergleichen und Vergleichen?

Nathan Long
quelle

Antworten:

11

Bash ist bash, daher sind die Shell und ihre eingebauten Komponenten identisch. Aber beachten Sie, dass das Verhalten einiger Tools wie psoder headin den Details unterscheiden können somit Ihre Skripte fehlschlagen könnte.

Cees Timmerman
quelle
5
Denken Sie daran, dass dies nicht so sehr ein Problem zwischen Mac und Linux ist, sondern dass verschiedene Unix-Varianten etwas andere Probleme verursachen. Sie würden die gleichen (tatsächlich mehr Unterschiede) zwischen Linux und beispielsweise HP-UX finden.
KeithB
2
Sie können das Toolset gnu binutils unter Linux und OSX standardisieren. Macports und Homebrew werden unter OSX installiert. Dies standardisiert zumindest Dinge wie ls / tar / etc. ps ist immer noch betriebssystemabhängig.
Skarface
auch file: file -iunter linux unter file -Iosx ☹️
Anthony Kong
30

Mac OS X ist ein Unix-Betriebssystem und die Befehlszeile entspricht zu 99,9% jeder Linux-Distribution. bashist Ihre Standardshell und Sie können alle Programme und Dienstprogramme kompilieren. Es gibt keinen nennenswerten Unterschied. Sie finden auch verschiedene Projekte wie MacPorts, die die Paketverwaltung für Mac bereitstellen.

w0rm
quelle
1
+1: das obige ist wahr. Möglicherweise müssen Sie bedenken, dass Ihr Mac einen Intel- oder PowerPC-Prozessor verwendet, wenn er Code kompiliert oder vorgefertigte Pakete verwendet. Ich verstehe, dass neue Macs nur Intel sind, aber ich kann mich irren. typo @ w0rm: package * management. :-)
Sirex
2
Obwohl Ihre Skripte wahrscheinlich sowohl für Mac als auch für Linux funktionieren, ist es immer ratsam, sie auf beiden Plattformen zu testen. Ich habe einige (subtile) Unterschiede zwischen Linux-Distributionen und sogar zwischen verschiedenen Versionen derselben Linux-Version gesehen.
Roalt
1
FeeBSD um genau zu sein.
digitxp
6
@digit, das muss die BSD-Version sein, für die sie bezahlen? s / F / Fr /;)
John T
18
99,9% ist nicht korrekt. OS X ist eine BSD-Variante und hat keine GNU-Dienstprogramme. Sie können sie immer installieren, aber viele Befehle haben unterschiedliche Optionen. Es ist Unix, aber nicht Linux.
Matteo
12

Es ist sehr ähnlich, aber wenn Sie Unterschiede zwischen BSD und Linux kennen, erwarten Sie, dass der Mac das BSD-Verhalten aufweist.

Neth
quelle
Interessant. Können Sie das näher erläutern? Warum das?
fat_mike
@fat_milke, weil OSX die BSD-Dienstprogramme verwendet, nicht GNU, die Linix verwendet
user151019
b / c Mac OSX, abgeleitet von einem * nix-Kernel (NeXTSTEP basierend auf BSD), der früher als Linux von Unix abgezweigt ist. So endeten sie mit leicht unterschiedlichen Implementierungen einiger Utils. Siehe en.wikipedia.org/wiki/MacOS
Nietzsche
9

Ein paar Dinge - es hängt wirklich davon ab, was Sie mit Kommandozeile meinen.

  1. Sie werden wahrscheinlich bash ausführen, was mit bash unter allen anderen UNIX-Betriebssystemen identisch ist. Die Bash-Programmiersprache ist ebenfalls dieselbe - solange es sich um dieselbe Version handelt. Bash-Versionen unterscheiden sich geringfügig in der Sprache, was jedoch nichts mit MacOSX oder Linux zu tun hat.

Sie können tatsächlich auf Folgendes stoßen: - / bin / bash auf einem Mac ist aus Lizenzgründen auf 3.x festgelegt. Es können kleinere Kompatibilitätsprobleme auftreten, wenn Sie an 4 oder sogar 5 gewöhnt sind.

  1. bash an sich ist eine kleine Untermenge von "Kommandozeile". Um nützlich zu sein, verwenden Sie normalerweise einige andere gängige UNIX-Dienstprogramme wie awk, ls oder cut. Aufgrund ihrer Geschichte (sie stammt von BSD ab, nicht von Linux oder SystemV) unterscheiden sich die Mac-Versionen von Dienstprogrammen von denen, die Sie unter Linux gewohnt sind (auch bekannt als GNU-Versionen). Diese haben zumindest einige Flag-Unterschiede und einige Ausgabe- und Funktionsunterschiede zu Linux. Skripte, die diese verwenden, müssen zum Ausgleich geändert werden. BSD awk vs GNU gawk ist ziemlich unterschiedlich. ODER Sie können diese GNU-Versionen von Macports oder Home Brew beziehen und Ihren PATH so einstellen, dass dies die Standardeinstellungen sind (über die integrierten Versionen).

  2. MacOS X hat auch einige neue coole Tools. openist schön, es wird das Objekt öffnen, als ob Sie darauf doppelklicken. defaultsMit dieser Option können Sie einige Voreinstellungen festlegen, einige sogar nicht in den GUI-Voreinstellungen. textutilkann nützlich sein und saySpaß machen.

Reiche Homolka
quelle
3

Die Befehlszeilenfunktionen unter Mac und Linux sind in der Tat ähnlich, da OS X eine UNIX-Variante (Darwin) unter der angezeigten GUI aufweist.

Die Standard-Shell unter OS X ist bash. Wenn Sie sich also damit auskennen, passen Sie sich an.

Auf einem Mac ist Terminal die Standardbefehlszeilenanwendung. Es gibt auch eine Reihe anderer Emulatoren, aber insgesamt bietet Terminal ein sehr ähnliches Erscheinungsbild wie die in Linux gewohnte Shell.

Die Hauptursache für Unterschiede sind jedoch:

  • Manchmal unterschiedliche Kommandozeilenargumente (siehe duzB). Die primären Befehle wie cdoder lsusw. sind ähnlich.
  • Es gibt weitere Teile von OS X, die nicht wie unter Linux von Hand bearbeitet werden sollten. Dies ist ein eigenständiges Thema, aber beachten Sie, dass das Ausführen eines Mac in Bezug auf Konfiguration und Wartung nicht mit dem Ausführen einer Linux-Box vergleichbar ist.

openDavon abgesehen gibt es in OS X auch viele coole Hacks über die Kommandozeile (zB Kommando). Es gibt viele frühere Themen und Blog-Posts mit mehr Informationen.

Sie können auch Ihre Hände auf einer Reihe von Open - Source - Paketen (dh erhalten git, hgusw.) über MacPorts, Fink oder ein paar anderen Paket - Management - Systeme für OS X. Sie können auch für UNIX / Linux - ähnliche Systeme wie nötig vorgesehenen Pakete andere Quelle bauen .

dtlussier
quelle
0

Hier ist ein Unterschied. Probieren Sie diesen Befehl sowohl in der Mac- als auch in der Linux-Bash-Shell aus

find /etc -name "*.conf"

Mac zeigt nichts an, obwohl viele .conf-Dateien in / etc sind.

Antonius Thomas
quelle
1
Vielleicht könnten Sie den Leuten sagen, warum das so ist.
Mads
1
Nicht sicher, vielleicht hat es mit den Pfadnamenerweiterungen in POSIX zu tun. Dieser Befehl funktioniert find /etc/* -name "*.conf". Dies wurde jedoch als Beispiel angegeben, um die MAC-Befehlszeile der LINUX-Befehlszeile gegenüberzustellen. Ich kann kein Votum begründen.
Antony Thomas
4
Das liegt daran, dass / etc unter OSX eine symbolische Verknüpfung ist. Wenn Sie es versuchen, bedeutet find /etc/ -name "*.conf"dies, dass / etc ein Verzeichnis anstelle einer Datei ist. Behandelt findLinux symbolische Links zu Verzeichnissen standardmäßig als Verzeichnisse?
MechEthan