chmod — команда изменения прав файлов и папок в linux

В *nix-системах так всё устроено, что всё является файлом. Это утверждение является парадигмой данного семейства операционных систем. У каждого файла есть владелец, есть группа и есть права на использование данного файла. Данные права определяются для владельца, для группы и для всех остальных. Так всё устроено. В этой статье подробно рассмотрим вопрос прав на файла (и папки), а также команду chmod, которая позволяет менять эти права.



О правах на файл в linux

Итак, есть три категории, которым можно (и должно) прописать права на файл:

  • u [user] — владелец файла
  • g [group] — группа файла
  • o [other] — все остальные пользователи операционной системы

Данные категории составляют триаду прав на файл.

Теперь собственно о правах. Файл может быть:

  • r [read] — прочитан
  • w [write] — записан/изменён
  • x [execute] — запущен как процесс на выполнение
  • s [superuser] — выполнение от имени суперпользователя (дополнительный параметр)

Данные свойства могут быть записаны в восьмиричной системе следующим образом:

  • r = 4 (22)
  • w = 2 (21)
  • x = 1 (20)

Именно такой (восьмиричной) записью обычно и пользуются, где 0 — означает, что прав на использование нет, 7 — разрешено всё (4+2+1) читать, менять и исполнять.

Обычные права на файл в linux 755 [-rwxr-xr-x] (полные права для владельца, а для группы и остальных только чтение и выполнение). Это позволяет читать документы и выполнять скрипты от разных пользователей, но только владелец имеет право модифицировать (изменять) свои файлы.

На файлы, которые не нужно выполнять, обычно выставляются права 644 [-rw-r--r--]. Владелец может читать и менять, остальные — только читать.

Помощь по команде chmod в linux

Теперь о том, как превратить текстовый файл с правами 644 [-rw-r--r--] в скрипт, который можно запустить, то есть с правами 755 [-rwxr-xr-x]. После запуска написанная программа попадёт в оперативную память и сможет быть передана процессору для обработки, то есть из программы превратится в процесс. Для этого нужно дать разрешение на исполнение. Для изменения прав на файл (и папки) в linux служит команда chmod.

Сперва посмотрим, как выглядит помощь по этой команде в Debian 9:

root@server:~# chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
  or:  chmod [OPTION]... OCTAL-MODE FILE...
  or:  chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.

  -c, --changes          like verbose but report only when a change is made
  -f, --silent, --quiet  suppress most error messages
  -v, --verbose          output a diagnostic for every file processed
      --no-preserve-root  do not treat '/' specially (the default)
      --preserve-root    fail to operate recursively on '/'
      --reference=RFILE  use RFILE's mode instead of MODE values
  -R, --recursive        change files and directories recursively
      --help     display this help and exit
      --version  output version information and exit

Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/chmod>
or available locally via: info '(coreutils) chmod invocation'

Изменение прав на файл в буквенном виде

Для того, чтобы изменить права на файл (папку) в linux в буквенном виде, нужно вспомнить то, что написано выше про ugo (user, group, other), rwx (read, write, execute) и понимать, что + означает "добавить", а - — "отнять". Дальше всё просто, например, нужно добавить права на выполнение владельцу, то есть u+x. Ещё несколько примеров:

  • u+x - разрешить выполнение для владельца;
  • ugo+x - разрешить выполнение для всех;
  • ug+w - разрешить запись для владельца и группы;
  • o-x - запретить выполнение для остальных пользователей;
  • ugo+rwx - разрешить все для всех

В итоге, команда выглядит так:

root@server:~# chmod ugo+x filename

Эта команда разрешит исполнение файла с именем filename для всех (владельцу, группе и остальным)

Изменение прав на файл в цифровом виде

В цифровом виде всё точно также, только с чётким указанием прав для каждой категории:

root@server:~# chmod 0755 filename

Команда в примере выше выставит права 755 для файла с именем filename.

Опции команды chmod в linux

Собственно, на этом можно было бы закончить, но есть ещё опции, которые можно использовать при работе команды chmod:

  • -c - выводить информацию обо всех изменениях;
  • -f - не выводить сообщения об ошибках;
  • -v - выводить максимум информации;
  • --reference - взять маску прав из указанного файла;
  • -R - включить поддержку рекурсии;
  • --help - отобразить подсказку/помощь;
  • --version - вывести версию утилиты.

На мой взгляд, самая востребованная опция — это опция рекурсии -R. То есть когда нужно изменить права не только у папки, но и у всех вложенных неё файлах и папках.

root@server:~# chmod -R 0755 foldername

Выставит права 755 на папку foldername и всё, что находится в ней.

Видео с примером применения команды chmod для запуска BASH-скрипта

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню