umount
es un comando de UNIX que se adhiere a la perspectiva tradicional de UNIX de que desmontar un sistema de archivos es una tarea de administración del sistema .
La razón detrás es que desmontar un sistema de archivos, si está mal planeado o ejecutado, podría ser perjudicial, incluso destructivo, especialmente en un sistema multiusuario. Por lo tanto, los usuarios regulares están protegidos de este comando potencialmente peligroso y solo root o un usuario privilegiado tiene permiso para ejecutarlo.
Esto tiene mucho sentido cuando UNIX se usa como un sistema operativo de servidor, pero un sistema operativo de escritorio basado en UNIX (por ejemplo, OS X o Ubuntu ) tiene otras necesidades: cualquier usuario debe poder desmontar unidades flash, discos duros extraíbles, etc.
El Finder y diskutil
(consulte man diskutil para más información) trabajar de esta manera. Por ejemplo, puedo abrir Terminal y ejecutar con éxito:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
mientras que umount
falla:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
¿Qué hace el Finder o diskutil
de manera diferente? Detrás de escena, envían una solicitud a un daemon llamado com.apple.SecurityServer (consulte página de manual para obtener más información), que otorga el derecho de desmontar el sistema de archivos:
$ 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)
Esto permite a cualquier usuario desmontar una unidad sin requerir autenticación adicional. (Ubuntu tiene una filosofía similar. Si está interesado, eche un vistazo a esta respuesta en AskUbuntu.)
Para admitir el comportamiento explicado anteriormente, el Finder y diskutil
usan varios marcos de 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
, en el otro lado, solo está vinculado a esta biblioteca dinámica:
$ 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
usa varias otras bibliotecas, pero no está vinculado a ningún marco).