我有一个非常基本的问题,在 10 次 google 请求和浏览我的 unix 教科书后仍然找不到答案,所以:
考虑一个有 2 个硬盘的系统,根文件系统位于/dev/sda1
,/home 分区位于/dev/sdb1
。现在,一个 UID=1000:GID=1000 的进程想要挂载/dev/sdb1
位于 的文件系统/mnt/backup
。我可以想象它是如何发生的两种场景:
我想知道,在什么 UID 和 GID 下,他新安装的文件系统是可见的:
1.UID 和 GID 可能会被保留,如图所示。
2.已安装文件系统上的 UID 和 GID 可能设置为安装进程的 UID 和 GID=1000。如果文件系统中根本不存在 UID 和 GID,则会发生以下情况:
我的问题是:
- 情况1和情况2在什么情况下发生?有哪些参数
mount
系统调用确定其中哪一个发生? - 在情况2中,如何确定文件的实际UID和GID。在我的示例中,挂载的文件系统中的
/mnt/backup/john
和都/mnt/backup/jane
设置为 UID=1000,但实际上它们的 UID 是 1002 和 1003。我如何知道它们? - 在情况 1 中,如果系统中不存在 Jane 的 UID=1003,会发生什么情况?
答案1
如果使用该命令,ls -n
您可以查看给定安装的磁盘/分区上的 UID。
$ ls -n
total 24
drwxrwxr-x 2 500 501 4096 May 24 15:44 bin
-rw-rw-r-- 1 500 501 11650 May 24 15:44 bouncer.log
drwxrwxr-x 5 500 501 4096 May 23 14:56 testdata
drwxrwxr-x 5 500 501 4096 May 24 14:55 testresults
您还可以使用以下stat
命令查看有关给定文件的 UID/GID 的更多详细信息:
$ stat bouncer.log
File: `bouncer.log'
Size: 11650 Blocks: 24 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 11023682 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 500/ saml) Gid: ( 501/ saml)
Access: 2013-05-24 15:44:17.322878327 -0400
Modify: 2013-05-24 15:44:25.484211596 -0400
Change: 2013-05-24 15:44:25.484211596 -0400
UID 是绝对的。它们是系统上的内容。名称由各种工具映射,例如ls
通过查看系统/etc/passwd
和/etc/group
文件。
如果这些文件中均未表示数字,则显示磁盘上的 UID/GID 编号。
系统管理员有责任确保磁盘上相似的 UID/GID 确实是相同的用户和/或组。 Unix 没有提供任何机制来保证这一点。
答案2
用户 ID 作为 UNIX 兼容文件系统的文件的一部分存储。没有转换。对于非 UNIX 文件系统(例如 fat),您可以在挂载时指定所有文件使用的 ID。如果存储的 ID 映射到错误的用户或根本没有用户,那么他们将显得拥有错误的所有权。