umount
é um comando UNIX que segue a perspectiva tradicional do UNIX de que desmontar um sistema de arquivos é uma tarefa de administração do sistema .
A lógica por trás disso é que a desmontagem de um sistema de arquivos, se mal planejada ou executada, pode ser perturbadora e até destrutiva, especialmente em um sistema multiusuário. Portanto, usuários regulares estão protegidos contra esse comando potencialmente perigoso e apenas o usuário root ou privilegiado tem permissão para executá-lo.
Isso faz muito sentido quando o UNIX é usado como um sistema operacional de servidor, mas um sistema operacional de desktop baseado em UNIX (por exemplo, OS X ou Ubuntu ) tem outras necessidades: qualquer usuário deve poder desmontar unidades flash, discos rígidos removíveis etc. .
O Finder e diskutil
(consulte man diskutil para obter mais informações) funcionam dessa maneira. Por exemplo, eu posso abrir o Terminal e executar com êxito:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
considerando que umount
falha:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
O que o Finder está diskutil
fazendo de maneira diferente? Nos bastidores, eles enviam uma solicitação para um daemon chamado com.apple.SecurityServer (consulte a página do manual para obter mais informações), que concede o direito de desmontar o sistema de arquivos:
$ 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)
Isso permite que qualquer usuário desmonte uma unidade sem exigir autenticação adicional. (O Ubuntu tem uma filosofia semelhante. Se você estiver interessado, dê uma olhada nesta resposta no AskUbuntu.)
Para dar suporte ao comportamento explicado acima no Finder e diskutil
usar várias estruturas da 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 outro lado, está vinculado apenas 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 várias outras bibliotecas, mas não está vinculado a nenhuma estrutura.)
diskutil
. Esse é um bom conhecimento para ter.