В Unix и Unix-подобных операционных системах chmod — это команда и системный вызов , используемые для изменения прав доступа и флагов специального режима (флаги setuid , setgid и Sticky ) объектов файловой системы ( файлов и каталогов ). Первоначально они назывались его режимами [1] , а имя chmod было выбрано как аббревиатура режима изменения e . [2]
Команда chmod впервые появилась в AT&T Unix версии 1 вместе с системным вызовом chmod .
По мере роста количества и типов пользователей в системах во многие файловые системы в дополнение к этим основным режимам добавлялись списки контроля доступа [3] для повышения гибкости.
Версия chmod , входящая в состав GNU coreutils, была написана Дэвидом Маккензи и Джимом Мейерингом. [4] Команда доступна в виде отдельного пакета для Microsoft Windows как часть коллекции UnxUtils , состоящей из собственных Win32- портов распространенных GNU Unix-подобных утилит. [5] Команда chmod также была перенесена в операционную систему IBM i . [6]
В этом разделе пользователь ссылается на владельца файла, как напоминание о том, что в символической форме команды используется « u ».
chmod [options] mode[,mode] file1 [file2 ...]
[7]
Обычно реализуемые варианты включают в себя:
-R
Рекурсивный, т.е. включение объектов в подкаталоги.-v
подробный, показать измененные объекты (неизмененные объекты не отображаются).Если указана символическая ссылка , это затрагивает целевой объект. Режимы файлов, непосредственно связанные с символическими ссылками, обычно не используются.
Для просмотра файлового режима можно использовать команды lsили :stat
$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 dgerman Staff 823 16 декабря 15:03 findPhoneNumbers.sh $ stat -c %a findPhoneNumbers.sh 754
, и определяют доступ для чтения, записи и выполнения (первый символ r
вывода ls обозначает тип объекта; дефис представляет простой файл). Сценарий findPhoneNumbers.sh может быть прочитан, записан и выполнен пользователем dgerman ; прочитаны и исполнены членами штатной группы ; и читаться только другими пользователями.w
x
Основные части разрешений chmod :
Например:rwxr-x---
Каждая группа из трех символов определяет разрешения для каждого класса :
rwx
, определяют разрешения для класса User (т.е. владельца файла).r-x
, определяют разрешения для класса Group (т. е. группы , владеющей файлом).---
определяют разрешения для класса Others . В этом примере пользователи, которые не являются владельцами файла и не являются членами группы ( и, следовательно, относятся к классу Others ), не имеют разрешения на доступ к файлу.Числовой формат chmod допускает до четырех цифр . Три крайние правые цифры определяют права доступа для пользователя файла, группы и других пользователей. Необязательная начальная цифра, если задано 4 цифры, указывает специальные флаги setuid , setgid и Sticky . Каждая цифра из трех крайних правых цифр представляет собой двоичное значение, которое управляет разрешениями «чтение», «запись» и «выполнение» соответственно. Значение 1 означает, что классу разрешено это действие, а 0 означает, что оно запрещено.
Например, 754
позволит:
Числовой код разрешает выполнение тогда и только тогда, когда он нечетный (т.е. 1
, 3
, 5
или 7
). Числовой код разрешает «чтение» тогда и только тогда, когда он больше или равен 4
(т.е. 4
, 5
, 6
или 7
). Числовой код разрешает «запись» тогда и только тогда, когда это 2
, 3
, 6
или 7
.
Измените разрешения, чтобы разрешить членам группы программистов обновлять файл:
$ ls -l SharedFile -rw-r--r-- 1 программист jsmith 57 3 июля 10:13 SharedFile $ chmod 664 SharedFile $ ls -l SharedFile -rw-rw-r-- 1 программист jsmith 57 3 июля 10:13 общий файл
Поскольку биты setuid , setgid и Sticky не указаны, это эквивалентно:
$ chmod 0664 общий файл
Команда chmod также принимает более детальную символическую запись, [8] которая позволяет изменять определенные режимы, оставляя другие режимы нетронутыми. Символьный режим состоит из трех компонентов, которые объединяются в одну текстовую строку:
$ chmod [ ссылки ][ оператор ][ режимы ] файл ...
Классы пользователей используются для определения того, к кому применяются разрешения. Если классы не указаны, подразумевается «все». Классы обозначаются одной или несколькими из следующих букв:
Программа chmod использует оператор, чтобы указать, как следует настраивать режимы файла. Принимаются следующие операторы:
Режимы указывают, какие разрешения следует предоставить или удалить из указанных классов. Существует три основных режима, соответствующих основным разрешениям:
Множественные изменения можно указать, разделив несколько символьных режимов запятыми (без пробелов). Если пользователь не указан, chmod
будет проверена маска , и эффект будет такой же, как если бы был указан « a », за исключением того, что биты, установленные в маске, не будут затронуты. [9]
$ ls -ld Shared_dir # показать режимы доступа до chmod drwxr-xr-x 2 jsmitt Northregion 96 8 апр 12:53 Shared_dir $ chmod g+w Shared_dir $ ls -ld Shared_dir # показать режимы доступа после chmod Drwxrwxr-x 2 jsmitt Northregion 96 8 апр, 12:53 Shared_dir
$ ls -l OurBestReferenceFile -rw-rw-r-- 2 tmiller Northregion 96 8 апреля 12:53 OurBestReferenceFile $ chmod a-w OurBestReferenceFile $ ls -l OurBestReferenceFile -r--r--r-- 2 tmiller Northregion 96 8 апреля 12: 53 нашЛучший справочный файл
$ ls -ld referenceLib drwxr----- 2 ebowman Northregion 96 8 апр 12:53 referenceLib $ chmod ug = rx referenceLib $ ls -ld referenceLib dr-xr-x--- 2 ebowman Northregion 96 8 апр 12:53 referenceLib
$ chmod ug+rw образец $ ls -ld образец drw-rw---- 2 rsanchez Budget 96 8 декабря 12:53 образец
$ chmod a-rwx образец $ ls -l образец ---------- 2 rswven Planning 96 8 декабря 12:53 образец
$ # Права доступа к файлу примера перед командой $ ls -ld sample drw-rw---- 2 oschultz warehousing 96 8 декабря 12:53 NY_DBs $ chmod ug = rx sample $ ls -ld sample dr-xr-x--- 2 oschultz складирование 96 8 дек 12:53 NJ_DBs
Команда chmod также способна изменять дополнительные разрешения или специальные режимы файла или каталога. В символических режимах используется ' s ' для обозначения режимов setuid и setgid , а ' t ' - для обозначения режима закрепления . Режимы применяются только к соответствующим классам, независимо от того, указаны ли другие классы.
Большинство операционных систем поддерживают числовое указание специальных режимов, особенно в восьмеричном формате, но некоторые этого не делают. В этих системах можно использовать только символические режимы.
chattr
, команда, используемая для изменения атрибутов файла или каталога в системах Linux.chown
, команда, используемая для изменения владельца файла или каталога в Unix-подобных системах.chgrp
, команда, используемая для изменения группы файла или каталога в Unix-подобных системах.cacls
— команда, используемая в Windows NT и ее производных для изменения списков управления доступом, связанных с файлом или каталогом.attrib
umask
, ограничивает режим (разрешения) при создании файла или каталога в Unix-подобных системах.