`fs.mkdir` 正在创建与指定权限不同的目录
`fs.mkdir` is creating the directory with different permissions than those specified
由于我的节点程序使用的模块,它需要 root 才能 运行。这是因为它必须 运行 端口 80 上的 HTTP 服务器(如您所知,较低的端口需要 root 才能使用)。
但是,该程序还使用fs
方法来创建文件。只要我可以更改权限,我不介意 root 是否是所有者......但这正是我遇到问题的地方。
我正在使用 fs.mkdir
函数创建目录,如下所示:
(假设此文件名为 create.js
)
fs.mkdir(__dirname + "/.loud", 0777, function(err){
if (err) console.log("Failed to create file at " + __dirname + "/.loud");
});
执行它时(记住,通过 sudo,sudo node create.js
)它实际上创建了文件夹...但是提供的权限 (0777
) 是错误的!...
如果我没记错的话,7
表示读取、写入和执行。将它用于 3 个字段(777
+ 前导 0
以将其表示为八进制)应该意味着每个人都可以在该文件夹内读取、写入和执行……但这是我得到的检查文件夹权限时:
[imac] jamen : ~/Tests/mkdir $ ls -a -l .
...
drwxr-xr-x 2 root root 4096 Jun 12 22:27 .loud
所以,让我们分开开始的权限部分:
d, rwx, r-x, r-x
所以,我不知道 d
是什么意思(请随时在评论中告诉我),所以我想我们可以把它扔掉。这是另一个的意思:
- 所有者可以读取、写入和执行(如预期的那样)
- 该组可以读取和执行(什么?!我们指定了
7
,意味着它应该也可以写入???)
- 其他人都可以读取和执行(再次...我们还指定了
7
,每个人是否也可以写入?)
所以,为了解决这个问题,我进行了一次冒险 found this post on SE.Unix,在阅读之后,我想我不妨尝试以十进制格式而不是八进制格式来指定权限.. .
以下是我更改 create.js
文件的方式:
fs.mkdir(__dirname + "/.loud", 511, function(err){
if (err) console.log("Failed to create file at " + __dirname + "/.loud");
});
(因为八进制的0777表示为十进制的511)
但是,不幸的是,这给出了完全相同的结果(是的,我确实在再次 运行 之前删除了文件夹,否则 NodeJS 会在回调中传递错误):
[imac] jamen : ~/Tests/mkdir $ ls -a -l .
...
drwxr-xr-x 2 root root 4096 Jun 12 22:35 .loud
我是不是误解了 Unix 的权限方案,还是我在 NodeJS 中犯了错误?
我该如何解决这个问题,使文件夹获得权限 0777
,暗示所有者是 rwx 权限,该组有 rwx 权限,其他人有 rwx 权限...?
因为它适用于 umask 您的模式。在您的控制台中输入 umask
,您将看到 022 或 0022。
您可以使用 process.umask(newmask);
为您的节点进程覆盖它
由于我的节点程序使用的模块,它需要 root 才能 运行。这是因为它必须 运行 端口 80 上的 HTTP 服务器(如您所知,较低的端口需要 root 才能使用)。
但是,该程序还使用fs
方法来创建文件。只要我可以更改权限,我不介意 root 是否是所有者......但这正是我遇到问题的地方。
我正在使用 fs.mkdir
函数创建目录,如下所示:
(假设此文件名为 create.js
)
fs.mkdir(__dirname + "/.loud", 0777, function(err){
if (err) console.log("Failed to create file at " + __dirname + "/.loud");
});
执行它时(记住,通过 sudo,sudo node create.js
)它实际上创建了文件夹...但是提供的权限 (0777
) 是错误的!...
如果我没记错的话,7
表示读取、写入和执行。将它用于 3 个字段(777
+ 前导 0
以将其表示为八进制)应该意味着每个人都可以在该文件夹内读取、写入和执行……但这是我得到的检查文件夹权限时:
[imac] jamen : ~/Tests/mkdir $ ls -a -l .
...
drwxr-xr-x 2 root root 4096 Jun 12 22:27 .loud
所以,让我们分开开始的权限部分:
d, rwx, r-x, r-x
所以,我不知道 d
是什么意思(请随时在评论中告诉我),所以我想我们可以把它扔掉。这是另一个的意思:
- 所有者可以读取、写入和执行(如预期的那样)
- 该组可以读取和执行(什么?!我们指定了
7
,意味着它应该也可以写入???) - 其他人都可以读取和执行(再次...我们还指定了
7
,每个人是否也可以写入?)
所以,为了解决这个问题,我进行了一次冒险 found this post on SE.Unix,在阅读之后,我想我不妨尝试以十进制格式而不是八进制格式来指定权限.. .
以下是我更改 create.js
文件的方式:
fs.mkdir(__dirname + "/.loud", 511, function(err){
if (err) console.log("Failed to create file at " + __dirname + "/.loud");
});
(因为八进制的0777表示为十进制的511)
但是,不幸的是,这给出了完全相同的结果(是的,我确实在再次 运行 之前删除了文件夹,否则 NodeJS 会在回调中传递错误):
[imac] jamen : ~/Tests/mkdir $ ls -a -l .
...
drwxr-xr-x 2 root root 4096 Jun 12 22:35 .loud
我是不是误解了 Unix 的权限方案,还是我在 NodeJS 中犯了错误?
我该如何解决这个问题,使文件夹获得权限 0777
,暗示所有者是 rwx 权限,该组有 rwx 权限,其他人有 rwx 权限...?
因为它适用于 umask 您的模式。在您的控制台中输入 umask
,您将看到 022 或 0022。
您可以使用 process.umask(newmask);