Как использовать команду chmod в Linux
Опубликовано: 2022-10-25 Управляйте доступом к файлам, поиском в каталогах и запуском скриптов с помощью команды Linux chmod
. Эта команда изменяет права доступа к файлам Linux, которые на первый взгляд кажутся сложными, но на самом деле довольно простыми, если вы знаете, как они работают.
chmod изменяет права доступа к файлам
В Linux кто и что может делать с файлом или каталогом, контролируется с помощью наборов разрешений. Есть три набора разрешений. Один набор для владельца файла, другой набор для членов группы файла и последний набор для всех остальных.
Разрешения контролируют действия, которые можно выполнять с файлом или каталогом. Они либо разрешают, либо запрещают чтение, изменение или выполнение файла, если это сценарий или программа. Для cd
разрешения определяют, кто может входить в каталог и кто может создавать или изменять файлы в каталоге.
Вы используете команду chmod
для установки каждого из этих разрешений. Чтобы увидеть, какие разрешения были установлены для файла или каталога, мы можем использовать ls
.
Просмотр и понимание прав доступа к файлам
Мы можем использовать параметр -l
(длинный формат), чтобы ls
перечисляла права доступа к файлам для файлов и каталогов.
лс -л
В каждой строке первый символ определяет тип отображаемой записи. Если это тире ( -
), это файл. Если это буква d
, это каталог.
Следующие девять символов представляют собой настройки для трех наборов разрешений.
- Первые три символа показывают разрешения для пользователя, которому принадлежит файл ( разрешения пользователя ).
- Средние три символа показывают разрешения для членов группы файла ( групповые разрешения ).
- Последние три символа показывают разрешения для всех, кто не входит в первые две категории ( другие разрешения ).
В каждом наборе разрешений есть три символа. Символы являются индикаторами наличия или отсутствия одного из разрешений. Это либо тире ( -
), либо буква. Если символ представляет собой тире, это означает, что разрешение не предоставлено. Если символ является r
, w
или x
, это разрешение было предоставлено.
Буквы обозначают:
- r : права на чтение. Файл можно открыть и просмотреть его содержимое.
- w : права на запись. Файл можно редактировать, изменять и удалять.
- x : разрешения на выполнение. Если файл является скриптом или программой, его можно запустить (выполнить).
Например:
-
---
означает, что разрешения вообще не были предоставлены. -
rwx
означает, что были предоставлены полные разрешения. Все индикаторы чтения, записи и выполнения присутствуют.
На нашем скриншоте первая строка начинается с d
. Эта строка относится к каталогу с именем «архив». Владелец каталога — «dave», и имя группы, к которой принадлежит каталог, также называется «dave».
Следующие три символа — права пользователя для этого каталога. Они показывают, что владелец имеет полные права. Все символы r
, w
и x
присутствуют. Это означает, что пользователь dave имеет права на чтение, запись и выполнение для этого каталога.
Второй набор из трех символов — это групповые разрешения, это rx
. Они показывают, что члены группы dave имеют права на чтение и выполнение для этого каталога. Это означает, что они могут перечислить файлы и их содержимое в каталоге, и они могут cd
(выполнить) в этот каталог. У них нет прав на запись, поэтому они не могут создавать, редактировать или удалять файлы.
Последний набор из трех символов также rx
. Эти разрешения применяются к людям, на которых не распространяются первые два набора разрешений. Эти люди (называемые «другими») имеют права на чтение и выполнение в этом каталоге.
Итак, резюмируя, члены группы и другие пользователи имеют права на чтение и выполнение. Владелец, пользователь по имени dave, также имеет права на запись.
Для всех остальных файлов (кроме файла сценария mh.sh) dave и члены группы dave имеют права на чтение и запись файлов, а остальные имеют права только на чтение.
Для особого случая файла сценария mh.sh владелец dave и члены группы имеют права на чтение, запись и выполнение, а остальные — только на чтение и выполнение.
Понимание синтаксиса разрешений
Чтобы использовать chmod
для установки разрешений, нам нужно сказать ему:
- Кто: для кого мы устанавливаем разрешения.
- Что : Какие изменения мы вносим? Мы добавляем или удаляем разрешение?
- Какой : Какие разрешения мы устанавливаем?
Мы используем индикаторы для представления этих значений и формируем короткие «операторы разрешений», такие как u+x
, где «u» означает «пользователь» (кто), «+» означает добавить (что), а «x» означает разрешение на выполнение. (который).
Мы можем использовать следующие значения «кто»:
- u : Пользователь, то есть владелец файла.
- g : Группа, то есть члены группы, к которой принадлежит файл.
- o : Другие, то есть люди, на которых не распространяются права доступа
u
иg
. - a : Все, что означает все вышеперечисленное.
Если ни один из них не используется, chmod
ведет себя так, как если бы был использован « a
».
Мы можем использовать следующие значения «что»:
- – : Знак минус. Удаляет разрешение.
- + : знак плюс. Дает разрешение. Разрешение добавляется к существующим разрешениям. Если вы хотите иметь это разрешение и только этот набор разрешений, используйте параметр
=
, описанный ниже. - = : знак равенства. Установите разрешение и удалите других.
Мы можем использовать следующие значения:
- r : разрешение на чтение.
- w : разрешение на запись.
- x : разрешение на выполнение.
Установка и изменение разрешений
Допустим, у нас есть файл, к которому у всех есть полные права.
ls -l новый_ файл.txt
Мы хотим, чтобы пользователь dave имел права на чтение и запись, а группа и другие пользователи — только на чтение. Мы можем сделать это с помощью следующей команды:
chmod u=rw,og=r новый_файл.txt
Использование оператора «=» означает, что мы стираем все существующие разрешения, а затем устанавливаем указанные.
давайте проверим новое разрешение на этот файл:
ls -l новый_файл.txt
Существующие разрешения были удалены, а новые разрешения установлены, как мы и ожидали.
Как насчет добавления разрешения без удаления существующих настроек разрешений? Мы можем сделать это легко тоже.
Допустим, у нас есть файл сценария, который мы закончили редактировать. Нам нужно сделать его исполняемым для всех пользователей. Его текущие разрешения выглядят так:
ls -l новый_скрипт.sh
Мы можем добавить разрешение на выполнение для всех с помощью следующей команды:
chmod a+x new_script.sh
Если мы посмотрим на разрешения, мы увидим, что разрешение на выполнение теперь предоставляется всем, а существующие разрешения все еще действуют.
ls -l новый_скрипт.sh
Мы могли бы добиться того же результата и без «а» в выражении «а+х». Следующая команда сработала бы так же хорошо.
chmod +x new_script.sh
Установка разрешений для нескольких файлов
Мы можем применять разрешения сразу к нескольким файлам.
Это файлы в текущем каталоге:
лс -л
Допустим, мы хотим удалить разрешения на чтение для «других» пользователей из файлов с расширением «.page». Мы можем сделать это с помощью следующей команды:
chmod или *.страница
Давайте проверим, какой эффект это имело:
лс -л
Как мы видим, у файлов «.page» для «другой» категории пользователей убрано право на чтение. Никакие другие файлы не были затронуты.
Если бы мы хотели включить файлы в подкаталоги, мы могли бы использовать параметр -R
(рекурсивный).
chmod -R или *.страница
Числовая стенография
Другой способ использования chmod
— предоставить разрешения, которые вы хотите дать владельцу, группе и другим пользователям, в виде трехзначного числа. Крайняя левая цифра представляет разрешения для владельца. Средняя цифра представляет разрешения для членов группы. Крайняя правая цифра представляет разрешения для остальных.
Цифры, которые вы можете использовать, и то, что они представляют, перечислены здесь:
- 0: (000) Нет разрешения.
- 1: (001) Разрешение на выполнение.
- 2: (010) Разрешение на запись.
- 3: (011) Разрешения на запись и выполнение.
- 4: (100) Разрешение на чтение.
- 5: (101) Разрешения на чтение и выполнение.
- 6: (110) Разрешения на чтение и запись.
- 7: (111) Разрешения на чтение, запись и выполнение.
Каждое из трех разрешений представлено одним из битов двоичного эквивалента десятичного числа. Таким образом, 5, что в двоичном формате равно 101, означает чтение и выполнение. 2, что равно 010 в двоичном формате, будет означать разрешение на запись.
Используя этот метод, вы устанавливаете разрешения, которые хотите иметь; вы не добавляете эти разрешения к существующим разрешениям. Таким образом, если бы права на чтение и запись уже были установлены, вам пришлось бы использовать 7 (111) для добавления разрешений на выполнение. Использование 1 (001) удалит разрешения на чтение и запись и добавит разрешение на выполнение.
Давайте добавим право чтения обратно на файлы «.page» для других категорий пользователей. Мы также должны установить права пользователя и группы, поэтому нам нужно установить их такими, какие они уже есть. У этих пользователей уже есть права на чтение и запись, то есть 6 (110). Мы хотим, чтобы у «других» были права на чтение и права, поэтому их нужно установить на 4 (100).
Следующая команда выполнит это:
chmod 664 *.страница
Это устанавливает разрешения, которые нам нужны для пользователя, членов группы и других, в соответствии с тем, что нам нужно. Разрешения пользователей и членов группы сбрасываются до того состояния, которое у них уже было, а у остальных восстанавливается разрешение на чтение.
лс -л
Расширенные опции
Если вы прочтете справочную страницу для chmod
, вы увидите некоторые дополнительные параметры, относящиеся к битам SETUID и SETGID, а также к ограниченному удалению или «закрепленному» биту.
В 99% случаев вам понадобится chmod
, описанные здесь варианты вам помогут.
Команды Linux | ||
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · тайм-аут · стена · да · убить · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · дата · bg · fg | |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов