Ubuntu 将文件的用户权限保存在哪里?

Ubuntu 将文件的用户权限保存在哪里?

我不知道原因,但是 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(或--preservecp

   -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和)设置分区中所有内容的权限。当您将某些内容复制到该已挂载分区时,这些文件将接受命令所需的所有内容,并且除非您使用新选项重新挂载整个分区,否则无法更改权限。dmaskfstabumask

欲了解更多信息,请阅读此处的 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 中的文件权限。

相关内容