我有一个需要在 NTFS 分区上执行的脚本。脚本的权限设置为 600。
我试图通过运行来修改权限chmod 755 script.sh
,它不会报告失败或任何事情 - 但它也不会更改文件的权限:
$ stat script.sh
File: `script.sh'
Size: 297070 Blocks: 584 IO Block: 4096 regular file
Device: 811h/2065d Inode: 35515 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ xxxxxx) Gid: ( 1000/ xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700
$ chmod 755 script.sh
$ stat script.sh
File: `script.sh'
Size: 297070 Blocks: 584 IO Block: 4096 regular file
Device: 811h/2065d Inode: 35515 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ xxxxxx) Gid: ( 1000/ xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700
如您所见,它保持不变。
与大多数人认为的相反,NTFS 是一个与 POSIX 兼容的¹文件系统,并且可以在 NTFS 上使用权限。
要启用此功能,您需要一个“用户映射文件”或仅
permissions
在安装时提供选项(当不需要与 Windows 兼容时)。这会将系统上的 linux 用户映射到 NTFS/Windows 等用户 ID 在内部使用它们。有关一些信息和一些示例,请参见ntfs-3g 联机帮助页。如果您需要更多信息,请参阅有关所有权和权限的 ntfs-3g 高级文档。
(请注意,这不适用于 FAT 文件系统。)
¹ 是的,它还可以存储在 linux/unix 中有效但在 Windows 下无效的文件名,支持符号链接和硬链接等。
模式由分区的挂载选项决定(不能通过 chmod 更改)。
对于文件上的“755”和目录上的“777”,您可以使用类似
对于 NTFS 分区,使用
permissions
fstab 中的选项。首先卸载 ntfs 分区。
识别您的分区 UUID
blkid
然后编辑
/etc/fstab
并为 ntfs 分区添加或编辑一行
创建一个挂载点(如果需要)
现在挂载分区
我给你的选项
auto
,会在你启动时自动挂载分区,并users
允许用户挂载和卸载。然后,您可以在 ntfs 分区上使用 chown 和 chmod。
除了在上面 htorque 的答案中设置 fmask 和/或 dmask 之外,如果你想在驱动器上执行脚本,我还必须设置“exec”挂载选项。
所以这个例子是:
您始终可以显式调用脚本解释器,在这种情况下不需要执行权限。如果脚本使用bash,可以通过查看脚本的第一行来验证,只需运行
请注意,该脚本调用同一分区上的其他脚本或二进制文件,这是行不通的。另请注意,该策略不适用于二进制文件,而不是用 Bash Script、Perl、Python 等编写的文本脚本文件。
根据 NTFS-3G 文档的所有权和权限部分,我们可以使用挂载选项来控制文件访问和创建。组合非常复杂(参见那里的两个表)。我也没有阅读并获得所有这些。例如,我不知道是否在 NTFS-3G 二进制包的编译时选择了 POSIX ACL。但我得出的最好结果是使用用户映射文件和一些挂载选项来近似 Windows 和 Linux 之间文件所有权和权限的合理映射。
警告:这只是我在双启动 Windows 8 和 Kubuntu 14.04 之间共享 NTFS数据分区(Windows 上的驱动器)的最佳方法。
D:
这些说明是在仔细回顾中记录的,但没有经过彻底测试。再次重复整个过程太累人和乏味。因此,请自行承担风险。但是,如果您这样做,请分享您的经验。如果您决定按照说明进行操作,请在实际操作之前完整阅读以了解全局。祝你好运!好吧,给你!详细说明由三部分组成。第 1 部分应在 Windows 上进行,而第 2 部分应在 Linux 上进行。第 3 部分用于测试。
第1部分
NTFS-3G 文档的用户映射部分指定了两个版本来设置 Windows 和 Linux 之间的用户映射,一个 Windows 版本和一个 Linux 版本。我的经验是 Linux 版本以失败告终。Linux 帐户未映射到我的 Windows 帐户,但在SID下出现了一些未知帐户。结果是一团糟,因为这个未知帐户拥有我 Windows 帐户的所有文件的所有权。在这种情况下,除非您拥有收回所有权的管理权限,否则您的 Windows 帐户下的文件将无法访问。但即使你管理,它仍然是一个错误的映射。这意味着,稍后您在 Linux 上创建的任何文件都会分配给 Windows 上的那个未知帐户,而 Windows 上的那些文件会分配给 Linux 上的 root(如果我没记错的话)。因此,在 Windows 上,您需要再次收回所有权,而在 Linux 上则需要更改所有权。这不是我们所期望的。经过几次无望的尝试来解决这个问题,我放弃了并转向了 Windows 版本。那个有效。从 NTFS-3G 文档的相关部分中提取的详细说明如下:
下载usermap工具,将其提取到某个位置(在我的情况下是 drive
C:
),最好在 NTFS 分区(在我的情况下是 driveD:
)之外进行共享。打开 Windows 命令行。切换到工具的提取目录
tools
(默认情况下)usermap
。然后运行以下命令:这会生成一个模板并将其重定向到一个名为
UserMapping
. 使用文本编辑器打开文件,比如记事本,您应该会看到以下几行:据推测,第一个
SID
应该是您的用户 SID,而第二个应该是您的组 SID。您可以分别通过命令whoami /user
和whoami /groups
.确保 SID 正确后,按照注释中的说明进行操作,即在 Linux 上将行更改
user
为您的用户名和主组名user::SID
。在 Ubuntu 上,它们是相同的。此外,还要在该行的第一个冒号之后添加您的 Linux 组名。所以这条线应该看起来像. 似乎如果不这样做,在 Windows 上创建的文件将被分配到Linux 上。group
:group:SID
user::SID
user:group:SID
user:root
保存文件。将其移动到要共享的 NTFS 分区(在我的情况下为 drive )上名为
.NTFS-3G
(如果不存在则创建它)的目录D:
。此步骤用于第 3 部分中的测试。在共享的 NTFS 分区上,创建一个新目录和一个新文件。
第2部分
现在启动到 Linux。
sudo
编辑文件/etc/fstab
。添加或修改共享 NTFS 分区的行,如下所示:最重要的是设置
umask
(dmask
并且fmask
也可以工作但未经测试)。选择一个umask
你喜欢的值,虽然我选择了077
. 似乎没有这个设置,o
新创建的文件将被授予完全权限。保存文件。现在
sudo mount
或重新挂载(sudo umount
然后sudo mount
)共享的 NTFS 分区(在我的情况下/data
):第 3 部分
现在(仍然在 Linux 上)
cd
到挂载点(在我的例子中,/data
),ls -l
那里的文件。检查它们的所有权和权限是否分别与您在UserMapping
文件中指定的和umask
您在其中设置/etc/fstab
的匹配(权限之间的匹配umask
需要一些补码计算,请参阅man (1) umask了解更多信息)。如果他们这样做了,那么恭喜你,目标实现了一半。否则,可怜你。询问 Ubuntu 或 Windows。然后创建一个新目录和一个新文件。
ls -l
检查他们的所有权和权限。像往常一样,所有权应该是您的用户名和主要组。权限应与umask
. 现在重新启动计算机并启动到 Windows。在共享 NTFS 分区上找到您刚刚在 Linux 上创建的目录和文件。检查它们的属性以查看它们是否已分配给您的 Windows 帐户。如果是,那么恭喜你,你已经完成了。否则,倒霉。询问 Windows 或 Ubuntu。EOF
检查快速启动是否已关闭
如果 Windows 使用快速启动,它是半休眠的,它的文件系统是“脏的”,Linux 将它安装为只读以避免造成损坏。重新启动 Windows (而不是关闭)或关闭快速启动(Windows 中的设置),Linux 愿意以写访问权限挂载 Windows 文件系统。
使用自定义权限和所有者在 USB 驱动器中挂载 NTFS 分区
在 Linux 中,NTFS(以及 FAT32 和 exFAT)的模式由分区的挂载选项决定。您不能通过 chmod 更改它。
假设:USB驱动器被视为
sdb1
,修改以匹配您的驱动器号和分区号。一般语法是sdxn
,其中x
是驱动器号,n
是分区号,例如sudo lsblk -f
准备中
卸载 NTFS 分区。
创建一个自定义挂载点(仅当您想要一个新的挂载点时),例如使用
检查您的用户 ID
uid
号码(通常是 1000,有时是 1001 或 1002 ...)如果您想获得所有权,请使用该号码(默认为
root
)。挂载 NTFS 分区
示例 1(对文件没有执行权限,对“其他人”没有访问权限),
this-script
在这种情况下,您可以运行脚本示例 2(对文件有执行权限,对“其他人”没有访问权限),
this-script
在这种情况下,您可以运行脚本你也可以从这个位置运行可执行程序(不推荐)。
示例 3(每个人的完全权限,方便但不安全,当有多个用户时),
旧线程,我知道,但仍然相关并且缺少一个特定的用例提示,由各种其他论坛/线程上的不同建议组成,并在 Ubuntu GNOME 13.04 上测试,我想要一个外部驱动器来保存一个 Steam 库......
例如,当 NTFS 分区在外部 USB 驱动器上时——这意味着该分区是在连接时即时挂载的——那么您可以使用以下方法使 udev 挂载具有执行权限的 ntfs 分区。
打开终端窗口并执行以下操作:
然后将此行粘贴到应该是空白/新文件的内容中(如果不是,则退出 nano 并重新发出命令,但文件名以更高的数字开头,例如 91-...):
然后保存并关闭。拔下驱动器,然后在终端中执行:
接下来,重新插入驱动器并享受:)
所有步骤:
安装
ntfs-3g
:卸载NTFS分区:
用于
ntfs-3g.usermap
生成您的UserMapping
文件:或者
重新挂载NTFS分区以添加
UserMapping
文件:更新您的
fstab
文件:更新挂载线:
#
在开头添加 a 对其进行注释。UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0
使用ntfs-3g
且唯一的default
选项)它应该看起来像这样:
#UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0
最后,使用您的重新安装
fstab
:对您拥有的每个NTFS分区执行一次此操作!
WINDOWS 操作系统警告!
我用Windows 7+检查它,权限会影响 Windows 操作系统!我在 Windows 分区上更改了我的主目录的权限,当我再次使用 Windows 时,我可以看到用户被破坏了!
USB 设备有 n 个相关问题。如果您想使用执行权限自动挂载每个 USB 设备,这个答案提供了一个丑陋的技巧。