'chmod -644' установит для файла разрешение 000

12

У меня был файл с 644 ( -rw-r--r--) и я хотел изменить его на 664 ( -rw-rw-r--) после запуска:

sudo chmod -664 my_file

права доступа к файлу были установлены на 000 ( ----------).

Попытка изменить разрешения на что-либо отличное от 000, похоже, не работает. Что мне здесь не хватает?

illgoforit
источник
11
Почему у вас -перед 644? Попробуй sudo chmod 644 my_file. -644удалит права.
Сорен А,

Ответы:

34

Вы используете -664, просто используйте 664вместо этого. И никогда не используйте, sudoкогда вам это не нужно. Если это ваш файл, вам не нужно sudo:

chmod 644 my_file

Когда вы запускаете chmodс -перед режимом, вы удалите этот режим. Смотрите man chmod(выделение мое):

Оператор + вызывает добавление выбранных битов режима файла к существующим битам режима файла каждого файла; - вызывает их удаление ; и = вызывает их добавление и приводит к удалению не упомянутых битов, за исключением того, что неизменяемые установленные пользователем биты каталога и идентификаторы группы не затрагиваются.

Числа:

  • 1: выполнить
  • 2: написать
  • 4: читать

Таким образом, файл с 777разрешениями означает, что каждый имеет право делать все три, поскольку 1 + 2 + 4 = 7, и, следовательно, установка разрешений на 7 означает разрешение на чтение, запись и выполнение.

Если вы начинаете с файла, режим которого 777:

$ ls -l my_file 
-rwxrwxrwx 1 terdon terdon 0 May 28 13:45 my_file

А теперь запустите chmod -644, вы удалите биты 644и получите файл, режим которого 133:

$ chmod -644 my_file; ls -l my_file 
---x-wx-wx 1 terdon terdon 0 May 28 13:45 my_file

Это связано с тем, что вы удалили 6 (чтение (4) + запись (2)) из разрешений владельца, оставив только 1 (выполнить) набор и 4 (чтение) из группы и другие разрешения. В результате получается файл с правами только для execute (1) для владельца, а для записи - для остальных и оставляющих (4, 1 и 3) разрешения на запись и выполнение.

Поскольку ваш файл предположительно имел разрешения по умолчанию для новых файлов, поэтому 644при запуске chmod -644 my_fileвы удалили все установленные биты разрешений и получили файл без каких-либо разрешений.

$ ls -l my_file 
-rw-r--r-- 1 terdon terdon 0 May 28 13:45 my_file
$ chmod -644 my_file
$ ls -l my_file 
---------- 1 terdon terdon 0 May 28 13:45 my_file
terdon
источник