umount- це команда UNIX, яка дотримується традиційної точки зору UNIX, що демонтаж файлової системи є завданням системного адміністрування .
Обґрунтуванням цього є те, що демонтування файлової системи, якщо вона погано спланована чи виконана, може бути руйнівною, навіть руйнівною, особливо в системі багатокористувацької роботи. Тому постійні користувачі захищені від цієї потенційно небезпечної команди, і виконувати її може лише root або привілейований користувач.
Це має багато сенсу, коли UNIX використовується в якості серверної операційної системи, але настільна ОС на базі UNIX (наприклад, OS X або Ubuntu ) має інші потреби: будь-який користувач повинен мати можливість демонтувати флешки, знімні жорсткі диски тощо .
Finder та diskutil(див. Man дискутил для отримання додаткової інформації) працюють таким чином. Наприклад, я можу відкрити Terminal і успішно запустити:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
тоді як umountне вдається:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
Що Finder чи diskutilробить інакше? За лаштунками вони надсилають запит демону під назвою com.apple.SecurityServer ( для отримання додаткової інформації див. Сторінку "man" ), яка надає право зняти файльну систему:
$ 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)
Це дозволяє будь-якому користувачеві відключити диск, не вимагаючи додаткової автентифікації. (Ubuntu має подібну філософію. Якщо вам цікаво, подивіться на цю відповідь на AskUbuntu.)
Для підтримки поведінки, поясненої вище Finder, та diskutilвикористання декількох рамок 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з іншого боку, пов'язаний лише з цією динамічною бібліотекою:
$ 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використовує декілька інших бібліотек, але не пов'язано ні з якими рамками.)
diskutil. Це добре знання.