MacOS X - strotmann.decas/talks/CommitterConf2014/MacOSX-unter-die...40 409600 1 GPT part - "EFI...

61
MacOS X unter die Haube geschaut Thursday 30 October 14

Transcript of MacOS X - strotmann.decas/talks/CommitterConf2014/MacOSX-unter-die...40 409600 1 GPT part - "EFI...

MacOS Xunter die Haube geschaut

Thursday 30 October 14

Was ist MacOS X?

Thursday 30 October 14

Was ist MacOS X

• Unix ?

• FreeBSD ?

• Mach ?

• NextStep ?

Thursday 30 October 14

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

• 1999 MacOS X Server 1.0 / Darwin / basiert auf 4.4BSD

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

Storage

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

Systemstart

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

Dienste auflisten

• launchctl list

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

Logging

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

Konfiguration

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

ProzesseProzesse

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

Netzwerk

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

Wide-Area-Bonjour

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