umount
ist ein UNIX-Befehl, der der traditionellen UNIX-Perspektive folgt, dass das Aufheben der Bereitstellung eines Dateisystems eine Systemverwaltungsaufgabe ist .
Das Grundprinzip dahinter ist, dass das Aufheben der Bereitstellung eines Dateisystems, wenn es schlecht geplant oder ausgeführt wird, insbesondere auf einem Mehrbenutzersystem störend oder sogar destruktiv sein kann. Daher sind reguläre Benutzer vor diesem potenziell gefährlichen Befehl geschützt und nur Root- Benutzer oder privilegierte Benutzer dürfen ihn ausführen.
Dies ist sehr sinnvoll, wenn UNIX als Serverbetriebssystem verwendet wird, ein UNIX-basiertes Desktop-Betriebssystem (z. B. OS X oder Ubuntu ) jedoch andere Anforderungen hat: Jeder Benutzer sollte in der Lage sein, Flash-Laufwerke, austauschbare Festplatten usw .
Der Finder und diskutil
(siehe man diskutil für weitere Informationen) arbeiten auf diese Weise. Zum Beispiel kann ich Terminal öffnen und erfolgreich ausführen:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
während umount
fehlschlägt:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
Was macht der Finder oder diskutil
anders? Hinter den Kulissen senden sie eine Anfrage an einen Daemon mit dem Namen com.apple.SecurityServer ( weitere Informationen finden Sie auf der Manpage ), der das Recht gewährt, das Dateisystem abzuhängen:
$ tail -f /var/log/system.log
Feb 6 16:57:37 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/System/Library/CoreServices/Finder.app' [171] for authorization created by '/System/Library/CoreServices/Finder.app' [171] (100013,0)
Feb 6 16:57:37 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskarbitrationd' [18] for authorization created by '/System/Library/CoreServices/Finder.app' [171] (100002,0)
Feb 6 17:01:46 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskutil' [646] for authorization created by '/usr/sbin/diskutil' [646] (100013,0)
Feb 6 17:01:46 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskarbitrationd' [18] for authorization created by '/usr/sbin/diskutil' [646] (100002,0)
Auf diese Weise kann jeder Benutzer die Bereitstellung eines Laufwerks aufheben, ohne dass eine zusätzliche Authentifizierung erforderlich ist. (Ubuntu hat eine ähnliche Philosophie. Wenn Sie interessiert sind, schauen Sie sich diese Antwort auf AskUbuntu an.)
So unterstützen Sie das oben im Finder erläuterte Verhalten und diskutil
verwenden mehrere Apple-Frameworks:
$ otool -L $(which diskutil) | grep Disk
/System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
$ otool -L /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder | grep Disk
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/DiskImages (compatibility version 1.0.8, current version 344.0.0)
/System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement (compatibility version 1.0.0, current version 1.0.0)
umount
Auf der anderen Seite ist nur mit dieser dynamischen Bibliothek verknüpft:
$ otool -L $(which umount)
/sbin/umount:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
( /usr/lib/libSystem.B.dylib
Verwendet mehrere andere Bibliotheken, ist jedoch nicht an ein Framework gebunden.)
diskutil
. Das ist gutes Wissen.