umount
là một lệnh UNIX tuân thủ quan điểm UNIX truyền thống rằng việc ngắt kết nối một hệ thống tệp là một nhiệm vụ quản trị hệ thống .
Lý do đằng sau là việc ngắt kết nối một hệ thống tập tin, nếu được lập kế hoạch hoặc thực hiện kém, có thể gây rối, thậm chí phá hoại, đặc biệt là trên hệ thống nhiều người dùng. Vì vậy, người dùng thường xuyên được bảo vệ khỏi lệnh nguy hiểm tiềm tàng này và chỉ người dùng root hoặc người dùng đặc quyền mới được phép thực thi nó.
Điều này rất có ý nghĩa khi UNIX được sử dụng làm hệ điều hành máy chủ, nhưng HĐH máy tính để bàn dựa trên UNIX (ví dụ: OS X hoặc Ubuntu ) có các nhu cầu khác: bất kỳ người dùng nào cũng có thể ngắt kết nối ổ đĩa flash, ổ cứng di động, v.v. .
Finder và diskutil
(xem man đĩautil để biết thêm thông tin) hoạt động theo cách này. Ví dụ: tôi có thể mở Terminal và chạy thành công:
$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted
trong khi umount
thất bại:
$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted
Finder là gì hoặc diskutil
làm khác nhau là gì? Đằng sau hậu trường, họ gửi yêu cầu đến một daemon có tên com.apple.SecurityServer (xem trang man để biết thêm thông tin), cho phép quyền ngắt kết nối hệ thống tập tin:
$ 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)
Điều này cho phép bất kỳ người dùng nào ngắt kết nối ổ đĩa mà không yêu cầu xác thực bổ sung. (Ubuntu có một triết lý tương tự. Nếu bạn quan tâm, hãy xem câu trả lời này trên AskUb Ubuntu.)
Để hỗ trợ hành vi được giải thích ở trên Finder và diskutil
sử dụng một số khung của 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
, mặt khác, chỉ được liên kết với thư viện động này:
$ 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
sử dụng một số thư viện khác, nhưng không được liên kết với bất kỳ khung nào.)
diskutil
. Đó là kiến thức tốt để có.