我有一个脚本需要在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


如您所见,它保持不变。

评论

可以在此处找到更好的解决方案这两个问题应该联系在一起!

#1 楼

该模式由分区的挂载选项(不能通过chmod更改)确定。

对于文件上的“ 755”和目录上的“ 777”,您将使用诸如>
sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever


评论


好的,那也可以解释其他一些事情。

–内森·奥斯曼(Nathan Osman)
2010年11月6日23:42

如果必须更改名为/ media / Prtn的HDD分区的权限,应该用什么替换/ dev / whatever和/ mnt / whatever。

–血腥
2014年2月3日13:02

这样安装是否可以保留磁盘的原始设置?即挂载Windows驱动器是否安全?

–乔纳森
2014年5月22日,0:58

我将用户设置为“ andrew”,这是我的主要用户。通过ls进行ntfs分区显示,其中的所有文件/目录均由root拥有。

–deathangel908
16年7月16日在11:28

真正的解决方案是ntfs-3g.usermap。见下文...

–爱德华多·库莫(Eduardo Cuomo)
17年2月26日在14:21

#2 楼

与大多数人的看法相反,NTFS是POSIX兼容¹文件系统,可以在NTFS上使用权限。
要启用此功能,您需要一个“用户映射文件”或在挂载时仅提供permissions选项(当不需要与Windows兼容时)。这会将具有用户ID的Linux用户映射到系统上的Linux,例如NTFS / Windows在内部使用它们。
有关一些信息和示例,请参见ntfs-3g联机帮助页。 3g有关所有权和权限的高级文档。
(请注意,这不适用于FAT文件系统。)
¹是的,它还可以存储在linux / unix中有效但在Windows下无效的文件名,支持符号链接和硬链接等。

评论


这是很好的文档。简而言之:sudo ntfs-3g.usermap / dev / disk / by-label / MY-NTFS,然后sudo mv UserMapping /media/MY-NTFS/.NTFS-3G/

–飞羊
2013年1月6日23:40

因此,这将允许您在Linux上安装的NTFS分区上随意设置chmod 655 / some / file之类的权限?我试图弄清楚如何将Linux的主分区合并到c:\ Users。使用usermap可以让我保留所有权限吗?我打算在Linux上将c:\ Users目录安装到/ home。

–trusktr
2014年2月13日在7:22

让我再次强调您的意见:“何时不需要与Windows兼容”。参考:askubuntu.com/questions/92863/…

–椭圆视图
2016年9月13日,1:15

ntfs-3g联机帮助页链接已损坏

–ctrl-alt-delor
16-09-29在20:17

Eduardo Cuomo在这里写下了制作“用户映射文件”所需的所有步骤的一个很好的例子:askubuntu.com/a/887502/327339

–加百利·斯台普斯
17年4月5日在2:54

#3 楼

对于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则允许用户挂载和卸载。

评论


这些权限如何存储?在ADS中?其他元数据?

– Nanofarad
2012年11月4日19:47

那么fat32呢?我有一个受写保护的Micro SD卡,我无法对其进行格式化。

–瓦卡斯
13年8月8日在17:27

@RanaMuhammadWaqas-这是一个古老的问题,但是您也可以使用其他选项来安装它。很难知道您的问题是什么,也许确定您的硬件并提出一个单独的问题。

–豹
13年11月8日在17:28

@ bodhi.zazen用户表示noexec,nosuid和nodev。不是吗用户如何设置noexec来挂载/卸载?

–Khurshid Alam
15年6月23日在13:32

@EduardoCuomo-在答案中发表评论说它不起作用可能不会帮助您。什么文件系统?我建议你提出一个问题。您需要标识文件系统并发布fstab条目

–豹
17年2月27日在18:28

#4 楼

除了在上面的htorque答案中设置fmask和/或dmask之外,如果要在驱动器上执行脚本,我还必须设置“ exec”挂载选项。 :

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever


#5 楼

您始终可以显式调用脚本解释器,在这种情况下,不需要执行权限。如果脚本使用bash(可以通过查看脚本的第一行进行验证),则只需运行

bash script.sh


,请注意,该脚本会调用同一分区,这将无法正常工作。还要注意,该策略不适用于二进制文件,而不是使用Bash Script,Perl,Python等编写的文本脚本文件。

评论


+1-我从没想过以这种方式调用它。

–内森·奥斯曼(Nathan Osman)
2010-12-14 20:58

要执行二进制文件,请对64位程序使用/lib64/ld-linux-x86-64.so.2 ./program.bin,对32位程序使用/lib/ld-linux.so.2 ./program.bin 。

– Lekensteyn
2012年4月13日19:52

#6 楼

根据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文档的相关部分中提取的详细说明如下:下载用户映射工具,将其提取到某个位置(在我的情况下,驱动器为C:),最好在NTFS分区之外(在我的情况下,驱动器是D:)。

打开Windows命令行。切换到tools工具的提取目录usermap(默认情况下)。然后运行以下命令:

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 SID。您可以通过命令q4​​312079q和whoami /user分别检查它们。

