Как команда chmod работает в Linux
Когда мы создаем файл или папку в системе на основе Unix, такой как Linux или MacOS, у них есть набор разрешений и режимов доступа. Чаще всего ими манипулируют с помощью команды chmod, которая позволяет нам изменять того, кто может получать доступ к различным файлам и запускать их.
Давайте посмотрим, как работает chmod. Для начала команда chmod имеет следующий синтаксис:, где [OPTIONS] — необязательные настройки, [MODE] — разрешения, которые мы хотим дать файлу или папке, а x — это файл, к которому мы хотим применить chmod.
chmod [OPTIONS] [MODE] х
, где [OPTIONS] — необязательные настройки, [MODE] — разрешения, которые мы хотим дать файлу или папке, а x — это файл, к которому мы хотим применить chmod.
Как работают разрешения файла в Linux и MacOS
Прежде чем мы начнем использовать chmod, давайте посмотрим, как разрешения работают в Linux и MacOS. Если вы зайдете в любую папку и запустите ls -l, вы увидите такую строку:
drwxr-xr-x 5 root root 160 23 фев 22:32 node_modules
Первая часть этой строки, то есть drwxr-xr-x — это настройки разрешений. Давайте разберем, что это значит:
d rwx r-x r-x
^ ^ ^ ^
| | | |
| | | └ - - разрешение "других", т.е. любого, кто не является владельцем или группой
| | └ - - права группы
| └ - - разрешения владельца
└ - - Тип файла - не связан с доступом
Выше «другие» относятся к любому, кто не является владельцем или группой пользователей. Если вам интересно, кто такие владелец и группа, то это два имени, данные после цифры 5 в нашем примере, то-есть пользователь root из группы root:
drwxr-xr-x 5 root root 160 23 фев 22:32 node_modules
|--------| |--| |--|
^ ^ ^
| | |
| | └ - - группа
| └ - - владелец
└ - - настройки разрешений
Что означают разрешения в Linux и MacOS
В наших разрешениях выше у нас есть 3 набора доступа — rwx, r-x и r-x. Каждая буква представляет тип доступа. Если одна буква отсутствует, этот набор лиц или владельцев не имеет такого доступа. Буквы обозначают:
r - доступ для чтения
w - доступ для записи или редактирования
x - доступ к исполнению (для файлов, которые являются исполняемыми
t — закрепленный бит, означающий, что только владелец или пользователь root может удалить или переименовать файл или папку. Это добавляется в конец строки разрешения, если оно существует, и встречается реже, чем другие.
s — дает повышенные привилегии для выполнения пользователям или группам.
Таким образом, в то время как rwx дает доступ на чтение, запись и выполнение, r-x дает доступ только на чтение и выполнение.
Как использовать chmod в Linux и MacOS
Теперь, когда мы рассмотрели основы, давайте посмотрим, как работает chmod. Форматирование chmod может немного сбить с толку, когда вы впервые увидите его, поэтому давайте разберем его.
Сначала мы начнем с упоминания о том, какие пользователи затронуты. Здесь у нас есть 4 варианта:
u, для владельца
g, для группы
o, для других
a, для всех, что также может быть записано как ugo.
Затем следует, как мы хотим изменить разрешения:
- Если мы хотим дать разрешения набору пользователей или пользователю, мы пишем +, поэтому +x даст разрешение на выполнение, а +rx даст разрешение на чтение и выполнение.
- Если мы хотим отозвать разрешения, мы пишем -, поэтому -rwx забирает доступ на чтение, запись и выполнение.
- Если мы хотим полностью заменить разрешения, мы используем =, поэтому =r даст доступ на чтение, но удалит выполнение и запись, если они существовали. Точно так же =rw — это то же самое, что и доступ для чтения и записи, с удаленным выполнением, если оно существовало.
Мы пишем все это без пробелов, после чего следует имя файла. Таким образом, следующее даст владельцу доступ для чтения к файлу с именем file.txt в текущем каталоге:
chmod u+r file.txt
Или, если мы хотим предоставить владельцу, группе и другим пользователям доступ на чтение и запись, мы могли бы написать следующее:
chmod ugo+rw file.txt
Точно так же следующее заменит разрешения владельца и группы доступом на чтение и запись, но удалит любое разрешение на выполнение, которое у них могло быть:
chmod ug=RW file.txt
Если мы хотим предоставить разные типы доступа разным пользователям, мы можем разделить их запятой. Приведенное ниже даст владельцу доступ rwx, группе, доступу rw- и всем остальным доступу r—:
chmod u=rwx,g=rw,o=r file.txt
И если мы ничего не пишем после знака равенства, предполагается, что все права доступа аннулированы. Итак, если вместо этого мы хотим, чтобы у группы не было доступа, мы могли бы написать следующее:
chmod u=rwx,g=,o=r file.txt
Это также работает с каталогами так же, как и с нашим файлом .txt.
Как рекурсивно изменить режим каталога с помощью chmod
Иногда мы хотим изменить права доступа не только к каталогу, но и ко всем файлам в нем. Для этого мы можем использовать параметр -R с chmod для рекурсивного изменения каждого файла и папки в каталоге.
Вот пример:
chmod -R u=rwx myDirectory
Изменение режима файла с помощью chmod с использованием чисел
Возможно, вы видели, что chmod используется с цифрами, а не с буквами. В конечном итоге числа следуют тому же соглашению, что и выше, но их гораздо проще записать. Каждому разрешению пользователя в rwx присваивается определенное значение:
- г получает значение 4
- w присваивается значение 2
- х присваивается значение 1
Это означает, что общее значение 7 означает 4 + 2 + 1 или rwx. Значение 5 будет означать 4 + 1 или r-x. Мы можем назначить владельца, группу и других пользователей по номеру. Таким образом, при таком наборе разрешений:
rwx r-x --x
^ ^ ^
| | |
| | └ - - разрешение "других", т.е. любого, кто не является владельцем или группой
| └ - - права группы
└ - - разрешения владельца
Владелец имеет значение разрешения 7, группа — 5, а любые другие пользователи имеют разрешение 1. Таким образом, мы можем записать это как 751.
Чтобы применить эти разрешения к нашему файлу file.txt, мы можем написать следующее:
chmod 751 file.txt
Добавление Sticky битов к числовым разрешениям с помощью chmod
Чтобы добавить липкий (sticky) бит к числовому разрешению, мы просто добавим 1 в начало, чтобы разрешения 755 с липким битом стали 1755.
Для многих предпочтительны числовые разрешения, поскольку они намного чище и легче для понимания, чем буквы. Что бы вы ни предпочли, оба работают одинаково, поэтому выбирайте в зависимости от ваших предпочтений.