chmod - chmod
Originalautor(en) | AT&T Bell Laboratories |
---|---|
Entwickler | Verschiedene Open-Source- und kommerzielle Entwickler |
Erstveröffentlichung | 3. November 1971 |
Betriebssystem | Unix , Unix-like , Plan 9 , Inferno , IBM i |
Plattform | Plattformübergreifend |
Typ | Befehl |
Lizenz | coreutils : GPLv3 |
In Unix und Unix-ähnlichen Betriebssystemen ist chmod der Befehl und Systemaufruf, der verwendet wird, um die Zugriffsberechtigungen von Dateisystemobjekten ( Dateien und Verzeichnisse ) zu ändern, die manchmal als Modi bezeichnet werden . Es wird auch verwendet, um spezielle Modus- Flags wie setuid- und setgid- Flags und ein 'Sticky'-Bit zu ändern . Die Anfrage wird durch die umask gefiltert . Der Name ist eine Abkürzung für Änderungsmodus . Sie werden angezeigt, wenn Dateien im Langformat aufgelistet werden.
Geschichte
Ein chmod- Befehl erschien erstmals in AT&T Unix Version 1.
Als die Anzahl und die Benutzertypen der Systeme zunahmen, wurden vielen Dateisystemen zusätzlich zu diesen grundlegendsten Modi Zugriffskontrolllisten hinzugefügt, um die Flexibilität zu erhöhen.
Die in den GNU- Coreutils enthaltene Version von chmod wurde von David MacKenzie und Jim Meyering geschrieben.
Der Befehl chmod wurde auch auf das Betriebssystem IBM i portiert .
Befehlssyntax
In diesem Abschnitt bezieht sich u ser auf den Eigentümer der Datei, um daran zu erinnern, dass die symbolische Form des Befehls " u " verwendet.
chmod [options] mode[,mode] file1 [file2 ...]
In der Regel implementierte Optionen umfassen:
-
-R
Rekursiv, dh Objekte in Unterverzeichnisse aufnehmen. -
-v
ausführlich, zeigt geänderte Objekte an (unveränderte Objekte werden nicht angezeigt).
Wird ein symbolischer Link angegeben, ist das Zielobjekt betroffen. Dateimodi, die direkt mit symbolischen Links selbst verbunden sind, werden normalerweise nicht verwendet.
Um den Dateimodus anzuzeigen, können die ls
oder stat
Befehle verwendet werden:
$ ls -l findPhoneNumbers.sh
-rwxr-xr-- 1 dgerman staff 823 Dec 16 15:03 findPhoneNumbers.sh
$ stat -c %a findPhoneNumbers.sh
754
Die r
, w
, und x
spezifizieren den Lese-, Schreib- und Ausführungszugriff (das erste Zeichen der ls- Anzeige bezeichnet den Objekttyp; ein Bindestrich steht für eine einfache Datei). Das Skript findPhoneNumbers.sh kann vom Benutzer dgerman gelesen, geschrieben und ausgeführt werden ; gelesen und ausgeführt von Mitgliedern der Mitarbeitergruppe ; und nur von anderen Benutzern gelesen werden.
Die wichtigsten Teile der chmod- Berechtigungen:
Zum Beispiel: rwxr-x---
Jede Gruppe von drei Zeichen definiert Berechtigungen für jede Klasse :
- die drei Zeichen ganz links,
rwx
, definieren Berechtigungen für die Benutzerklasse (dh den Dateibesitzer). - die mittleren drei Zeichen,
r-x
, definieren Berechtigungen für die Group- Klasse (dh die Gruppe, die die Datei besitzt) - die drei Zeichen ganz rechts,
---
, definieren Berechtigungen für die Klasse Others . In diesem Beispiel haben Benutzer, die nicht der Eigentümer der Datei sind und die nicht Mitglieder der Gruppe sind (und daher in der Klasse Andere sind ), keine Berechtigung zum Zugriff auf die Datei.
Numerische Berechtigungen
Das numerische Format chmod akzeptiert bis zu vier Ziffern. Die drei Ziffern ganz rechts definieren Berechtigungen für den Dateibenutzer, die Gruppe und andere. Die optionale führende Ziffer, wenn 4 Ziffern angegeben sind, gibt die speziellen Flags setuid , setgid und sticky an . Jede Ziffer der drei Ziffern ganz rechts stellt einen Binärwert dar, der die Berechtigungen "Lesen", "Schreiben" bzw. "Ausführen" steuert. Ein Wert von 1 bedeutet, dass eine Klasse diese Aktion erlaubt, während eine 0 bedeutet, dass sie nicht erlaubt ist.
# | Summe | rwx | Erlaubnis |
---|---|---|---|
7
|
4(r) + 2(w) + 1(x) |
rwx
|
lesen, schreiben und ausführen |
6
|
4(r) + 2(w) |
rw-
|
lesen und Schreiben |
5
|
4(r) + 1(x) |
r-x
|
lesen und ausführen |
4
|
4(r) |
r--
|
schreibgeschützt |
3
|
2(w) + 1(x) |
-wx
|
schreiben und ausführen |
2
|
2(w) |
-w-
|
nur schreiben |
1
|
1(x) |
--x
|
nur ausführen |
0
|
0 |
---
|
keiner |
754
Würde zum Beispiel erlauben:
- "read" (4), "write" (2) und "execute" (1) für die Benutzerklasse , dh 7 (4+2+1).
- "read" (4) und "execute" (1) für die Gruppenklasse , dh 5 (4+1).
- Nur "lesen" (4) für die Klasse Andere .
Ein numerischer Code erlaubt die Ausführung genau dann, wenn er ungerade ist (dh 1
, 3
, 5
, oder 7
). Während ein Zahlencode das "Lesen" genau dann zulässt, wenn er größer oder gleich ist 4
, bedeutet dies 4
, 5
, 6
, oder 7
).
Um zu bestimmen, ob "Schreiben" erlaubt ist, subtrahiere 1 vom numerischen Wert, wenn er ungerade ist (und nichts subtrahiere, wenn er gerade ist); dann ist "schreiben" genau dann erlaubt, wenn diese resultierende Zahl 2
oder ist 6
. Zum Beispiel:
- Wenn der Wert
6
(bzw.2
) war, dann (ziehen Sie nichts ab und) schließen Sie, dass das Schreiben erlaubt ist. - Wenn der Zahlenwert
7
(bzw.3
) ist, dann subtrahiere 1 um6
(bzw.2
) zu erhalten und zu dem Schluss zu kommen, dass das Schreiben erlaubt ist. - Wenn der Wert
4
(bzw.0
) war, dann (subtrahieren Sie nichts und) schließen Sie, dass das Schreiben nicht erlaubt ist. - Wenn der Wert
5
(bzw.1
) war, subtrahieren Sie 1 um4
(bzw.0
) zu erhalten und schließen Sie daraus, dass wieder Schreiben nicht erlaubt ist.
Numerisches Beispiel
Ändern Sie die Berechtigungen, um Mitgliedern der Programmierergruppe zu erlauben , eine Datei zu aktualisieren:
$ ls -l sharedFile
-rw-r--r-- 1 jsmith programmers 57 Jul 3 10:13 sharedFile
$ chmod 664 sharedFile
$ ls -l sharedFile
-rw-rw-r-- 1 jsmith programmers 57 Jul 3 10:13 sharedFile
Da die Bits setuid , setgid und sticky nicht angegeben sind, entspricht dies:
$ chmod 0664 sharedFile
Symbolische Modi
Der Befehl chmod akzeptiert auch eine feinkörnigere symbolische Notation, die es ermöglicht, bestimmte Modi zu ändern, während andere Modi unberührt bleiben. Der symbolische Modus besteht aus drei Komponenten, die zu einem einzigen Textstring kombiniert werden:
$ chmod [references][operator][modes] file ...
Benutzerklassen werden verwendet, um zu unterscheiden, für wen die Berechtigungen gelten. Wenn keine Klassen angegeben werden, wird "all" impliziert. Die Klassen werden durch einen oder mehrere der folgenden Buchstaben dargestellt:
Referenz | Klasse | Beschreibung |
---|---|---|
du | Benutzer | Dateibesitzer |
g | Gruppe | Mitglieder der Dateigruppe |
Ö | Andere | Benutzer, die weder der Eigentümer der Datei noch Mitglieder der Gruppe der Datei sind |
ein | alle | alle drei oben, genauso wie ugo
|
Das Programm chmod verwendet einen Operator, um anzugeben, wie die Modi einer Datei angepasst werden sollen. Folgende Operatoren werden akzeptiert:
Operator | Beschreibung |
---|---|
+ | fügt die angegebenen Modi zu den angegebenen Klassen hinzu |
- | entfernt die angegebenen Modi aus den angegebenen Klassen |
= | die angegebenen Modi sind zu den genauen Modi für die angegebenen Klassen zu machen |
Die Modi geben an, welche Berechtigungen für die angegebenen Klassen erteilt oder entfernt werden sollen. Es gibt drei Grundmodi, die den Grundberechtigungen entsprechen:
Modus | Name | Beschreibung |
---|---|---|
R | lesen | r eine Datei ead oder den Inhalt eines Verzeichnisses auflisten |
w | schreiben | w rite in eine Datei oder ein Verzeichnis |
x | ausführen | e x Ausführen einer Datei oder Rekursion eines Verzeichnisbaums |
x | Sonderausführung | Dies ist keine Berechtigung an sich, sondern kann anstelle von x verwendet werden . Es wendet Ausführungsberechtigungen auf Verzeichnisse unabhängig von ihren aktuellen Berechtigungen an und wendet Ausführungsberechtigungen auf eine Datei an, für die bereits mindestens ein Ausführungsberechtigungsbit gesetzt ist (entweder Benutzer , Gruppe oder Andere ). Es ist nur wirklich nützlich, wenn es mit + und normalerweise in Kombination mit dem -R Flag verwendet wird, um Gruppen oder Anderen Zugriff auf einen großen Verzeichnisbaum zu gewähren, ohne die Ausführungsberechtigung für normale Dateien (wie Textdateien) zu setzen, was normalerweise passieren würde, wenn Sie nur verwenden chmod -R a+rx . , während mit X kannst du chmod -R a+rX . stattdessen
tun |
S | setuid/gid | Details im Abschnitt Spezialmodi |
T | klebrig | Details im Abschnitt Spezialmodi |
Mehrere Änderungen können angegeben werden, indem mehrere symbolische Modi durch Kommas (ohne Leerzeichen) getrennt werden. Wenn kein Benutzer angegeben ist, chmod
wird die umask überprüft und der Effekt ist, als ob " a " angegeben wurde, außer dass Bits, die in der umask gesetzt sind, nicht betroffen sind.
Symbolische Beispiele
- Schreibberechtigung ( w ) zu den Zugriffsmodi der Gruppe ( g ) eines Verzeichnisses hinzufügen, sodass Benutzer in derselben Gruppe Dateien hinzufügen können:
$ ls -ld shared_dir # show access modes before chmod
drwxr-xr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir
$ chmod g+w shared_dir
$ ls -ld shared_dir # show access modes after chmod
drwxrwxr-x 2 nfinny eastregion 96 Apr 8 12:53 shared_dir
- Entfernen Sie Schreibberechtigungen ( w ) für alle Klassen ( a ), um zu verhindern, dass jemand in die Datei schreibt:
$ ls -l ourBestReferenceFile
-rw-rw-r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile
$ chmod a-w ourBestReferenceFile
$ ls -l ourBestReferenceFile
-r--r--r-- 2 ebowman northregion 96 Apr 8 12:53 ourBestReferenceFile
- Legen Sie die Berechtigungen für den u ser und die Gruppe ( ug ) zu lesen und auszuführen ( rx ) nur (keine Schreibberechtigung) auf referenceLib , jemanden zu verhindern Dateien hinzuzufügen.
$ ls -ld referenceLib
drwxr----- 2 ebowman northregion 96 Apr 8 12:53 referenceLib
$ chmod ug=rx referenceLib
$ ls -ld referenceLib
dr-xr-x--- 2 dhinkle northregion 96 Apr 8 12:53 referenceLib
- Fügen Sie den Benutzer- und Gruppenklassen einer Datei oder eines Verzeichnisses namens sample die Lese- und Schreibberechtigungen hinzu :
$ chmod ug+rw sample
$ ls -ld sample
drw-rw---- 2 rsanchez budget 96 Dec 8 12:53 sample
- Ändern Sie die Berechtigungen für den Benutzer und die Gruppe auf nur Lesen und Ausführen (keine Schreibberechtigung) für Beispiel .
$ # Sample file permissions before command
$ ls -ld sample
drw-rw---- 2 oschultz warehousing 96 Dec 8 12:53 NY_DBs
$ chmod ug=rx sample
$ ls -ld sample
dr-xr-x--- 2 aolensky warehousing 96 Dec 8 12:53 NJ_DBs
Spezialmodi
Der Befehl chmod ist auch in der Lage, zusätzliche Berechtigungen oder spezielle Modi einer Datei oder eines Verzeichnisses zu ändern. Die symbolischen Modi verwenden ' s ', um die Modi setuid und setgid darzustellen , und ' t ', um den Sticky- Modus darzustellen . Die Modi werden nur auf die entsprechenden Klassen angewendet, unabhängig davon, ob andere Klassen angegeben sind oder nicht.
Die meisten Betriebssysteme unterstützen die Spezifikation spezieller Modi mit Oktalmodi, einige jedoch nicht. Auf diesen Systemen können nur die symbolischen Modi verwendet werden.
Beispiele für die Befehlszeile
Befehl | Erläuterung |
---|---|
chmod a+r publicComments.txt |
fügt Leseberechtigung für alle Klassen (dh u ser , Gruppe und andere ) |
chmod a-x publicComments.txt |
entfernt die Ausführungsberechtigung für alle Klassen |
chmod a+rx viewer.sh |
fügt Lese- und Ausführungsberechtigungen für alle Klassen hinzu |
chmod u=rw,g=r,o= internalPlan.txt |
Sätze Lese- und Schreibberechtigung für u ser , lesen Sätze für Gruppen , und verweigert den Zugang für andere |
chmod -R u+w,go-w docs |
fügt in das Verzeichnis Schreibrechte docs und alle Inhalte (dh R ecursively) für Eigentümer und entfernt Schreibrechte für Gruppen und andere |
chmod ug=rw groupAgreements.txt |
Sätze Lese- und Schreibberechtigungen für u ser und Gruppen |
chmod 664 global.txt |
Sätze Lese- und Schreibberechtigungen für u ser und Gruppen , und zu lesen bietet Andere . |
chmod 744 Show_myCV.sh |
Sätze lesen, schreiben und Ausführungsrechte für u ser und setzt die Erlaubnis lesen Gruppe und Sonstiges |
chmod 1755 findReslts.sh |
setzt Sticky-Bit, setzt Lese-, Schreib- und Ausführungsberechtigungen für den Besitzer und setzt Lese- und Ausführungsberechtigungen für Gruppen und andere (dies legt nahe, dass das Skript im Speicher verbleibt) |
chmod 4755 setCtrls.sh |
Sets UID , lesen Sie Sätze, Schreib- und Ausführungsberechtigungen für u ser und Sätze lesen und Ausführungsberechtigungen für Gruppen und andere |
chmod 2755 setCtrls.sh |
setzt GID , Sätze zu lesen, schreiben und Ausführungsberechtigungen für u ser und Sätze lesen und Ausführungsberechtigungen für Gruppen und andere |
chmod -R u+rwX,g-rwx,o-rx personalStuff |
R ecursively (dh auf alle Dateien und Verzeichnisse in personalStuff ) Addiert Lesen, Schreiben und spezielle Ausführungsberechtigungen für u ser , lesen entfernt, Schreib- und Ausführungsberechtigungen für Gruppen und entfernt Lese- und Ausführungsberechtigungen für andere |
chmod -R a-x+X publicDocs |
R ecursively (dh auf alle Dateien und Verzeichnisse in publicDocs ) entfernt die Ausführungsberechtigung für alle Klassen und fügt spezielle Ausführungserlaubnis für alle Klassen |
Siehe auch
- Dateisystemberechtigungen
-
chattr
, der Befehl zum Ändern der Attribute einer Datei oder eines Verzeichnisses auf Linux-Systemen -
chown
, der Befehl zum Ändern des Besitzers einer Datei oder eines Verzeichnisses auf Unix-ähnlichen Systemen -
chgrp
, der Befehl zum Ändern der Gruppe einer Datei oder eines Verzeichnisses auf Unix-ähnlichen Systemen -
cacls
, ein Befehl, der unter Windows NT und seinen Derivaten verwendet wird, um die einer Datei oder einem Verzeichnis zugeordneten Zugriffskontrolllisten zu ändern attrib
-
umask
, beschränkt den Modus (Berechtigungen) bei der Datei- oder Verzeichniserstellung auf Unix-ähnlichen Systemen - Benutzerkennung
- Gruppenkennung
- Liste der Unix-Befehle
Verweise
Externe Links
- FreeBSD General Commands Manual : Dateimodi ändern –
- Plan 9 Programmierhandbuch, Band 1 –
- Inferno Allgemeine Befehle Handbuch –
-
chmod
— Handbuchseite von GNU coreutils . - GNU-Handbuch "Berechtigungen festlegen"
- CHMOD-Win 3.0 — Freeware Windows' ACL ↔ CHMOD Konverter.
- Anfänger-Tutorial mit Online-"Live"-Beispiel