问题描述
我有一个需要在NTFS分区上执行的脚本。脚本的权限设置为600。
我试图通过运行chmod 755 script.sh
来修改权限,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
正如你所看到的,它保持不变。
最佳解决方法
该模式由分区的挂载选项决定(不能通过chmod更改)。
对于文件上的’755’和目录上的’777’,您可以使用类似
sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
次佳解决方法
相反的是大多数人认为,NTFS是一个POSIX-compatible¹文件系统,并且可以对NTFS使用权限。
要启用此功能,您需要一个“用户映射文件”,或者在安装时只需提供permissions
选项(当不需要与Windows兼容时)。这将映射系统上的linux用户与用户标识(如NTFS /Windows)在内部使用它们。
有关一些信息和一些示例,请参阅ntfs-3g manpage。如果您需要更多信息,请参阅ntfs-3g advanced documentation about ownership and permissions。
(请注意,这在FAT文件系统上不起作用。)
¹是的,它也可以存储在linux /unix中有效但不在Windows下有效的文件名,支持符号链接&硬链接等。
第三种解决方法
对于NTFS分区,使用fstab中的permissions
选项。
首先卸载ntfs分区。
使用blkid
标识您的分区UUID
sudo blkid
然后编辑/etc/fstab
# Graphical
gksu gedit /etc/fstab
# Command line
sudo -e /etc/fstab
并为ntfs分区添加或编辑一行
# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0
制作一个安装点(如果需要)
sudo mkdir /media/windows
现在挂载分区
mount /media/windows
我给你的选项auto
将在引导时自动挂载分区,users
允许用户挂载和挂载。
然后你可以在ntfs分区上使用chown和chmod。
第四种方法
除了在htorque的回答中设置fmask和/或dmask之外,如果你想在驱动器上执行脚本,我还必须设置”exec”挂载选项。
所以这个例子是:
sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
第五种方法
您始终可以显式调用脚本解释器,在这种情况下,不需要执行权限。如果脚本使用bash,可以通过查看脚本的第一行进行验证,只需运行即可
bash script.sh
请注意,该脚本在同一分区上调用其他脚本或二进制文件,这不起作用。还要注意,该策略不适用于二进制文件,而不是用Bash脚本,Perl,Python或类似文件编写的文本脚本文件。
第六种方法
根据NTFS-3G文档的Ownership and Permissions部分,我们可以使用安装选项来控制文件访问和创建。这些组合非常复杂(请参阅那里的两个表格)。此外,我不读,并得到所有的人。例如,我不知道是否在compile-time中选择了POSIX ACL,还是不知道NTFS-3G二进制包中是否选择了POSIX ACL。但是我出来的最好的方法是使用User Mapping文件和一些安装选项来近似Windows和Linux之间文件所有权和权限的可信映射。
警告:这只是在双启动Windows 8和Kubuntu 14.04之间共享NTFS数据分区(Windows上的驱动器D:
)的最佳选择。这些说明记录在仔细的回顾中,但未经彻底测试。再次重复整个过程太令人厌倦和乏味。因此,请自行承担风险。但是,如果你这样做,分享你的经验。如果您决定按照说明进行操作,请在实际演示前全面阅读以获得完整的说明。祝你好运!
好吧,你走吧!详细的说明由三部分组成。第1部分应在Windows上执行,而第2部分在Linux上执行。第3部分是测试。
第1部分
NTFS-3G文档的User Mapping部分指定了两个版本来设置Windows和Linux之间的用户映射,一个Windows版本和一个Linux版本。我的经验是,Linux版本错过了。 Linux帐户未映射到我的Windows帐户,但某个未知帐户出现在SID下。结果是一团糟,因为这个未知的帐户拥有我Windows帐户的所有文件的所有权。在这种情况下,除非您拥有管理权限才能恢复您的所有权,否则Windows帐户下的文件将无法访问。但是,即使你在使用,它仍然是一个错误的映射。这意味着,后来在Linux上创建的任何文件都将分配给Windows上的未知帐户,而Windows上的那些文件将分配给Linux上的根(如果我没有记错的话)。所以在Windows上,您需要重新获得所有权,并在Linux上更改所有权。这不是我们所期望的。经过几次无望的尝试来解决这个问题,我放弃了,转向Windows版本。那个工作。从NTFS-3G文档的相关部分摘录的详细说明如下:
-
下载usermap工具,将它解压到某处(在我的情况下为驱动器
C:
),在NTFS分区之外(我的驱动器为D:
)更好。 -
打开Windows命令行。切换到
usermap
工具的提取目录tools
(默认情况下)。然后运行以下命令:C:\tools> mapuser > UserMapping
这会生成一个模板并将其重定向到名为
UserMapping
的文件。用文本编辑器打开文件,比如记事本,你应该看到以下几行:# Generated by usermap for Windows, v 1.1.5 # For Windows account "Account" in domain "Domain" # Replace "user" and "group" hereafter by matching Linux login user::SID :group:SID
据推测,第一个
SID
应该是你的用户SID,而第二个是你的组SID。您可以分别通过命令whoami /user
和whoami /groups
检查它们。 -
确保SID正确后,按照注释中的说明进行操作,即将
user::SID
行中的user
更改为用户名,将:group:SID
行中的group
更改为Linux上的主组名。在Ubuntu上,它们是一样的。此外,在user::SID
行的第一个冒号后面添加您的Linux组名称。所以这条线应该看起来像user:group:SID
。看来如果不这样做,在Windows上创建的文件将被分配给Linux上的user:root
。 -
保存文件。将它移动到名为
.NTFS-3G
(如果不存在的话,创建它)在NTFS分区上共享(在我的情况下,驱动器D:
)。 -
这一步是在第3部分中测试的。在共享NTFS分区上,创建一个新目录和一个新文件。
第2部分
现在启动到Linux。 sudo
编辑文件/etc/fstab
。将共享NTFS分区的行添加或修改为以下内容:
UUID=... /data ntfs defaults,umask=077,utf8 0 0
关键是设置umask
(dmask
和fmask
也可以工作但未经测试)。选一个你喜欢的umask
值,虽然我选了077
。看起来没有这个设置,o
将为newly-created文件提供完整的权限。
保存文件。现在sudo mount
或重新安装(sudo umount
然后sudo mount
)共享的NTFS分区(在我的情况下是/data
):
$ sudo mount /data
第3部分
现在(仍然在Linux上)cd
到挂载点(在我的情况下,/data
),ls -l
那里的文件。检查他们的所有权和权限是否分别与您在UserMapping
文件中指定的权限和您在/etc/fstab
中设置的umask
(权限和umask
需要一些补充计算的匹配,请参阅man (1) umask获取更多信息)相匹配。如果他们这样做,恭喜,一半的目标已经实现。否则,可怜你。询问Ubuntu或Windows。
然后创建一个新目录和一个新文件。 ls -l
检查他们的所有权和权限。像往常一样,所有权应该是您的用户名和主要组。权限应该与umask
匹配。现在重新启动计算机并启动到Windows。在共享的NTFS分区上找到刚在Linux上创建的目录和文件。检查他们的属性,看他们是否被分配到您的Windows帐户。如果是,恭喜,你们都完成了。否则,运气不好。询问Windows或Ubuntu。
EOF
第七种方法
旧线程,我知道,但仍然相关并缺少一个特定的用例提示,它由各种其他论坛/线程上的不同建议组成,并在Ubuntu GNOME 13.04上进行了测试,我需要一个外部驱动器来存放Steam库。
例如,当NTFS分区位于外部USB驱动器上时(这意味着分区在连接时即刻挂载),则可以使用以下方法使udev装入具有执行权限的ntfs分区。
打开终端窗口,然后执行:
$ sudo nano /etc/udev/rules.d/90-usb-disks.rules
然后粘贴这行应该是一个空白/新文件(如果没有,然后退出nano并重新发布命令,但开始文件名称与更高的数字像91 -…):
ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"
然后保存并关闭。拔下驱动器,然后在终端上执行:
$ sudo service udev restart
接下来,将驱动器重新插入并享受:)
第八种方法
所有步骤:
-
安装
ntfs-3g
:sudo apt-get install -y ntfs-3g
-
卸载NTFS分区:
sudo umount /mnt/windows
-
使用
ntfs-3g.usermap
生成UserMapping
文件:sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
要么
sudo ntfs-3g.usermap /dev/sdb1
-
重新安装NTFS分区以添加
UserMapping
文件:mount -a sudo mkdir /mnt/windows/.NTFS-3G sudo mv UserMapping /mnt/windows/.NTFS-3G/
-
更新您的
fstab
文件:sudo vim /etc/fstab
更新安装线:
-
备份您当前的安装线!复制该行并在开始时添加
#
以对其进行评论。 -
更改下一个:
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
重新安装:sudo umount /mnt/windows sudo mount -a
为每个NTFS分区做一次!
使用WINDOWS操作系统警告!
我用Windows 7+检查它,并且权限影响Windows操作系统!我在Windows分区上更改了我的主目录的权限,当我再次使用Windows时,我可以看到用户已损坏!