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 de esto es que desmontar un sistema de archivos, si está mal planeado o ejecutado, podría ser disruptivo, incluso destructivo, especialmente en un sistema multiusuario. Por lo tanto, los usuarios normales están protegidos de este comando potencialmente peligroso y solo los usuarios root o privilegiados pueden 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 obtener más información) funcionan 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é es el Finder o qué está diskutil
haciendo de manera diferente? Detrás de escena, envían una solicitud a un demonio llamado com.apple.SecurityServer (consulte la página del manual para obtener más información), que le 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 en el Finder y diskutil
usar 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
, por 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).
diskutil
. Es un buen conocimiento tener.umount
ydiskutil
/ Finder.