Beispiel:
# show starting permissions
% stat -c '%04a' ~/testdir
0700
# change permissions to 2700
% chmod 2700 ~/testdir
# check
% stat -c '%04a' ~/testdir
2700
# so far so good...
# now, change permissions back to 0700
% chmod 0700 ~/testdir
# check
% stat -c '%04a' ~/testdir
2700
# huh???
# try a different tack
% chmod g-w ~/testdir
% stat -c '%04a' ~/testdir
0700
Fehler oder Funktion?
Warum chmod 0700 ~/testdir
nicht die Berechtigungen ändern von 2700
zu 0700
?
Ich habe das gleiche Verhalten in mehreren verschiedenen Dateisystemen beobachtet. In der letzten ist beispielsweise die relevante mount
Ausgabezeile
/dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
Auch FWIW
% stat -c '%04a' ~/
0755
permissions
chmod
kjo
quelle
quelle
Antworten:
Angenommen, Sie verwenden GNU
chmod
, ist dies in der Manpage dokumentiert :Dies ist in POSIX zulässig :
Die Gründe für das Verhalten in GNU
chmod
sind in den Versionshinweisen fürcoreutils
6.0 angegeben :In # 8391 gibt es mehr zu diesem Thema , einschließlich der weiteren Begründung, dass die führende 0 mehrdeutig ist (dies könnte für den Benutzer entweder gelöschte Bits oder einen Oktalwert anzeigen). Das
coreutils
Handbuch enthält außerdem einen eigenen Abschnitt, Verzeichnisse sowie die Bits Set-User-ID und Set-Group-ID . Dies zeigt, dass es GNU-Erweiterungen gibt, mit denen die fraglichen Bits gelöscht werden können:beide löschen die Bits (sind aber nicht portierbar).
quelle
chmod
diese spezielle Richtlinie hat? IOW, gibt es eine Rechtfertigung dafür, die über "POSIX verbietet es nicht" hinausgeht? Bietet es einen Nutzen?Versuche dies:
quelle
==> OK!
Ändern Sie die Berechtigungen in 2700
% chmod 2700 ~ / testdir
==> Beachten Sie, dass Sie die Gruppen-ID einstellen !!!
prüfen
% stat -c '% 04a' ~ / testdir 2700
==> OK!
So weit, ist es gut...
Ändern Sie jetzt die Berechtigungen wieder auf 0700
% chmod 0700 ~ / testdir
==> Bitte beachten Sie erneut, dass Sie das Löschen mit Flaggenbeschränkung oder Sticky (nicht Gruppen-ID) entfernen.
prüfen
% stat -c '% 04a' ~ / testdir 2700
huh ???
versuchen Sie es mit einem anderen Ansatz
% chmod gw ~ / testdir% stat -c '% 04a' ~ / testdir 0700
================================================== ========= Als letztes können Sie diesen Befehl verwenden, um Erfolg zu haben:
quelle