umount
est une commande UNIX qui adhère à la perspective UNIX traditionnelle selon laquelle le démontage d'un système de fichiers est une tâche d'administration système .
La raison derrière cela est que le démontage d'un système de fichiers, s'il est mal planifié ou exécuté, pourrait être perturbateur, voire destructeur, en particulier sur un système multi-utilisateur. Les utilisateurs réguliers sont donc protégés de cette commande potentiellement dangereuse et seul root ou un utilisateur privilégié est autorisé à l'exécuter.
Cela a beaucoup de sens lorsque UNIX est utilisé comme système d'exploitation de serveur, mais un système d'exploitation de bureau UNIX (par exemple, OS X ou Ubuntu ) a d'autres besoins: tout utilisateur devrait pouvoir démonter des lecteurs flash, des disques durs amovibles, etc. .
Le Finder et diskutil
(voir man diskutil pour plus d'informations) fonctionnent de cette façon. Par exemple, je peux ouvrir Terminal et exécuter avec succès:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
alors qu'il umount
échoue:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
Qu'est-ce que le Finder ou diskutil
fait différemment? Dans les coulisses, ils envoient une requête à un démon appelé com.apple.SecurityServer (voir la page de manuel pour plus d'informations), qui accorde le droit de démonter le système de fichiers:
$ 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)
Cela permet à tout utilisateur de démonter un lecteur sans nécessiter d'authentification supplémentaire. (Ubuntu a une philosophie similaire. Si vous êtes intéressé, jetez un œil à cette réponse sur AskUbuntu.)
Pour prendre en charge le comportement expliqué ci-dessus le Finder et diskutil
utiliser plusieurs frameworks Apple:
$ 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
, de l'autre côté, n'est lié qu'à cette bibliothèque dynamique:
$ 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
utilise plusieurs autres bibliothèques, mais n'est lié à aucun framework.)
diskutil
. C'est une bonne connaissance à avoir.