Команда chmod | |
Исходный автор (ы) | ATT Bell Laboratories |
---|---|
Разработчик (и) | Различные разработчики с открытым исходным кодом и коммерческие разработчики |
Первоначальный выпуск | 3 ноября 1971 г.; 48 лет назад (1971-11-03) |
Операционная система | Unix, Unix-like, Plan 9, Inferno, IBM i |
Платформа | Кросс-платформенность |
Тип | Команда |
Лицензия | coreutils : GPLv3 |
В Unix и Unix-like операционные системы, chmod - это команда и системный вызов, который используется для изменения права доступа к объектам файловой системы (файлы и каталоги ). Он также используется для изменения флагов специального режима. Запрос фильтруется по umask. Название является сокращением режима изменения.
A Команда chmod впервые появилась в ATT Unix версии 1.
По мере роста количества и типов пользователей в системах списки управления доступом были добавлены во многие файловые системы в дополнение к этим самым основным режимам для повышения гибкости.
Версия chmod, входящая в состав GNU coreutils, была написана Дэвидом Маккензи и Джимом Мейерингом.
Команда chmod также был перенесен в операционную систему IBM i.
В этом разделе u ser относится к владельцу файла, как напоминание, что в символической форме команды используется «u ».
chmod [options] mode [, mode] file1 [file2...]
Обычно реализуемые параметры включают:
-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
, w
и x
определяют доступ для чтения, записи и выполнения. Первый символ отображения ls обозначает тип объекта; дефис представляет собой простой файл. Этот сценарий может быть прочитан, записан и выполнен пользователем dgerman; прочитаны и выполнены членами группы ; и читаются только другими пользователями.
Основные части разрешений chmod:
Например: drwxrwx ---
Символы справа от "d" определяют разрешения для каждого класса :
rwx
, определяют разрешения для класса User (т. е. владельца файла).rwx
, определяют разрешения для класса Group (то есть группы , владеющей файлом)---
, определите разрешения для класса Others. В этом примере пользователи, которые не являются владельцами файла и не являются членами Группы (и, следовательно, принадлежат к классу Others), не имеют разрешения на доступ к файлу.Числовой формат chmod принимает до четырех восьмеричных цифр. Три крайние правые цифры определяют разрешения для пользователя файла, группы и других. Необязательная ведущая цифра, если даны 4 цифры, указывает специальные флаги setuid, setgid и sticky. Каждая цифра из трех крайних правых цифр представляет двоичное значение, которое управляет разрешениями на «чтение», «запись» и «выполнение» соответственно. Значение 1 означает, что классу разрешено это действие, а значение 0 означает, что это действие запрещено.
# | Разрешение | rwx | Двоичное |
---|---|---|---|
7 | чтение, запись и выполнение | rwx | 111 |
6 | чтение и запись | rw- | 110 |
5 | чтение и выполнение | rx | 101 |
4 | только чтение | r- | 100 |
3 | запись и выполнение | -wx | 011 |
2 | только запись | -w- | 010 |
1 | только выполнение | --x | 001 |
0 | нет | --- | 000 |
Например, 754
позволит :
Измените разрешения, чтобы разрешить членам группы программистов обновлять файл:
$ 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 shar edFile
Поскольку setuid, setgid и липкие биты не указаны, это эквивалентно:
$ chmod 0664 sharedFile
команда chmod также принимает более тонкую символическую нотацию, которая позволяет изменять определенные режимы, оставляя другие режимы нетронутыми. Символьный режим состоит из трех компонентов, которые объединены в единую текстовую строку:
$ chmod [ссылки] [оператор] [режимы] файл...
Классы пользователей используются, чтобы различать, кому разрешения применяются. Если классы не указаны, подразумевается «все». Классы представлены одной или несколькими из следующих букв:
Ссылка | Класс | Описание |
---|---|---|
u | пользователь | владелец файла |
g | группа | члены группы файла |
o | другие | пользователи, которые не являются ни владельцем файла, ни членами группы файла |
a | все | все три из вышеперечисленных, то же, что и ugo |
Программа chmod использует оператор, чтобы указать, как следует настраивать режимы файла. Допускаются следующие операторы:
Оператор | Описание |
---|---|
+ | добавляет указанные режимы к указанным классам |
- | удаляет указанные режимы из указанных классов |
= | указанные режимы должны быть сделаны точные режимы для указанных классов |
Режимы указывают, какие разрешения должны быть предоставлены или удалены из указанных классов. Существует три основных режима, которые соответствуют основным разрешениям:
Режим | Имя | Описание |
---|---|---|
r | чтение | rчтение файла или список содержимого каталога |
w | запись | wобращение к файлу или каталогу |
x | выполнение | exвыполнение файла или рекурсивное выполнение дерева каталогов |
X | специальное выполнение | , которое само по себе не является разрешением, а может использоваться вместо х. Он применяет разрешения на выполнение к каталогам независимо от их текущих разрешений и применяет разрешения на выполнение к файлу, в котором уже установлен хотя бы один бит разрешения на выполнение (пользователь, группа или другие). Это действительно полезно только при использовании с + и обычно в сочетании с флагом -R для предоставления Группе или Другим доступа к большому дереву каталогов без установки разрешения на выполнение для обычных файлов (например, как текстовые файлы), что обычно происходит, если вы просто использовали chmod -R a + rx. , тогда как с X вы можете вместо этого использовать chmod -R a + rX. |
s | setuid/gid | подробности в разделе специальных режимов |
t | липкий | подробности в разделе специальных режимов |
Можно указать несколько изменений, разделив несколько символов режимы с запятыми (без пробелов). Если пользователь не указан, chmod
проверит umask, и эффект будет таким, как если бы был указан «a », за исключением битов, установленных в umask. не затрагиваются.
$ ls -ld shared_dir # показать режимы доступа перед chmod drwxr-xr-x 2 teamleader usguys 96 8 апр, 12:53 shared_dir $ chmod g + w shared_dir $ ls -ld shared_dir # показать режимы доступа после chmod drwxrwxr-x 2 teamleader usguys 96, 8 апреля, 12:53 shared_dir
$ ls -l ourBestReferenceFile -rw-rw -r-- 2 руководитель команды usguys 96 8 апреля 12:53 ourBestReferenceFile $ chmod aw ourBestReferenceFile $ ls -l ourBestReferenceFile -r - r - r-- 2 руководитель команды usguys 96 8 апреля 12:53 ourBestReferenceFile
$ ls -ld referenceLib drwxr ----- 2 teamleader usguys 96 Apr 8 12:53 referenceLib $ chmod ug = rx referenceLib $ ls -ld referenceLib dr-xr-x --- 2 teamleader usguys 96 апр 8 12:53 referenceLib
Команда chmod также поддерживает об изменении дополнительных разрешений или специальных режимов файла или каталога. В символьных режимах используются символы «s» для представления режимов setuid и setgid и «t» для представления режима sticky. Режимы применяются только к соответствующим классам, независимо от того, указаны ли другие классы.
Большинство операционных систем поддерживают спецификацию специальных режимов с использованием восьмеричных режимов, но некоторые этого не делают. В этих системах можно использовать только символьные режимы.
Command | Пояснение |
---|---|
chmod a + r publicComments.txt | добавляет разрешение на чтение для всех классов (например, u ser, Group и другие) |
chmod ax publicComments.txt | удаляет разрешение на выполнение для всех классов |
chmod a + rx viewer.sh | добавляет разрешения на чтение и выполнение для всех классов |
chmod u = rw, g = r, o = internalPlan.txt | устанавливает права на чтение и запись для u ser, устанавливает чтение для группы и запрещает доступ для других |
chmod -R u + w, go-w docs | добавляет разрешение на запись в каталог docs и все его содержимое (т.е. R вне очереди) для владельца и удаляет разрешение на запись для группы и других |
chmod ug = rw groupAgreements.txt | устанавливает разрешения на чтение и запись для u ser, а группа |
chmod 664 global.txt | устанавливает разрешения на чтение и запись для u ser и Group, а также предоставляет чтение для других. |
chmod 744 myCV.txt | устанавливает разрешения на чтение, запись и выполнение для u ser, а также устанавливает разрешение на чтение для группы и других |
chmod 1755 findReslts.sh | устанавливает закрепление bit, устанавливает разрешения на чтение, запись и выполнение для владельца, а также устанавливает разрешения на чтение и выполнение для группы и других (это предполагает, что сценарий будет сохранен в памяти) |
chmod 4755 setCtrls.sh | устанавливает UID, устанавливает разрешения на чтение, запись и выполнение для u ser, а также устанавливает разрешения на чтение и выполнение для группы и других |
chmod 2755 setCtrls.sh | устанавливает GID, устанавливает разрешения на чтение, запись и выполнение для u ser, а также устанавливает разрешения на чтение и выполнение для Group и Others |
chmod -R u + rwX, g-rwx, o-rx personalStuff | Rэксурсивно (т.е. для всех файлов и каталогов в PersonalStuff) добавляет разрешения на чтение, запись и специальные разрешения на выполнение для u ser, удаляет разрешения на чтение, запись и выполнение для группы и удаляет разрешения на чтение и выполнение для других |
chmod -R a-x + X publicDocs | Rэксурсивно (т.е. во всех файлах и каталогах в publicDocs) удаляет разрешение на выполнение для всех классов и добавляет особое разрешение на выполнение для всех классов |
Стандарт POSIX определяет следующий прототип функции :
int chmod (const char * путь, режим mode_t);
Параметр режима представляет собой битовое поле, состоящее из различных флагов:
Flag | Восьмеричное значение | Назначение |
---|---|---|
S_ISUID | 04000 | Установить ID пользователя при выполнении |
S_ISGID | 02000 | Установить ID группы при выполнении |
S_ISVTX | 01000 | Sticky bit |
S_IRUSR, S_IREAD | 00400 | Чтение с помощью u ser |
S_IWUSR, S_IWRITE | 00200 | Запись с помощью u ser |
S_IXUSR, S_IEXEC | 00100 | Выполнить / поиск по u ser |
S_IRGRP | 00040 | Чтение по группе |
S_IWGRP | 00020 | Запись по группе |
S_IXGRP | 00010 | Выполнение / поиск по группе |
S_IROTH | 00004 | Прочитано другими |
S_IWOTH | 00002 | Записано другими |
S_IXOTH | 00001 | Выполнение / поиск другими |
chattr
, команда, используемая для изменения атрибутов файл или каталог в системах Linuxchown
, команда, используемая для изменения ow нер файла или каталога в Unix-подобных системахchgrp
, команда, используемая для изменения группы файла или каталога в Unix-подобных системахcacls
, команда, используемая в Windows NT и ее производных для изменения списков управления доступом, связанных с файлом или каталогомattrib
umask
, ограничивает режим (разрешения) для файла или создание каталогов в Unix-подобных системахWikibook Руководство по Unix есть страница по теме: Команды |
chmod(1)
: изменить режимы файлов - FreeBSD Общие команды Руководство chmod (1)
– Plan 9 Руководство программиста, том 1chmod (1)
– Inferno Общие команды Manual chmod
- страница руководства из GNU coreutils.