如果有一个名为new.txt
which 具有权限的文件-rw-r--r--
,但是当有人使用时chmod 777 new.txt
权限会被更改。那么如果我不知道new.txt之前的权限,如何取回原来的权限。
答案1
系统不会为您维护以前的文件权限历史记录。如果您的备份包含该文件及其原始权限,您可以通过列出该备份的内容来获取原始权限信息。
根据您使用的备份解决方案,您甚至可能不需要恢复任何实际文件:只需包含文件权限的备份内容的目录列表就足够了。
如果没有备份,就必须动脑筋来推断应该有哪些权限。作为亚型 说,用户的umask
设置决定了用户创建的任何文件或目录的默认权限。
对于大多数常规文件,权限的“起始集”是 666,然后该umask
值用于屏蔽某些权限。因此,如果您知道用户的umask
值为 022,那么新文件的实际默认权限将为 666 - 022 = 644,或-rw-r--r--
.
注意:权限数字为八进制,实际操作使用布尔运算符:666 AND (NOT 022) = 644。
对于目录和可执行文件,权限的“起始集”将为 777 而不是 666。因此,如果用户的权限umask
为 022,则新目录的实际默认权限将为 777 - 022 = 755,或drwxr-xr-x
.
答案2
您无法“恢复文件的原始权限”。不过,您可以做的是将它们设置为默认设置现在。
touch /tmp/file.$$ # Create a temporary file with "default" perms
chmod --ref=/tmp/file.$$ new.txt # "Reset" the file new.txt
rm -f /tmp/file.$$ # It's always good to tidy up
umask
默认设置由 shell 的值控制。在我的系统上,以下是当前设置:
umask
0022
这意味着写入权限(值 02,二进制 010)团体和其他的是已删除当创建文件或目录时。
另请注意,大多数编辑器不会创建带有可执行位集(二进制值 001)的文件,即使设置应该允许这样做umask
。作为用户,您可以区分普通文件(没有执行权限)和脚本文件(有执行权限):
chmod +x new.txt # Add execute permission
答案3
默认权限由 定义umask
。如果你想找到新创建的文件的默认权限,你可以查看它。如果您想要查找安装权限的文件是软件包的一部分,您通常可以查看它并找出答案。