Ich verstehe, dass in GNU / Linux Dateiberechtigungen auch als Dateimodus bezeichnet werden und dass der Begriff "umask" mindestens die folgenden Bedeutungen haben kann:
- Der in die
umask
Shell eingebaute Befehl (die übliche Bedeutung). - Der entsprechende Systemaufruf des eingebauten Befehls .
- Ein Shell - Prozess-Wert auch bezeichnet als Dateierstellungsmaske sowie bitmask oder maskiert .
- Eine benutzerspezifische Dateierstellungsmaske, die Prozesse ausführt, die für diesen Benutzer spezifisch sind (dann wird sie als Benutzermaske bezeichnet - Dateierstellungsmaske eines Benutzers).
Indem umask
wir den Befehl mit einem richtigen Argument ausführen, setzen wir die Maske für unseren aktuellen Shell-Prozessbaum . entweder für alle Benutzer im aktuellen Shell-Prozessbaum oder nur für unseren eigenen Benutzer. Im Allgemeinen werden solche Änderungen jedoch an neue Prozesse ( möglicherweise von einer anderen Shell ) vererbt .
Die mathematische Logik beinhaltet die Operation der Konjunktion AKA "anding" ( ∧
), die auftritt, wenn " Das und einer Menge von Operanden ist wahr, wenn und nur wenn alle ihre Operanden wahr sind ". Basierend auf dieser Logik gibt es eine bitweise Operation mit identischem Namen . Anding ist anders als das Hinzufügen von Zahlen ( x + y → z
) oder das Verketten von Zeichenfolgen ( x alongside y → xy
).
Ich verstehe, dass man einen Modus auf diese Weise "maskieren" kann:
OCTAL BINARY HUMAN-READABLE
0666 0110110110 -rw-rw-rw-
∧ 0555 0101101101 -r-xr-xr-x
0444 0100100100 -r--r--r--
Meine Frage
Was bedeutet "Maskieren eines Modus" und wie kommt es 0666 ∧ 0555 → 0444
?
Antworten:
umask
, der Shell-Befehl undumask
die Funktion legen beide die Datei-Erstellungsmaske fest, die auch alsumask
.Sie haben dies umformuliert als
was in vielerlei Hinsicht falsch ist:
umask
Funktion ist keine Shell-Funktion. siehe den Link oben;Eine Maske beeinflusst im Allgemeinen nichts. Die Dateierstellungsmaske wirkt sich auf den aktuellen Prozess aus und wird von allen neu erstellten untergeordneten Prozessen übernommen. Untergeordnete Prozesse können sie selbst wieder ändern.
Diese Dateierstellungsmaske wirkt sich auf die Berechtigungen neu erstellter Dateien aus. Dateiberechtigungen, auch Dateimodus genannt, bestehen aus zwölf Bits, die die Zugriffsrechte des Besitzers, der Gruppe und anderer Benutzer der Datei codieren. Einzelheiten finden Sie in dieser kanonischen Antwort . Sie werden normalerweise als vier- oder dreistelliger Oktalwert dargestellt. Sie sind kein Strom von Bits.
Die Berechtigungen für neu erstellte Dateien werden entweder vom Programm festgelegt, das eine bestimmte Datei erstellt, oder standardmäßig festgelegt ( dh von der Funktion, die zum Erstellen von Dateien verwendet wird). Beispiele für erstere sind Programme, die Dateien (oder Verzeichnisse) mit
open
odercreat
oder erstellen undmkdir
den gewünschten Modus explizit angeben müssen. Beispiele für Letzteres sind Programme, diefopen
Dateien im Standardmodus 0666 verwenden. Der aktuelleumask
Wert maskiert diesen Modus.Sie haben dies umformuliert als
was in vielerlei Hinsicht falsch ist:
mkdir
(Dies ist hier eine Funktion, kein Hilfsprogramm, aber das Gleiche gilt für das gleichnamige Hilfsprogramm.) Die Dateierstellungsmaske wird mit Sicherheit nicht ignoriert.Wenn
umask
berücksichtigt, ist der resultierende Modus das Ergebnis der Anwendung von umask als Bitmaske auf den angeforderten Modus: Jedes im angeforderten Modus gesetzte Bit wird gegen das entsprechende Bit in geprüftumask
und nur dann beibehalten, wenn letzteres nicht gesetzt ist. In Bezug auf Binäroperationen wird der angeforderte Modus bitweise mit dem Komplement von verknüpftumask
. Somitumask
ergibt a von 0022 mit einem Modus von 0666 0644; nicht durch Subtraktion, sondern weil 0666 & 0755 (0022's Komplement) 0644 ist. Ebensoumask
ergibt a von 0011 mit einem Modus von 0666 0666.Schauen wir uns die Berechnung genauer an. Es wird oft als Subtraktion dargestellt, auch in der Antwort, auf die Sie verwiesen haben, aber es ist wichtig zu verstehen, dass dies nicht der Fall ist.
umask
wird als Maske angewendet. Ein Wert von 0022 wird folgendermaßen angewendet:Dies wird normalerweise durch bitweises Andern des Modus mit dem Komplement der Maske berechnet:
chmod
Wendet den in der Befehlszeile angegebenen Modus an, ohne diesumask
zu berücksichtigen. Auch andere Tools tun dies, selbst wenn sie Dateien erstellen. socp
undtar
, wenn die entsprechenden Aufforderung Berechtigungen zu erhalten, werden Berechtigungen kopieren oder Berechtigungen wiederherstellen , ohne dabeiumask
zu berücksichtigen.Diese Antwort wird detaillierter.
Ihre letzten Fragen sind
Die Antwort auf die erste lautet anscheinend nicht. Die Antwort auf die zweite Frage lautet: So funktioniert es bitweise. Schreiben Sie die Operanden in Binär um:
Führen Sie nun eine bitweise und an jeder Bitposition durch. Dies bedeutet, dass jedes vertikal ausgerichtete Bitpaar und diese Bits verwendet werden (im obigen Beispiel dreimal 0 ∧ 0, dann 1 ∧ 1, 1 ∧ 0, 0 ∧ 1, 1 etc. 1 usw.):
(0 ∧ 0 ist 0, 0 ∧ 1 ist 0, 1 ∧ 0 ist 0, 1 ∧ 1 ist 1). Wandeln Sie das oben genannte zurück in ein Oktal um, und Sie erhalten 0444.
quelle
Was ist der Modus
Der Begriff „Modus einer Datei“ bezieht sich auf die auf Linux-Systemen verfügbaren Standarddateiberechtigungen (ohne Berücksichtigung von Zugriffssteuerungslisten , die eine andere Rasse darstellen).
Der Modus einer Datei besteht aus 12 Bits, die jeweils eine Berechtigung darstellen, die erteilt werden kann oder nicht (ein Bit reicht also aus, um dies anzuzeigen).
ZB ist die Berechtigung "Datei darf von Gruppenmitgliedern gelesen werden" das 6. Bit von rechts.
Zur Vereinfachung der Verwendung sind diese 12 Bits in 4 Gruppen mit jeweils 3 Bits unterteilt. Eine 3-Bit-Binärzahl kann 8 verschiedene Werte annehmen. Dies entspricht genau der Anzahl von Werten, die eine Oktalzahl (0–7) darstellen kann.
So können die zwölf Berechtigungen als 4-stellige Oktalzahl im Bereich von 0 bis 7777 dargestellt werden.
Um es etwas verwirrender zu machen, wird häufig eine Oktalzahl mit einer zusätzlichen führenden Null angegeben (genau wie
0x
Hexadezimalzahlen durch die Konvention vorangestellt werden), daher sind die Modi 0–07777.Um es einfacher zu machen: In den meisten Fällen interessieren Sie sich nur für die niedrigen neun Bits, daher werde ich mich von jetzt an auf 0–0777 konzentrieren.
Warum ist es in Oktal geschrieben
Warum das Oktalsystem verwenden? Es macht es einfacher, den Modus zu lesen!
Die niedrigsten neun Bits des Modus repräsentieren die folgenden Berechtigungsbits in dieser Reihenfolge . Anstelle der Binärdarstellung zeige ich den Wert des jeweiligen Bits in Oktal (kopiert von
chmod
(2)):Sehen Sie das Muster?
1
Stellt immer Ausführen / Suchen dar,2
ist immer Schreiben und4
wird immer gelesen. Wenn Lesen und Ausführen erlaubt sind, aber nicht Schreiben, ist es immer die Ziffer5
, alle 3 Berechtigungen Lesen / Schreiben / Ausführen sind immer zusammen7
. Schauen Sie sich zum Vergleich die Dezimalwerte an:Oktal macht es also ein bisschen konsistenter: Die Position der Ziffer ist Eigentümer / Gruppe / andere, und die Ziffer sagt Ihnen alles über die drei Lese- / Schreib- / Ausführungsbits.
Was ist die Umask?
Die umask ist eine Eigenschaft eines Prozesses (dh eines laufenden Programms, z. B. Ihrer Shell) und jeder Prozess hat eine. Hiermit werden die Berechtigungen festgelegt, die beim Erstellen einer neuen Datei nicht festgelegt werden sollen . Der Shell-Befehl
umask
legt die Maske der Shell fest. Wenn diese Shell ein anderes Programm startet, übernimmt dieses die umask von der aufrufenden Shell. Das Festlegen einer umask in einer Shell hat also keine Auswirkungen auf andere Programme, es sei denn, sie stammen von der ersten Shell ab und wurden nach dem Festlegen der umask erstellt. Aus diesem Grund sollte die umask sehr früh in Ihrer Sitzung durch ein Skript festgelegt werden.Egal was andere Leute sagen, benutze
077
;-)Wenn eine neue Datei erstellt wird , übergibt das Programm die gewünschten Berechtigungen an den
open
(2) Systemaufruf. Das Betriebssystem entfernt die in der umask gesetzten Bits und das Ergebnis wird zum Erstellen der Datei verwendet. Sie können das folgende C-Programm zum Testen verwenden:Kompilieren:
Folgen Sie diesem Beispiel:
Beachten Sie, wie das Programm die Berechtigungen rw-rw ----, dh Modus 0660, angefordert hat, aber die Berechtigungen der Gruppe wurden vollständig von der umask entfernt.
Im Allgemeinen sollte ein Programm vorschlagen, welche Berechtigungen es im günstigsten Fall für nützlich hält, und das Entfernen der Berechtigungen der umask des Betriebssystems überlassen. Verwenden Sie also 0777, wenn Sie ein Verzeichnis mit
mkdir
(2) erstellen, und 0666, wenn Sie eine einfache Datei mitopen
(2) erstellen . Abweichung nur dann, wenn dies sinnvoll ist, z. B. wenn ein Verschlüsselungsprogrammopen
mit 0600 seinen privaten Schlüssel speichert und ein Compiler0755
die von ihm erstellte ausführbare Binärdatei verwendet. In all diesen Fällen entfernt die umask unerwünschte Berechtigungen aus der Datei, wenn sie tatsächlich erstellt wird.Hier ist ein Beispiel, in dem der Compiler versucht, eine Datei zu erstellen, die von jedem gelesen und ausgeführt werden kann, die jedoch nur vom Benutzer (Modus 0755) in einer Einstellung mit umask 077 geschrieben werden kann:
Und in einer Einstellung mit umask 0 (alle vom Programm angeforderten Bits zulassen):
Tatsächlich
gcc
fordert der sogar Modus 0777 an:Also nicht verwenden umask 0.
quelle
Unter Linux ist die Standarddateiberechtigung 0644, die Standardverzeichnisberechtigung 0755 und die Standardumask 0022.
Da die vollständige Berechtigung einer Datei jetzt 0666 lautet, wurde die Standardberechtigung von (0666 - 0022 = 0644) und für das Verzeichnis (0777 - 0022 = 0755) verwendet.
Sie können die Maske mit festlegen.
#umask 0000
Sie erstellt Dateien und Verzeichnisse mit der vollständigen Berechtigung 666/777 (was jedoch sehr unsicher ist).quelle
Okay.
Ich habe dir die Formel gegeben:
mit default = 0666 und umask = 0022 erhalten Sie:
Sollte geschrieben werden als:
Unter Linux ist umask der Name einer eingebauten Shell, der Name einer Kernelfunktion und der Name eines Prozesswerts. Sowohl die eingebaute als auch die Funktion können den Prozesswert ändern.
Die umask wirkt sich auf den Prozess aus, in dem sie definiert wurde, und auf die Childs, die von ihr gestartet werden.
Der Dateimodus ist eine Zahl (12 Binärziffern oder 4 Oktalziffern oder 3 Hexadezimalziffern).
Mode ist eine dreistellige oder vierstellige Zahl .
Wie
123
und0123
ist die gleiche Dezimalzahl.Okay.
Okay.
Der Modus wird immer mit der umask eingestellt.
Nein, umask ist immer aktiv.
Der Modus ist das Ergebnis von:
Mode ist das Ergebnis von anding der Standardeinstellung mit der negierten umask.
Es gibt mehrere Punkte, die verbessert werden müssen, und nur das Anding (ohne Negation) ist:
Wenn Sie diese Binärziffern vertikal abgleichen, befolgen Sie diese Regeln: - Wenn sie gleich sind, schreiben Sie eine weitere gleiche Ziffer darunter. - Wenn sie unterschiedlich sind, schreiben Sie eine Null darunter.
quelle
Dies
umask
ist die “Dateimodus-Erstellungsmaske”:umask
≡ “Dateimodus-Erstellungsmaske” Dies ist ein Prozesswert. Jeder Prozess hat seinen eigenen Wert, erbt jedoch von seinem übergeordneten Prozess. Derumask
Wert wird im Kernel gespeichert und überlebt überfork
und einige Formen vonexec
.umask
ist eine Art Bitmaske: set ofumask
s ⊂ set of bitmasksEs gibt viele Arten von Bitmasken.
and
oder verwendenor
.Anders gesagt.
Die Erstellungsmaske für den Dateimodus ist mit einer umask identisch, jedoch nicht mit einer Maske. Ebenso wie eine schwarze Katze nicht mit einer Katze identisch ist. Sie sind beide Katzen, aber nicht beide schwarze Katzen. Es gibt viele Katzen in vielen Farben. Es gibt viele Bitmasken, die für viele Dinge verwendet werden.
Logische Maskierung
^ bedeutet "und", es funktioniert mit Bits. Also muss man zuerst das Oktal in Binär konvertieren. Dann müssen Sie die Operation nacheinander auf jedes Bit anwenden.
Auf Anfrage von OP kopiert, von doppelter Frage (OP zum Entfernen doppelter Fragen).
quelle