В *nix-системах так всё устроено, что всё является файлом. Это утверждение является парадигмой данного семейства операционных систем. У каждого файла есть владелец, есть группа и есть права на использование данного файла. Данные права определяются для владельца, для группы и для всех остальных. Так всё устроено. В этой статье подробно рассмотрим вопрос прав на файла (и папки), а также команду chmod
, которая позволяет менять эти права.
- О правах на файл в linux
- Помощь по команде
chmod
в linux - Изменение прав на файл в буквенном виде
- Изменение прав на файл в цифровом виде
- Опции команды
chmod
в linux - Видео с примером применения команды
chmod
для запуска BASH-скрипта
О правах на файл в 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-скрипта
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)