• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Arbeit an der Shell - Mac OS X versus Linux

Hänsel

Erdapfel
Registriert
27.10.14
Beiträge
2
Hallo.

Ich besitze keinen Apple-Computer und werde mir sehr wahrscheinlich auch nie einen kaufen, allerdings sitze ich gelegentlich an einem Apple-Notebook und erledige daran ein paar Arbeiten. Daher bemühe ich mich ein wenig, die gängigen Betriebssystemkomponenten, Short Cuts und dgl. von Mac OS X kennen zu lernen.

Da ich Linux recht gut kenne und weiß, dass Apple für Mac OS X ein BSD-Unix variiert hat, interessieren mich zur Zeit besonders die Unterschiede in der Kommandozeilennutzung von Mac OS X (vermutlich eigentlich Darwin) gegenüber der Arbeit mit der Bash in gängigen Linux-Distributionen.

Hat jemand von euch sowohl Erfahrungen mit Linux als auch mit Mac OS X und kann Konkretes und vielleicht auch Detailliertes über die Unterschiede zwischen Darwin und gängigen Linux-Distributionen schreiben?!

Wie unterscheidet sich die Ordnerstruktur? Für Linux gibt es ja einen Quasi-Standard, Richtlinien für die Verzeichnisstruktur. Hält sich Mac OS X daran oder welche besonderen Ordner gibt es zusätzlich oder abweichend unter Mac OS X?

Welche Besonderheiten sollte man kennen, wenn man als Linux-Kenner anfängt, unter Mac OS X an der Shell zu arbeiten? Welche Spezialitäten und wichtigen Programme sollte man kennen? Gibt es so etwas wie eine Repository-Liste?
 

Scotch

Bittenfelder Apfel
Registriert
02.12.08
Beiträge
8.033
Ein "Linux-Kenner" wird sich unter OS X sofort zurecht finden. Das ein "Linux-Kenner" die Unterschiede zwischen Linux und BSD kennt, setze ich mal voraus.

Die Ordnerstruktur folgt weitestgehend den System V Konventionen, lediglich launchd & Co. legen teilweise Skripte woanders ab.

Desktop (Cocoa) Applikationen folgen einer eigenen Struktur, die gut dokumentiert ist, aber vom Unix-Standard abweicht. X11-Applikationen, so sie denn noch genutzt werden, koennen wahlweise dem System V oder OS X Standard folgen - der Finder kann mit beiden umgehen.

Wichtige Programme kann man so gut wie alle nachinstallieren, wenn was fehlt - das einzige was mir aber jemals wirklich gefehlt hat war emacs, der aus irgendwelchen Gruenden standardmaessig nicht installiert ist. Ansonsten gibt es eigentlich fuer fast alles OS X Tools, die den Standard Unix-/GNU-Tools zumindest gleichwertig sind. Fuer Entwickler bringt Xcode nach Installieren der "command line tools" die ganze GNU-Toolchain mit.

Die Kommandozeilentools fuer das Volume-Management sind Apple Eigenbauten - man diskutil hilft weiter.

Mit "Repository Liste" schwebt die vmtl. ein Paketmanager wie die apt-utils vor - das loest man unter OS X wenn moeglich wie gesagt mit nativen Tools und dem MAS :) Anosnsten kann man aber mit brew auch einen Paketmanager fuer OS X installieren und damit weitestgehend auf die Standardpakete zugreifen. Wenn man das parallel zu den Xcode-Tools macht, sollte man allerdings sehr genau wissen, was man da macht.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Hänsel und Guy.brush

hosja

Mutterapfel
Registriert
23.03.07
Beiträge
5.252
Es gibt praktisch alle gängigen shells auch für Mac OS X. Zur Not einfach brew oder MacPorts bemühen. Von dort kann man sich auch ne Menge Linuxtools und Libs nachinstallieren.
 
  • Like
Reaktionen: Hänsel

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Wie unterscheidet sich die Ordnerstruktur?
Nur geringfügig, insgesamt ist alles deutlich aufgeräumter und pragmatischer nach Zweck sortiert.

etc, var und tmp liegen unterhalb von /private/ statt im Root, aber da es dort entsprechende Sysmlinks dafür hat - für dich Banane.

