`fs.mkdir` 正在创建具有与指定权限不同的权限的目录

2023-11-27

由于我的节点程序使用的模块,它需要 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意味着(请随时在评论中告诉我),所以我认为我们可以把它扔掉。这是另一个的意思:

  1. 所有者可以读取、写入和执行(如预期)
  2. 该组可以读取并执行(什么?!我们指定7,这意味着它也应该能够写???)
  3. 其他人都可以读取并执行(再次...我们还指定了7,每个人都应该会写吗?)

所以,为了解决这个问题,我冒险了在 SE.Unix 上找到这篇文章,读完之后,我想我不妨尝试以十进制格式指定权限,而不是八进制格式......

这是我如何改变我们的create.js file:

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);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`fs.mkdir` 正在创建具有与指定权限不同的权限的目录 的相关文章

  • NodeJs 控制台中的 GET /bla - - ms - - 是什么意思?

    当我进入页面时 bla在我的 NodeJS 应用程序中 控制台打印出 GET bla ms 用文字来说 为了更容易谷歌搜索 dash dash ms dash dash 这是什么意思 这是输出morgan https github com
  • 我应该如何在http post请求的请求负载中传递json数据

    我想知道如何在有效负载中传递 json 请求 例如 name test value test var post data var post options host this host path path method POST heade
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可
  • 有人在node/socket.io 中成功实现了动态命名空间吗?

    含义 用户对应用程序进行身份验证 gt 应用程序设置socket io连接的命名空间 http www socketioserver com NAMESPACE 并且节点服务器相应地响应无需针对特定名称空间进行硬编码 到那个特定的命名空间
  • 重写规则,以便正确加载具有绝对路径的 css 和 js 文件

    我花了两个小时 但我无法弄清楚 我不知道如何谷歌解决方案 这是我在 htaccess 文件中的重写规则 RewriteCond REQUEST URI blog RewriteRule blog http localhost 2368 1
  • 如何使用 Karma 测试 NodeJS 后端代码(testaulous)

    如何设置 Karma 来运行我的后端单元测试 用 Mocha 编写 如果我将后端测试脚本添加到files 它未能说明require未定义 你不知道 Karma 仅用于测试基于浏览器的代码 如果您的项目在后端有 mocha 测试 在前端有 k
  • JITSU 无法安装 OSX [节点 0.8.17 和 NPM 1.2.0] WTF

    我在通过 NPM 安装 jitsu 时遇到问题 我在 mac osx 10 6 8 上安装了节点 0 8 17 和 NPM 1 2 0 当我跑步时 sudo npm install jitsu g 首先它警告未找到自述文件 npm WARN
  • 护照:登录和帐户注册的不同重定向

    我在我的应用程序中使用护照模块 github身份验证 我想根据操作进行重定向 我检查这是否只是正常登录或者用户是否第一次登录 passport use new GitHubStrategy clientID conf github app
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 使用 AWS CDK 为 lambda 指定自定义角色

    我意识到它很新 但我没有看到任何语言的任何示例 说明如何为使用 AWS CDK 创建的 lambda 指定角色 我正在尝试这样做 const cdk require aws cdk cdk const lambda require aws
  • 如何处理文件中的特殊字符(ഀ)

    我有一个文件 当我打开它时 它看起来像这样 Notepad A B C D E 31 HB 39 Ph 49 32 FB 38 Ph 59 当我尝试从 WinScp 打开它时 它看起来如下所示 A B C D E 31 HB 39 Ph 4
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 带有 npm 启动脚本的 Nodejs 应用程序

    我对nodejs很陌生 在我的docker化环境中 我想为nodejs应用程序提供appdynamics支持 这要求每个应用程序都要求将以下内容作为其应用程序的第一行 require appdynamics profile controll
  • 具有自定义权限的 Grails ACL

    Grails 的 Spring Security ACL 插件默认使用具有 4 个基本权限的 BasePermission 类 并使用DefaultFactory来分配此权限 以及分配此 DefaultFactory 的 AclPermis
  • 如何在 VSCode 调试器中执行异步函数? [复制]

    这个问题在这里已经有答案了 如果我在一些 javascript 代码中放入 VSCode 调试器并使用 wait 调用异步函数 它只会返回一个承诺 如何解决调试器中的承诺 以便我可以看到结果是什么 例如 如果我定义一个像这样的函数 cons
  • 从自己的 gitlab 服务器安装节点模块

    我想从我们的 gitlab 服务器安装节点模块 这是存储库的链接 http ABCD GITLAB myGroup myNodeModule git http ABCD GITLAB myGroup myNodeModule git 根据n
  • 从 Nodejs 提供二进制/缓冲区/base64 数据

    我在从节点提供二进制数据时遇到问题 我开发了一个名为的节点模块节点说话它执行 TTS 文本到语音 并返回 Base64 编码的音频文件 到目前为止 我这样做是为了转换base64到缓冲区 二进制文件 然后提供它 var src Base64
  • 如何使用 cradle (CouchDB) 将参数传递给视图

    Using cradle https github com cloudhead cradle 如何将参数传递给 CouchDB 中的视图 Update 假设我想返回与其他属性匹配的文档 key 默认 document format key
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