确保SID正确后,按照注释中的说明进行操作,即在Linux上将whoami /groups行中的user更改为您的用户名,并将user::SID行中的group更改为您的主组名。在Ubuntu上,它们是相同的。此外,还要在:group:SID行的第一个冒号之后添加Linux组名。因此,该行应类似于user::SID。似乎如果不这样做,在Windows上创建的文件将被分配给Linux上的user:group:SID
保存文件。将其移动到要共享的NTFS分区(在我的情况下为user:root)上的名为.NTFS-3G的目录中(如果尚不存在,请创建它)。新目录和新文件。

第2部分

现在启动Linux。 D:编辑文件sudo。将共享NTFS分区的行添加或修改为如下所示:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0


本质是设置/etc/fstabumaskdmask也可以工作,但未经测试)。尽管我选择了fmask,但是为您喜欢的umask选择一个值。似乎没有此设置,将为新创建的文件赋予完全权限。

保存文件。现在077或重新挂载(o然后sudo mount)共享的NTFS分区(在我的情况下为sudo umount):

$ sudo mount /data


第3部分仍然在Linux上)sudo mount到挂载点(在我的情况下是/data),cd那里的文件。检查它们的所有权和权限是否分别与在/data文件中指定的所有权和在ls -l中设置的UserMapping匹配(许可权和umask之间的匹配需要一些补码计算,有关更多信息,请参见man(1)umask)。如果他们这样做,那么恭喜您,目标就实现了一半。否则,可怜你。询问Ubuntu或Windows。

然后创建一个新目录和一个新文件。 /etc/fstab检查其所有权和权限。所有权应像往常一样是您的用户名和主要组。权限应与umask相匹配。现在,重新启动计算机并启动到Windows。在共享NTFS分区上,找到刚在Linux上创建的目录和文件。检查它们的属性以查看它们是否已分配给您的Windows帐户。如果是的话,恭喜,您已经完成。否则,运气不好。询问Windows或Ubuntu。

EOF

#7 楼

我知道,旧线程仍然有用,但仍然缺少一个特殊的用例技巧,它由其他各种论坛/线程上的不同建议组成,并在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


接下来,重新插入驱动器并享受:)

评论


太好了,这应该是公认的答案。

–leftaround关于
16-9-10上午21:10

#8 楼

所有步骤:



安装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文件: br />
mount -a
sudo mkdir /mnt/windows/.NTFS-3G
sudo mv UserMapping /mnt/windows/.NTFS-3G/


更新安装线:


备份当前的安装线!复制该行,并在开头添加一个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重新安装: />
sudo vim /etc/fstab



对您拥有的每个NTFS分区都执行一次!

警告WINDOWS操作系统!

我用Windows 7+和权限会影响Windows操作系统!我更改了Windows分区上主目录的权限,当我再次使用Windows时,我可以看到用户已损坏!

评论


ntfs-3g.usermap在最近的发行版中已重命名为ntfsusermap-请参阅:askubuntu.com/a/996255/605262

–埃里克·里德(Eric Reed)
20年6月6日在21:24

#9 楼

在具有自定义权限和所有者的USB驱动器中安装NTFS分区。

在Linux中,NTFS(和FAT32)的模式由分区的安装选项确定。不能通过chmod对其进行更改。

假设:USB驱动器显示为sdb1,请进行修改以匹配您所用的驱动器号和分区号。通用语法为sdxn,其中x是驱动器号,n是分区号,例如sudo lsblk -f

准备




NTFS分区。

sudo umount /dev/sdxn   # general syntax
sudo umount /dev/sdb1   # modify to match your case



创建自定义挂载点(仅当需要新的挂载点时),例如,使用

sudo mkdir -p /mnt/sd1



检查用户ID的uid编号(通常为1000,有时为1001或1002 ...)

grep ^"$USER" /etc/group


和如果要获取所有权,请使用该数字(默认值为root)。


安装NTFS分区

示例1(无文件执行权限,无访问权限代表“其他”),在这种情况下,您可以运行带有

sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb1 /mnt/sd1  # modify to match your case
的脚本this-script


示例2(具有文件的执行权限,没有对“其他”的访问权限),

bash /mnt/sd1/this-script




在这种情况下,您可以运行脚本this-script

sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdb1 /mnt/sd1  # modify to match your case


,您也可以从此位置运行可执行程序(不建议这样做)。 3(每个人都有完整的权限,当有多个用户时,这很方便但不安全),

/mnt/sd1/this-script

评论


/ media $ sudo mkdir -p sdb1 / media $ sudo mount -o rw,users,umask = 000,exec / dev / sdb1 ./sdb1/ mount:块设备/ dev / sdb1被写保护,只读安装

–alhelal
17年11月29日在16:02



@alhelal,恐怕您的USB驱动器的硬件已变为只读或“网格锁定”。但是文件系统也可能存在一些问题,如果文件系统已损坏,您可能可以通过在Windows中使用GUI方法或命令行chkdsk / f X修复它来修复它:此链接ubuntuforums.org/…-如果仍然不走运,请备份数据并根据askubuntu.com/questions/144852/…进行尝试。

– sudodus
17年11月29日在17:21



#10 楼

USB设备没有相关的问题。如果您想以执行权限自动安装每个USB设备,此答案将提供一个丑陋的技巧。