Der Homeordner von root liegt nicht bei /root, sondern /private/var/root
(Die private Gruppe von root mit GID 0 heisst nicht 'root', sondern BSD-typisch 'wheel')
Ausserdem werden alle anderen Benutzerordner unterhalb von /Users/ angelegt - /home bleibt als impliziter Mountpoint für automount-NFS-Strukturen reserviert.

Dynamisch durch den lokalen Automount-Daemon (diskarbitrationd) eingehängte Volumes landen grundsätzlich unterhalb von /Volumes - analog zu /home bleibt auch /mnt ein reserviertes Tabu für dich.
(Der Inhalt von /Volumes/ wird im Finder durch die dort "auf dem Desktop" angezeigten Geräte reflektiert.)
Mit "low level" Mount-Tools, Dateisystemcheckern, Loopdevices usw kommunizierst do ohnehin fast niemals direkt, für solche Aufgaben gibt es einige wenige, extrem geschmeidig abstrahierende und überaus mächtige Wrapper-Utilities.
(Nur noch zwei zur Benutzerinteraktion bestimmte Hi-Level Kommandos ersetzen etwa drei bis fünf Dutzend der typischen GNU-Tools, dagegen wirken selbst Toolkits wie parted oder loconfig wie sehr frühes DOS.)

Die Vorlagen für Nutzerordner finden sich nicht unter /etc/skel, sondern in /System/Library/User Template/
(Dort findet sich ein sprachunabhängiger Part, der jeweils mit den spezifischen Elementen der gewählten UI-Sprache zusammengemischt wird.)

Die Matritzen für Bootloader/Boothilfsdateien befinden sich nicht in /lib oder /usr/lib, sondern (nach Plattform organisiert) immer unterhalb von /usr/standalone/...
Die aktiv benutzten Kopien derselben landen nicht in /boot, sondern normalerweise in /System/Library/CoreServices/
(Der Name allein sagt wohl mehr aus als drei Seiten Erläuterung dazu)

Der Kernel liegt ebenfalls nicht in /boot, sondern im Root (/mach_kernel).
Eine init-Ramdisk existiert für gewöhnlich gar nicht. Eine (fast nie benötigte) Bootloader-Konfiguration steckt in /Library/Preferences/SystemConfiguration/
Dort liegen auch einige andere sehr maschinenspezifische, essentielle Configs wie zB die Profile (Umgebungen) für den Netzwerkstack.
Ein Kernelcache wird vollautomatisch gepflegt und liegt zusammen mit anderen unter /System/Library/Caches/...
Die "Module" dazu heissen "Systemerweiterung" bzw KEXT und finden in der Library (oder besser: in den Libraries) unter "Extensions" ihr Zuhause.

Naja, fürs erste... sollte das genügen?

welche besonderen Ordner gibt es zusätzlich oder abweichend unter Mac OS X?

Sehr viele was die "höhere" Ebene der GUI und der OS X-eigenen Laufzeitumgebungen wie zB Cocoa betrifft - allerdings nur sehr wenige wenn du dich rein im BSD-Layer (CLI / X11) bewegst. Dort findest du dich auch gut zurecht wenn du schon mal in FreeBSD reingeschnuppert hast.

Welche Besonderheiten sollte man kennen, wenn man als Linux-Kenner anfängt, unter Mac OS X an der Shell zu arbeiten?

"su" ist noch vorhanden, aber eher als Mumie. Benutze exklusiv das modernere "sudo" für höhere Privilegien.

Gerätebezeichner für Speichermedien sind nicht statisch, sie werden gänzlich dynamisch nach aktueller Verfügbarkeit zugeteilt.

Es gibt kein /proc oder /sys Pseudo-Filesystem, diese entsprechenden Infos besorgt man sich ggf über spezifische Utilities.

