我不知道原因,但是 Linux 用户权限在 NTFS 文件系统上不起作用...无论如何,如果将文件从 Windows 复制到 Ubuntu,Ubuntu 必须授予他们所有权和用户权限。那么 Ubuntu 在哪里保存文件的用户权限?问题是,将文件从 Linux 发行版移动到另一个发行版不会改变权限。所以它肯定应该在文件内部。Ubuntu 会重写每个文件吗?
答案1
ext
在 Linux 使用的文件系统中,索引节点用于描述存储的文件。 inode 包含文件的属性以及其数据块位置(这些块包含文件的实际内容)。以下简要介绍了 inode 中存储的内容:
Inode 编号 文件访问、修改和更改时间戳 文件大小 权限 所有者 组 数据块位置
因此,要回答您的问题,Unix 将文件的权限存储在其 inode 中,例如在文件系统中ext4
。
如果要查看某个文件的inode信息,可以使用以下stat
命令:
$ stat /bin/bash
File: ‘/bin/bash’
Size: 635933 Blocks: 624 IO Block: 65536 regular file
Device: 2e208854h/773883988d Inode: 281474976901122 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/ Alaa) Gid: ( 513/ None)
Access: 2014-10-18 13:45:13.375853300 -0400
Modify: 2014-10-08 16:54:16.000000000 -0400
Change: 2014-10-18 13:45:13.438253400 -0400
Birth: 2014-10-18 13:45:13.375853300 -0400
指出你问题中的一点:默认情况下,当你将文件从一个 Linux 发行版复制到另一个发行版时,权限是不是复制。发生的情况是数据块(实际内容)被复制,但所有其他属性都没有被复制。因此,例如,如果您将文件从内部复制到外部硬盘驱动器(两者都格式化为ext4
),则外部硬盘驱动器上复制数据的所有者将成为(我认为)执行复制命令的用户。如果您想保留文件的权限(和其他属性),则必须在命令中使用额外的标志,例如-p
(或--preserve
)cp
:
-p same as --preserve=mode,ownership,timestamps
--preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,owner-
ship,timestamps), if possible additional attributes: context,
links, xattr, all
mode
权限在哪里。使用选项,例如-p
将这些 inode 属性复制到新文件。
Windows 使用 FAT32 或 NTFS,它们是完全不同的文件系统,无法理解 inode。这就是为什么当您将某些内容从 Linux ( ext4
) 复制到 Windows (NTFS 或 FAT32) 时,Windows 会将其自己的属性应用于该文件。
在 Ubuntu 中挂载 NTFS 文件系统时,它会使用命令umask
(或中的选项fmask
和)设置分区中所有内容的权限。当您将某些内容复制到该已挂载分区时,这些文件将接受命令所需的所有内容,并且除非您使用新选项重新挂载整个分区,否则无法更改权限。dmask
fstab
umask
欲了解更多信息,请阅读此处的 ntfs-3g 手册页:http://linux.die.net/man/8/ntfs-3g。
答案2
Linux 通过名为 NTFS3G 的软件使用 NTFS(如果感兴趣,请谷歌查看详细信息)。Linux 和 NTFS 的用户、组和文件权限概念完全不同。这意味着在系统之间转换权限并不简单。
要将 NTFS 权限调整为 Linux 形式,NTFS3G 有两种可能性:(a)忽略 NTFS 的内容,并将所有文件和所有目录设置为相同的 umask;或(b)假设用户映射已完成,它会尝试猜测 Linux 权限的含义是由特定文件/目录的 NTFS 权限决定的。
在情况 (a) 中,Linux 提供的权限未存储在任何地方,任何更改权限的尝试都会被忽略。情况 (b) 读取并存储 NTFS 中的文件权限。