umount
adalah perintah UNIX yang menganut perspektif UNIX tradisional yang meng-unmount sistem file adalah tugas administrasi sistem .
Alasan di baliknya adalah bahwa melepas sistem file, jika tidak direncanakan atau dijalankan dengan buruk, dapat mengganggu, bahkan merusak, terutama pada sistem multiuser. Jadi pengguna biasa dilindungi dari perintah yang berpotensi berbahaya ini dan hanya root atau pengguna yang memiliki hak istimewa yang diizinkan untuk menjalankannya.
Ini masuk akal ketika UNIX digunakan sebagai sistem operasi server, tetapi OS desktop berbasis UNIX (misalnya, OS X atau Ubuntu ) memiliki kebutuhan lain: setiap pengguna harus dapat melepas drive flash, hard drive yang dapat dilepas, dll. .
Finder dan diskutil
(lihat man diskutil untuk informasi lebih lanjut) bekerja dengan cara ini. Misalnya, saya bisa membuka Terminal dan berhasil menjalankan:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
sedangkan umount
gagal:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
Apa yang Finder atau diskutil
lakukan berbeda? Di belakang layar, mereka mengirim permintaan ke daemon bernama com.apple.SecurityServer (lihat halaman manual untuk informasi lebih lanjut), yang memberikan hak untuk meng-unmount sistem file:
$ 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)
Ini memungkinkan setiap pengguna untuk melepas drive tanpa memerlukan otentikasi tambahan. (Ubuntu memiliki filosofi yang serupa. Jika Anda tertarik, lihat jawaban ini di AskUbuntu.)
Untuk mendukung perilaku yang dijelaskan di atas, Finder dan diskutil
menggunakan beberapa kerangka kerja 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
, di sisi lain, hanya tertaut ke pustaka dinamis ini:
$ 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
menggunakan beberapa perpustakaan lain, tetapi tidak ditautkan ke kerangka apa pun.)
diskutil
. Itu adalah pengetahuan yang bagus untuk dimiliki.