Sämtliche Dateien können einen optionalen "Resource Fork" besitzen, der ein wenig an zB die "multiple Filestreams" von NTFS erinnert. Im Terminal werden nahezu immer sämtliche Angaben aber nur für den grundlegenden "Data Fork" gemacht.
Das meint: Eine Datei die dort zB mit Null Bytes angezeigt ist, muss deshalb noch lange nicht tatsächlich leer sein!
(Der Finder zeigt dagegen als Dateigrösse immer die Summe beider Forks an.)
Um CLI-Befehle ersatzweise nicht auf den Data-, sondern auf deren Resourcefork auszurichten gibt es folgende Hilfs-Konvention:
/Path/to/any/regular/FILE/..namedfork/rsrc
Diese lediglich auf den ersten Blick *vermeintlich* leeren Files werden dir relativ häufig unterkommen. Beispielsweise bei einem Finder-Alias, dessen Datafork gar nichts enthält, während sein wahrer Inhalt sich (traditionell) im Resourcefork befindet.
(Diese Aliase kannst du in der BSD-Schicht leider nach wie vor weder setzen noch auflösen. Ein uraltes Ärgernis.
Die in der CLI-Schicht eingesetzten und von anderen Unices gewohnten "Symlinks" funktionieren zwar auch im Finder und im Rest der GUI, diese kannst du dort aber nicht setzen, jedenfalls nicht mit normalen Bordmitteln... maleficio!
Diese bescheidene Situation gleicht in etwa den nervigen Problemen mit den proprietären Explorer-Verknüpfungen (*.lnk) und NTFS-Junctions von Windows, die aus Unix heraus ebenfalls nicht "greifbar" sind.)

Die Gruppenzugehörigkeit von Ordnern/Dateien hat in OS X eine weit weniger ausschlaggebende Bedeutung als in anderen Unices.
Entgegen der Angaben in manchen Manpages (die ohne Anpassung direkt aus anderen BSD Derivaten übernommen worden sind) gilt zB:
Ordner vererben ihre eigene Gruppe IMMER an neu erstellte Unterobjekte, es ist *kein* GUID-Bit dafür erforderlich!
(vergleichbar zu einer omnipräsent aktiven Mountoption "bsd_dirs" unter Linux)

Der Benutzer als auch die Gruppe "unknown" (oder "_unknown") mit jeweils einer UID/GID von 99 hat eine "magische" Sonderbedeutung. Nur der Superuser root sieht ihre wahre Identität - also "unknown".
Alle anderen Benutzerkonten meinen sich darin "selbst" zu erkennen.
Das meint:
Ein Ordner, eine Datei etc die dem User #99 gehört, scheint immer dir selbst zu gehören, egal als wer du auch immer gerade angemeldet bist. Du hast *immer* die vollen Rechte des Eigentümers daran. Für die Gruppe gilt analog das gleiche.

Für die gesamte Familie der "Mac Extended ..." (aka "HFS+" oder "HFSX") Dateisysteme gibt es eine relativ ähnliche, besondere Mount-Option. Sie bewirkt, dass sämtliche Objekte im jeweiligen Volume dem gerade darauf zugreifenden Benutzer zugeschlagen werden - so als wären sie alle auf die magische ID #99 gesetzt.
Nennt sich "Eigentümer ignorieren" bzw "owners disabled" und ist standardmässig aktiv auf allen diesen Volumes, es sei denn...
...es handelt sich um das aktuell genutzte Startvolume, oder
...das Volume befindet sich als eine ganz gewöhnliche, "native" Partition auf der/einer "intern" verbundenen Platte (am integrierten, fest verbauten HD-Controller angeschlossen, also idR SATA/intern), oder
...das System selbst hat ausnahmsweise das Ausschalten dieser Option erzwungen, zB auf TimeMachine Backup-Platten.
Alle anderen Mac-Volumes werden (beim erstmaligen Kontakt damit) mit dieser aktivierten Option geladen, was den problemlosen Dateiaustausch zwischen verschiedenen Rechnern gewährleisten soll.
Das betrifft insbesondere also sämtliche CD/DVDs, externen Festplatten, Flashmedien und auch aktivierte Imagedateien.
Nur Administratoren können diese Einstellung individuell und dauerhaft ändern - das gilt aber immer nur für das gerade laufende OS.

