据我所知,通常使用 tar 提取文件时,应使用用户 umask 来获取新权限。我的 umask 是 0007。因此,当我创建新文件时,它们具有以下权限:-rw-rw----
我有一个 tar 文件,其中包含具有以下权限的文件:-rw-r--r--
当我使用文件提取 tar 文件时,tar -xzf file.tar.gz
将其权限更改为 -rw-r-----
因此权限发生了变化,但缺少组的写权限。
我是否遗漏了什么?
答案1
umask 不会完全取代权限,它应用于程序在尝试创建文件时指定的基本权限。其目的只是删除权限位,这就是为什么它被称为“掩码”。
例如,当您使用时touch
,它会要求操作系统创建一个权限为 0666 的文件,并在将 umask 应用于该文件后,您会得到0666 & ~0007 = 0660
。
但是,当 tar 提取文件时,umask 为 0644适用于 0644所以最终的结果当然是0644 & ~0007 = 0640
。
简而言之,umask 只能使权限更加严格,而不能减少。(类似地,当 ssh-keygen 想要创建一个 0600 文件来保存您的私钥时,即使应用了 umask,它仍将保持 0600 - 它永远不会变成 0644、0660 或其他东西。)