MacOS X Geschichte
• 1984
• Mach CMU (Carnegie Mellon Univ.)
• schlanker Mikrokernel mit Unix Schittstellen (API)
Thursday 30 October 14
MacOS X Geschichte• 1988 - Steve Jobs “NeXT” -- Nextstep OS
• Mach 2.0 with 4.3BSD
• DisplayPostscript
• das "Dock"
• Frameworks (aka “Kits”)
• DriverKit (OOP)
• Mail.app
• ObjectiveC
• InterfaceBuilder
Thursday 30 October 14
MacOS X Geschichte
• 1992 NEXTSTEP i486
• zusätzlich zu M68K, PA-RISC, Sun SPARC
• Fat/Universal-Binaries
Thursday 30 October 14
MacOS X Geschichte
• 1994-1996 OpenStep
• SunOS/Solaris
• HP/UX
• Windows NT 3.x
• heutiger Ableger --> GNUStep
Thursday 30 October 14
MacOS X Geschichte
• FreeBSD virtual memory architecture basiert auf dem Mach Mikrokernel.
• MkLinux - Linux auf einem OSF-Mach-Kernel
Thursday 30 October 14
MacOS X Geschichte
• 1997 - Apple kauft NeXT (Heimkehr von Steve Jobs)
• Rhapsody DR1 / DR2 (PowerPC and x86)
Thursday 30 October 14
MacOS X Geschichte• 2000 MacOS X Public Beta
• XNU-Kernel "X is not Unix" (Mach + FreeBSD APIs, mit Anleihen aus NetBSD, OpenBSD und MkLinux)
• Quarz
• Aqua (MacOS X GUI)
• OpenGL
• configd
Thursday 30 October 14
MacOS X Geschichte
• 2005 MacOS X 10.4.4 'Tiger'
• x86 support
• 2007 - iPhone “iOS”
• ARM-CPU support
Thursday 30 October 14
MacOS X Geschichte
• NextStep http://en.wikipedia.org/wiki/Nextstep
• A Technical History of Apple's Operating Systems http://osxbook.com/book/bonus/chapter1/
Thursday 30 October 14
Partitions TabelleMacBook-Pro% sudo gpt -v show -l /dev/disk0gpt show: /dev/disk0: mediasize=256060514304; sectorsize=512; blocks=500118192 start size index contents 0 1 PMBR 1 1 Pri GPT header 2 32 Pri GPT table 34 6 40 409600 1 GPT part - "EFI System Partition" 409640 498176832 2 GPT part - "MacBook" 498586472 1531680 3 GPT part - "Apple_HFS_Untitled_2" 500118152 7 500118159 32 Sec GPT table 500118191 1 Sec GPT header
Thursday 30 October 14
MacOS X Dateisysteme | Dateisystem | Beschreibung | |---------------+--------------------------------------------------------------------| | HFS | Hierarchical File System (HFS), unter altem MacOS benutztes System | | HFS+ | unter MacOS X 10 benutztes Dateisystem | | FAT | Dateisystem von MS-DOS | | extFAT | Erweiterung des FAT Dateisystems, wird für SD-Karten verwendet | | NTFS | Windows NT (inkl. Windows 2000/XP/Vista/7/8) | | CDDAFS | CD Audio File System, zeigt eine Audio CD als Dateien | | CDFS/ISO9660 | CD-ROM Daten Dateisystem | | UDF | Universal Disk Format, für DVDs | | AFP | Apple Filing Protocol, Apples Netzwerk Dateisystem | | NFS | Network File System, klassisches Unix Netzwerk Dateisystem | | SMB/CIFS/SMB2 | Microsoft Server Message Block Netzwerk Dateisystem | | FTP | File Transfer Protocol | | WebDAV | Dateisystem auf Basis von HTTP |
Thursday 30 October 14
MacOS X Verzeichnisstrukturen| Verzeichnis-/Datei-name | Beschreibung | Notiz ||---------------------------+-----------------------------------------------------------------------+--------------------------------|| Applications | MacOS X Anwendungen | MacOS X spezifisch || Library | MacOS X Frameworks und Konfigurationsdateien | MacOS X spezifisch || Network | Einhängepunkt für Netzwerkfreigaben | MacOS X spezifisch || System | System-Dateien und Frameworks | MacOS X spezifisch || Users | lokale Benutzerverzeichnisse | MacOS X spezifisch || Volumes | Einhängepunkt für externe Laufwerke | USB, FireWire, Thunderbold ... || bin | Basis-Unix Programme | Standard Unix || cores | Verzeichnis zum Speichern von Core-Dumps | MacOS X spezifisch || dev | Geräte-Pseudo-Dateien | Standard Unix || etc | Unix Konfigurationsdateien (link zu /private/etc) | Standard Unix || home | Einhängepunkt für enternte Benutzerverzeichnisse | || mach_kernel | der MacOS X Betriebssystem-Kern | || net | Einhängepunkt für NFS Freigaben | || private | Verzeichnis mit "veränderbaren" Daten | || sbin | Basis-Unix Programme zur Systemadministration | || tmp | Temporäre Dateien (Link zu /private/tmp) | || usr | Unix-System-Root - Dateien für die Unix-Umgebung | || var | Verzeichnis für "veränderbare" (variable) Daten, Link zu /private/var | |
Die Manual-Datei "hier" (für Filesystem-'Hier'archy) beschreibt dieVerzeichnisse unterhalb von “/usr” und “/var”.
Thursday 30 October 14
Struktur von MacOS X Programmen
| Pfad im Bundle | Beschreibung | |-------------------+-------------------------------------------| | Contents/ | Hauptverzeichnis | | " /Coderesources/ | | | " /Info.plist | Konfigurationsdatei des Bundles | | " /MacOS/ | Binärprogramme | | " /PkgInfo | Name des Bundles / Programm ID | | " /Resources/ | Icons, NIB-Dateien, ... | | " /Version.plist | Versionsinformationen | | " /_CodeSignature | Informationen über Signaturen des Bundles |
Thursday 30 October 14
Universal/Fat Binaries | Befehl | Beschreibung | |-----------------------------------------------------+----------------------------------------------------| | file /usr/bin/perl | zeige Informationen über die Binärdatei | | lipo -detailed_info <programm> | zeige Detail-Informationen über die Programmdatei | | lipo -remove <arch> -output <newprogram> <programm> | entferne Architektur eines Universal(Fat-)Binaries |
Thursday 30 October 14
BSD File-Flags | Befehl | Beschreibung | |----------------------+----------------------------------------------| | ls -lO | BSD Flags anzeigen | | chflags <flag> <obj> | BSD Flags auf einem Dateisystemobjekt ändern |
| BSD Flag | Beschreibung | |------------+---------------------------------------------------------| | uchg | unveränderbar durch den Benutzer | | schg | unveränderbar durch das System | | hidden | Dateisystemobjekt verstecken | | arch | Flag für "archiviert" | | opaque | Verzeichnis ist durchscheinend beim Union-Mount | | nodump | Datei/Verzeichnis nicht sichern (mit dem “dump” Befehl) | | snappnd | System - Nur-Hinzufügen | | uappnd | Benutzer - Nur-Hinzufügen | | no<flag> | Flag löschen |
Thursday 30 October 14
MacOS X erweiterte Attribute | Befehl | Beschreibung | |-----------------------+--------------------------------------| | xattr -l <obj> | Erweiterte Attribute auflisten | | xattr -p <attr> <obj> | erweitertes Attribut anzeigen | | xattr -d <attr> <obj> | erweitertes Attribut löschen | | xattr -w <attr> <obj> | erweitertes Attribut setzen | | ls -l@ | erweiterte Attribute im Dateilisting |
| Attribut | Beschreibung | |-----------------+---------------------------------------------| | decmfs | Komprimierte Datei | | FinderInfo | Finder Einstellungen (Hintergrundbild etc) | | metadata | Spotlight Metadata | | quarantine | Quarantäne für Dateien aus dem Internet | | system.Security | wird vom System für erweiterte ACLs benutzt |
Thursday 30 October 14
MacOS X “Classic” Attribute | Befehl | Beschreibung | |-------------------------+------------------------------------------------| | GetFileInfo | MacOS spezifische Datei-Informationen anzeigen | | SetFile -d <obj> | MacOS spezifische Erstellungsdatum setzen | | SetFile -m <obj> | MacOS spezifisches Änderungsdatum setzen | | SetFile -a <attr> <obj> | MacOS spezifisches Attribut ändern |
Thursday 30 October 14
MacOS X “Resource Forks”
• Dateien auf HFS+ Dateisystemen können alternative Datenstreams besitzen (ähnlich wie unter NTFS).
• Diese "Resource Forks" können erreicht werden, indem “/..namedfork/rsrc” an den Dateinamen angehangen wird.
Thursday 30 October 14
MacOS X “magischer Alias”
• MacOS X Finder benutzt ResourceForks um Alias-Dateien mit den Original-Dateien zu verknüpfen
Thursday 30 October 14
MacOS X “online Komprimierung”
• MacOS X HFS+ kann komprimierte Dateien “on-the-fly” dekomprimieren (entpacken)
Thursday 30 October 14
MacOS X “Hotfiles”• MacOS X merkt, wie oft eine Datei benutzt
wird
• aus Dateigrösse und Benutzungsfrequenz wird die Datei-”Temperatur” ermittelt
• kleine, oft benutzte Dateien werden in einen speziellen (schnellen) Bereich der Festplatte (Pseudo-Datei /.hotfiles.btree) geschrieben
Thursday 30 October 14
dynamische de-fragmentierung
• fragmentierte Dateien werden von MacOS X “im Hintergrund” de-fragmentiert
Thursday 30 October 14
MacOS X Union-Mounts• Unter MacOS X gibt es keine speziellen
Dateisysteme für Union-Mounts
• (also kein AUFS oder OverlayFS wie unter Linux)
• stattdessen kann jedes Dateisystem mit dem Parameter "-o union" als union-mount angehangen werden
• BSD-Flag “opaque” definiert, welches Verzeichnis “durchscheint”
Thursday 30 October 14
launchd
• launchd ist der erste Prozess (PID1) in einem MacOS X System
• Init-System, Cron, Inetd
• started “daemons” und “agents”
Thursday 30 October 14
launchd Pfade
| Pfad | Beschreibung | |-------------------------------|----------------------------------------------------| | /System/Library/LaunchDaemons | Systemdienste | | /System/Library/LaunchAgents | Dienste für Benutzersitzungen | | /Library/LaunchDaemons | Systemdienste von externen Quellen | | /Library/LaunchAgents | Dienste für Benutzersitzungen aus externen Quellen | | ~/Library/LaunchAgents | pro-Benutzer Dienste |
Thursday 30 October 14
Dienst starten/stoppen
• launchctl start com.oracle.java.JavaUpdateHelper
• launchctl stop com.oracle.java.JavaUpdateHelper
Thursday 30 October 14
Dienst an-/aus-schalten
• launchctl load com.oracle.java.JavaUpdateHelper
• launchctl unload com.oracle.java.JavaUpdateHelper
Thursday 30 October 14
Launchd Features• Socket Activation
• Resource Throttling
• Prozess Chroot/ASLR/Coalesce Timers
• Prozess KeepAlive
• LimitLoad (Dienste nur bei bestimmtem System-Load starten)
Thursday 30 October 14
Launchd Trigger• Trigger
• auf Verzeichnissen/Dateien
• auf Queue Verzeichnissen (Postfix MTA ...)
• StartOnMount
• VFS Notifications (wenig Plattenplatz etc.)
• Network (WLAN/Ethernet Netzwerk-Ereignisse)
• I/O kit notifications (Treiber geladen)
Thursday 30 October 14
Kernel Module
• MacOS X Kernel Module liegen im Verzeichnis /System/Library/Extensions
Thursday 30 October 14
Kernel Module | Befehl | Beschreibung | |----------------------+----------------------------------------------------------------------------| | kextstat | geladene Kernelmodule anzeigen | | kextload <kext> | Kernel-Modul manuell laden | | kextunload -b <name> | Kernel-Modul aus dem Kernel entfernen | | kextutil | Kernel-Module testen | | kextcache | Kernel-Module Cache verwalten | | pkill -HUP kextd | HUP Signal zum Kernel-Modul Daemon senden, erstellt Kernel-Modul Cache neu |
Thursday 30 October 14
MacOS X Log-Dateien
| Pfad | Beschreibung | |------------------+--------------------------------| | /var/log | Unix/BSD Logdateien | | /Library/Logs | MacOS X Logdateien | | ~/Library/Logs | Benutzerspezifische Logdateien | | /var/log/asl | Apple System Log | | /var/db/receipts | Installations-Logs (Receipts) |
Thursday 30 October 14
Apple System Log (ASL)
| Befehl | Beschreibung | |--------------------------------+---------------------------------------------| | syslog | Apple MacOS X Systemlog anzeigen | | syslog -l <level> -s <meldung> | eine Meldung an das Syslog System senden | | syslog -s -r <host> <meldung> | eine Meldung an ein entfertes System senden | | syslog -w | auf neue Meldungen warten | | $EDITOR /etc/asl.conf | Apple Systemlog konfigurieren |
Thursday 30 October 14
Systemkonfiguration
| Befehl | Beschreibung | |-----------------------+------------------------------------------------------------| | scutil | Schnittstelle zur globalen MacOS X Konfiguration (configd) | | scuitl --nwi | Netzwerkinformationen anzeigen | | scutil --dns | Informationen über den DNS Client anzeigen | | scutil --proxy | Informationen über die Proxykonfiguration ausgeben |
Thursday 30 October 14
Konfiguration für Anwendungen
| Befehl | Beschreibung | |--------------------------------+---------------------------------------------------| | defaults domains | Voreinstellung “Domains” auflisten | | defaults read <domain> | Voreinstellungen für Systemkomponente anzeigen | | defaults write <domain> <key> <value> | Voreinstellung setzen |
Thursday 30 October 14
Energie-Einstellungen
| Befehl | Beschreibung | |-----------------------+------------------------------------------------------------| | pmset -g | Energiespareinstellungen für Festplatten ausgeben | | pmset -g cap | Energiesparfunktionen anzeigen | | pmset -g ps | Akkuladezustand anzeigen | | pmset -g pslog | Akkuladezustand verfolgen |
Thursday 30 October 14
MacOS X top
| Befehl | Beschreibung | |------------------------+-------------------------------------------------| | top | Prozessmonitor | | top -o cpu | Prozessmonitor nach CPU Auslastung sortiert | | top -u | Zeige nach rechenintensiven Prozessen sortiert | | top -l <num-samples> | nicht-interaktiver “logging” modus |
Thursday 30 October 14
Speicherverwaltung | Befehl | Beschreibung | |--------------------------+-------------------------------------------------| | vmmap -v <pid> | Speicherbelegung eines Prozesses anzeigen | | vmmap -interleaved <pid> | " in natürlicher Reihenfolge | | vm_stat | Virtual Memory Informationen ausgeben | | allmemory | Speicherbenutzung von Prozessen untersuchen | | dynamic_pager | den "pager" (Swap-Prozess) konfigurieren | | sysctl vm.swapusage | Benutzung der Pager-Datei (Swap-Datei) ausgeben |
Paging (Swap-) Datei (10.9): /private/var/vm/swapfile0Pager ausschalten:launchctl stop com.apple.dynamic_pager.plistPager Konfiguration: /Library/Preferences/com.apple.virtualMemory.plist
Thursday 30 October 14
Prozess-Trace
| Befehl | Beschreibung | |----------------------+-----------------------------------------------------| | sc_usage <pid> | Listed die Systemaufrufe eines laufenen Prozesses | | sc_usage <programm> | Listed die Systemaufrufe eines Prozesses | | sc_usage -E <befehl> | Listed die Systemaufrufe eines neuen Prozesses | | sc_usage -e <pid> | Systemaufrufe nach Aufrufhäufigkeit sortieren |
Thursday 30 October 14
Prozesse und Dateien | Befehl | Beschreibung | |----------------------+-----------------------------------------------------| | fuser <datei> | zeige Prozesse auf einer Datei | | fuser -c <pfad> | zeige Prozesse auf einem Mountpoint | | fs_usage <pid> | Listet Systemaufrufe auf Dateien / Verzeichnisse | | fs_usage -f filesys | Listet Dateisystemaufrufe | | fs_usage -f network | Listet Netzwerkzugriffe |
Thursday 30 October 14
Programm-Bibliotheken | Befehl | Beschreibung | |-------------------------------+-----------------------------------------------------| | otool -l <programm> | Trace der Bibliotheks-Ladeereignisse | | otool -L <programm> | Bibliotheks-Abhängigkeiten auflisten | | /Developer/usr/bin/dyldinfo \ | Informationen über die Bibliotheksabhängigkeiten | | -dylibs <programmdatei> | einer Programmdatei (XCode muss installiert sein) | | nm <programmdatei> | Symboltablle einer Programmdatei anzeigen | | size <programmdatei> | Segmente in einer Programmdatei ausgeben |
Thursday 30 October 14
Fehlersuche
| Befehl | Beschreibung | |------------------------------------+--------------------------------------------------| | latency | Zeigt die Latenz der Interrupts/Kontext-Switches | | system_profiler -detaillevel mini | Kurz-Informationen über das System ausgeben | | system_profiler -detaillevel basic | Basis-Informationen über das System ausgeben | | system_profiler -detaillevel full | Detail-Informationen über das System ausgeben | | sysdiagnose <prozess> | Sammelt Debug-Informationen in /var/tmp | | spindump | Sammelt ein Profil des gesamten Systems | | sample <pid> <dauer> | Sammelt ein Profil eines Prozesses |
Thursday 30 October 14
Kernel-Variablen
| Befehl | Beschreibung | |-------------------------+--------------------------------------| | sysctl -a | alle Kernelvariablen anzeigen | | sysctl -w <name>=<wert> | Kernelvariable setzen | | sysctl -X | Kernelvariablen hexadezimal ausgeben |
Thursday 30 October 14
DTrace | Befehl | Beschreibung | |---------------------+---------------------------------------| | man -k dtrace | DTrace Manpages listen | | dtruss <programm> | Verfolge Systemaufrufe für Programm | | dtruss -p <pid> | Verfolge Systemaufrufe für Process-ID | | dtruss -n <name> | Verfolge Systemaufrufe für name | | dtruss -c | Zusammenfassung der Systemaufrufe | | dtruss -d | relative Zeitstempel ausgeben | | dtruss -e | verbrauchte Zeit in us | | dtruss -o | "on-cpu" Zeiten ausgeben | | dtruss -t <syscall> | Nur einen Systemaufruf überwachen | | dtrace -l | Liste alle DTrace Probe Provider | | iosnoop | I/O Zugriffe ausgeben | | iotop | Disk I/O pro Prozess | | hotspot.d | Disk I/O nach Lokation | | cpuwalk.d | Verteilung von Prozessen auf CPU-Kern |viele viele mehr ...Im Verzeichnis /usr/share/examples/DTTk gibt es Beispiele für dieBenutzung von dtrace Scripts.
Thursday 30 October 14
DNS Service Discovery (DNS-SD)
| Befehl | Beschreibung | |-----------------------------------------+----------------------------------------------| | pkill -USR1 mDNSResponder | mDNSResponder logging an-/ausschalten | | pkill -USR2 mDNSResponder | mDNSResponder Paket-Logging an-/ausschalten | | pkill -HUP mDNSResponder | mDNSResponder Cache löschen | | pkill -INT mDNSResponder | mDNSResponder neu starten | | pkill -INFO mDNSResponder | mDNSResponder Status in das Syslog schreiben |
Thursday 30 October 14
DNS Service Discovery (DNS-SD)
| Befehl | Beschreibung | |-----------------------------------------+----------------------------------------------| | dns-sd -R <name> <type> <domain> <port> | mdns Service registrieren | | dns-sd -B _afpovertcp._tcp | AFP Shares anzeigen (Browse) | | dns-sd -B _<service>._<transport> | freigegebene Dienste anzeigen |
Thursday 30 October 14
Network tools• ifconfig - Netzwerk Status der Schnittstellen
• ipconfig - IP Addresskonfiguration (DHCPv4, DHCPv6, SLAAC)
• nettop - aktive Netzwerkverbindungen
• networksetup - Netzwerk-Konfiguration von der Kommandozeile
• scselect - Netzwerklokation
Thursday 30 October 14
Bücher
Amit SinghMacOS X Internals
http://osxbook.com/
Jonathan LevinMacOS X and iOS
Internalshttp://newosxbook.com/
Thursday 30 October 14
Danke!
Linuxhotel: Unix für MacOS X Admins
http://www.linuxhotel.de/kurs/unix_fuer_mac_admins/
Kontakt:[email protected]
Thursday 30 October 14