Node.js Права доступа к файлам устанавливаются на 000, когда я создаю файл. Как я могу создать файл с разрешениями на чтение и запись или изменить разрешения?

#node.js #linux #file-permissions

#node.js #linux #файл-разрешения

Вопрос:

Я пытаюсь создать файл через Node.js , и хотел бы специально использовать метод FS.OpenSync(), если это возможно. В настоящее время у меня есть очень простой класс, созданный для создания файла. Класс будет развиваться дальше, но я могу использовать его только после того, как решу свою проблему; как установить права доступа пользователя к файлу для файла, который node создает с помощью метода ‘FS.writeSync ()’, чтобы файл был доступен. После создания файла, я думаю, что разрешения устанавливаются на 001 или 000, какой-то нелепый и ненужный параметр пользовательских разрешений. Ниже я скопировал и вставил свой маленький класс, а ниже — файл, который я использую для создания экземпляра класса, и запускаю метод, который создает файл.

  • Мой класс файла
 /** @format */

/* eslint-disable */
const fs = require('fs');
const {O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC, O_APPEND} = require('fs').constants;
const {Buffer} = require('buffer');
/* eslint-enable */

class TextBasedFile {
    constructor(path) {
        this.path = path;
        this.buf = Buffer.allocUnsafe(400000000); // 40MB (Should be more than enough)
    }

    create() {
        const fd = fs.openSync(this.path, O_CREAT, O_WRONLY);
        console.log('nnnnRESULT: '   fd);
        return fd;
    }

    truncate() {
        const fd = fs.openSync(this.path, O_TRUNC);
        console.log('nnnnRESULT: '   fd);
        return fd;
    }
}

module.exports.TextBasedFile = TextBasedFile;
  
  • Код, который я использую для создания нового текстового файла
 
/** @format */

const {TextBasedFile} = require('./unity/iof');

const sumfile = new TextBasedFile('./someFile.txt');

sumfile.create();



  

Как вы можете видеть, моя настройка очень проста, единственная проблема в том, что я не могу получить доступ к файлу, который я создал, без команды sudo . Я даже не могу получить доступ к файлу от моего пользователя Ubuntu. Ниже приведена распечатка всех файлов в моем каталоге приложений и пользовательских разрешений для каждого из них. Вы можете видеть, что права пользователя для ‘someFile.txt — у меня это не сработает.

 drwxrwxr-x   7 ajay ajay  4096 Oct  1 10:43 .
drwxrwxr-x   4 ajay ajay  4096 Sep 30 20:03 ..
-rwxrwxr-x   1 ajay ajay   533 Sep 30 22:16 app.js
-rwxrwxr-x   1 ajay ajay   858 Sep 30 22:52 .developerNotes.txt
-rwxrwxr-x   1 ajay ajay  1005 Sep 30 22:43 .eslintrc.json
drwxrwxr-x   8 ajay ajay  4096 Sep 30 23:38 .git
-rwxrwxr-x   1 ajay ajay   551 Oct  1 09:26 .gitignore
-rwxrwxr-x   1 ajay ajay  1075 Sep 30 20:03 LICENSE
-rwxrwxr-x   1 ajay ajay  1115 Sep 26 13:32 localhost-cert.pem
-rwxrwxr-x   1 ajay ajay  1704 Sep 26 13:32 localhost-privkey.pem
drwxrwxr-x 107 ajay ajay  4096 Sep 30 20:32 node_modules
-rwxrwxr-x   1 ajay ajay   980 Sep 30 20:31 package.json
-rwxrwxr-x   1 ajay ajay 36991 Sep 30 20:31 package-lock.json
-rwxrwxr-x   1 ajay ajay   466 Sep 30 22:11 .prettierrc
drwxrwxr-x   7 ajay ajay  4096 Sep 30 19:36 public
-rwxrwxr-x   1 ajay ajay   335 Sep 30 20:03 README.md
---------x   1 ajay ajay     0 Oct  1 10:43 someFile.txt
drwxrwxr-x   2 ajay ajay  4096 Sep 30 19:33 unity
drwxrwxr-x   2 ajay ajay  4096 Sep 30 20:05 .vscode

  

Если кто-нибудь знает, как создать файл с настройками разрешений, которые позволяют мне получать доступ к файлу и работать с ним изнутри узла, хорошо….

… это было бы здорово.

Ответ №1:

Не уверен, почему или как ---------x 1 ajay ajay 0 Oct 1 10:43 someFile.txt это произошло. Вы играли со своим umask ?,

Вот как исправить разрешения в вашем коде.

     create() {
        const fd = fs.openSync(this.path, O_CREAT, O_WRONLY);
        fs.fchmodSync(fd, 0o777);
        console.log('nnnnRESULT: '   fd);
        return fd;
    }
  

Комментарии:

1. Нет, я этого не делал, фактически я устанавливаю новый графический интерфейс Ubuntu 20.04. Может быть, это проблема с версией 20.04? Это странно, потому что никто больше не спрашивает об этом.

2. В сложившихся обстоятельствах я собираюсь нанести удар и предположить, что, вероятно, я делаю что-то глупое, но я опубликую то, что когда-либо делал, когда я это выясню, предполагая, что это я, кто это вызвал.