umount
è un comando UNIX che aderisce alla prospettiva UNIX tradizionale secondo cui smontare un filesystem è un'attività di amministrazione del sistema .
La logica alla base è che smontare un filesystem, se mal pianificato o eseguito, potrebbe essere dirompente, persino distruttivo, specialmente su un sistema multiutente. Pertanto, gli utenti regolari sono protetti da questo comando potenzialmente pericoloso e solo l'utente root o un utente privilegiato può eseguirlo.
Ciò ha molto senso quando UNIX viene utilizzato come sistema operativo server, ma un sistema operativo desktop basato su UNIX (ad esempio, OS X o Ubuntu ) ha altre esigenze: qualsiasi utente dovrebbe essere in grado di smontare unità flash, hard disk rimovibili, ecc. .
Il Finder e diskutil
(vedi man diskutil per maggiori informazioni) funzionano in questo modo. Ad esempio, posso aprire Terminal ed eseguire correttamente:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
mentre umount
fallisce:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
Cosa sta diskutil
facendo il Finder in modo diverso? Dietro le quinte, inviano una richiesta a un demone chiamato com.apple.SecurityServer (vedere la pagina man per ulteriori informazioni), che garantisce il diritto di smontare il filesystem:
$ 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)
Ciò consente a qualsiasi utente di smontare un'unità senza richiedere un'ulteriore autenticazione. (Ubuntu ha una filosofia simile. Se sei interessato, dai un'occhiata a questa risposta su AskUbuntu.)
Per supportare il comportamento spiegato sopra il Finder e diskutil
utilizzare diversi framework 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
, dall'altro lato, è collegato solo a questa libreria dinamica:
$ 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
utilizza diverse altre librerie, ma non è collegato a nessun framework.)
diskutil
. Questa è una buona conoscenza da avere.