Nach speziellen Ablageorten für verschiedene Architekturen (32/64-Bit usw) zu suchen ist überflüssige Mühe.
OS X benutzt durchgängig ein Archiv-fähiges Binärformat (machO), das beliebig viele Sub-Versionen in einer einzigen Datei vereint. Bis auf extrem wenige Ausnahmefälle, bei denen sehr schlecht gemachte Ports von anderen Systemen vorliegen, findest du also keine solchen separaten Zweige vor, sondern nur einen einzigen mit solchen "Fat" oder auch "Universal" genannten Binaries darin.

Welche Spezialitäten und wichtigen Programme sollte man kennen?

Zur absoluten Pflichtlektüre (das "who-is-who" unter den "must knowns") zähle ich mal folgende man-pages:
- diskutil (alle Aktionen rund um Speichermedien/Disks/Volumes/partitionieren/formatieren/...etc pp...)
- hdiutil (selbiges, aber ganz speziell rund um das Thema "Imagedateien")
- alle Seiten rund um launchd, vor allem launchctl und launchd.plist (ein "booty call" für Fans von inittab, crontab und Co)
- pkgutil und verwandte Seiten (weil es auch noch was gänzlich anderes als apt oder rpm gibt)

Machen wirs kürzer: Schau einfach nach und nach bei allem mal rein, das irgendwie auf "...util" und "...ctl" endet.
Aber fang mit den obigen Disk-Utilities an, die wirst du sofort und am meisten benötigen. ;)

Gibt es so etwas wie eine Repository-Liste?

Äähm. Da müsstest du jetzt etwas genauer ausführen was du damit *genau* meinst.
 

ImperatoR

Roter Astrachan
Registriert
02.12.06
Beiträge
6.261
Mac OS X ist im Gegensatz zu den Linux-Distributionen ein echtes UNIX, denn Linux ist nicht vollständig SUS-konform.
Zudem ist Mac OS X auch vollkommen POSIX-konform, im Gegensatz zu Linux.
Das Manual hier gibt Aufschluss über das "layout of filesystems" von Mac OS X.

Hat jemand von euch sowohl Erfahrungen mit Linux als auch mit Mac OS X und kann Konkretes und vielleicht auch Detailliertes über die Unterschiede zwischen Darwin und gängigen Linux-Distributionen schreiben?!

Was willst du dort jetzt hören? OS X ist ein BSD und benutzt somit auch das BSD-style Userland, welches wohl hauptsächlich aus FreeBSD kommt.

Ich lese immer wieder gerne MacMark. Er hat sehr viel Infos rund um OS X zusammengetragen.

Bei weiteren (eventuell spezifischen) Fragen kannst du ja einfach hier weiter in diesen Thread schreiben! :)
 
  • Like
Reaktionen: Hänsel

GunBound

Rote Sternrenette
Registriert
23.06.05
Beiträge
6.074
"su" ist noch vorhanden, aber eher als Mumie. Benutze exklusiv das modernere "sudo" für höhere Privilegien..
Ich benutze "su" ganz gerne (aus Faulheit, zugegebenermassen), um bei laufendem Betrieb und Anmeldung an einem Standardaccount kurzfristig Administratorrechte im Terminal zu bekommen, ohne einen Benutzerwechsel durchzuführen. Wird dann selbstverständlich "su <Admin>", und nicht "su root", wofür ja eben "sudo" gut ist.
 
  • Like
Reaktionen: Guy.brush

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
sudo -su admin
oder
sudo -iu willywonka

Grösster Vorteil aus Admin-Sicht: Du musst kein einziges der Benutzerkennworte wissen - du brauchst immer nur dein eigenes.
su verhält sich zu sudo wie ein Steinkeil zum Lasercutter.
 
Zuletzt bearbeitet:

GunBound

Rote Sternrenette
Registriert
23.06.05
Beiträge
6.074
Geht ja eben nicht, weil ein Standardaccount nicht berechtigt ist, sudo auszuführen.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Du kannst ihm einfach die Berechtigung für *exakt* dieses Kommando geben - sogar ohne ein Kennwort dazu zu brauchen.
Dann genügt zB eine simple Funktion in der .bash_login
Code:
boss () { /usr/bin/sudo -iu admin; }
...und du hast das gleiche so "faul-kompatibel" wie nie zuvor.
 
  • Like
Reaktionen: GunBound