我备份了一个NTFS驱动器,事实证明,这种备份确实很有必要。但是,NTFS驱动器弄乱了权限。我想将它们恢复为正常,而无需手动修复每个文件。
一个问题是突然我的所有文本文件都获得了执行权限,这是错误的。所以我尝试了:
sudo chmod -R a-x folder\ with\ restored\ backup/
但这是错误的,因为它x
也会从目录中删除权限,这会使它们不可读。
在这种情况下正确的命令是什么?
我备份了一个NTFS驱动器,事实证明,这种备份确实很有必要。但是,NTFS驱动器弄乱了权限。我想将它们恢复为正常,而无需手动修复每个文件。
一个问题是突然我的所有文本文件都获得了执行权限,这是错误的。所以我尝试了:
sudo chmod -R a-x folder\ with\ restored\ backup/
但这是错误的,因为它x
也会从目录中删除权限,这会使它们不可读。
在这种情况下正确的命令是什么?
Answers:
chmod -R -x+X *
将-x
删除所有用户
的执行权限。+X
将添加所有用户的执行权限,但仅适用于目录。
chmod -R -x+x *
chmod -R -x * && chmod -R +X *
好的,我重新阅读了Mac OS X,BSD和Linux的“ chmod”手册页,并做了一些实验。这是我对符号模式的了解。它可能会变得复杂,但是值得理解:
因此,例如,a+x
将使每个人都可执行文件。a+X
如果文件已经被任何人执行过,它将使每个人都可以执行该文件。
a+x
将使每个人都可以搜索目录。a+X
还将使每个人都可以搜索目录。
BSD和Linux之间的主要区别在于,使用BSD时,将根据执行chmod 之前文件的权限进行确定。在Linux中,确定是在执行+ X子句之前立即进行的。
因此,对于BSD,该组合a-x,a+X
将删除执行/搜索权限,然后使每个人都可以搜索目录,并且如果一个文件最初可以由任何人执行,则使每个人都可以执行该文件。
使用Linux,a-x,a+X
将删除执行/搜索权限,然后使每个人都可以搜索目录,而让任何人都无法执行文件。
这是一个具体的示例:在BSD机器上:目录,可执行文件和不可执行文件:
drwxr-x--- 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--- 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
请注意,目录和“ fie”都可以由用户执行/搜索,而其他用户则不能。
现在我们执行chmod a-x,a+X *
。第一个子句将从所有用户的所有文件中删除执行/搜索位,但是第二个子句将为“ fee”和“ fie”添加回去。“ fee”是因为它是一个目录,而“ fie”是因为它至少有一个可执行位。
drwxr-x--x 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--x 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
我执行的结果相同chmod -x+X
。
结论:Jak Gibb的解决方案可以在Linux上运行,但是对于BSD,您需要进行两次验证。
我没有在SVr4或其他Unix变体上进行测试。
一种方法:
find backup -type f -exec chmod 0644 {} +
chmod a-x {}
chmod a-x {}
最终也可能会删除您不想更改的权限,这可能会使文件在世界范围内可写。关键是,0644是“通常合理的”折衷方案。当然,在他的计算机上应用Internet解决方案之前,OP还应该吸引大脑。
chmod
是什么。如果备份文件包含脚本和二进制文件,x
则从它们中删除是错误的。如果之前的权限chmod
为0777,则chmod a-x
仍将其保留为0666,这可能不是您想要的。我的意思是说,这chmod 0644
是更好的启发法,不是chmod a-x
错。
find backup ! -type l ! -type d -exec chmod a-x {} +
将删除对不是目录类型(根据您的请求)或符号链接的文件的执行许可(符号链接通常始终为rwxrwxrwx,并且chmod
会影响它们上的符号链接的目标)。
注意:
find backup -type f -exec chmod a-x {} +
只会更改常规文件的权限。这将排除目录和符号链接,但不包括设备,命名管道,套接字以及可能取决于系统的其他设备(尽管在OP备份NTFS文件系统的情况下,不太可能存在)。