Chmod funktioniert nicht wie erwartet

Chmod funktioniert nicht wie erwartet

Wenn ich meine Dateiberechtigung wie folgt ändern möchte

 $ sudo chmod a+x *.* 

Dieser Fehler tritt auf

 chmod: cannot access ‘*.*’: No such file or directory

Und wenn ich die Berechtigung jeder einzelnen Datei in einem Verzeichnis ändern möchte mit

 $ sudo chmod a+x directory/* 

Derselbe Fehler tritt auf

 chmod: cannot access ‘directory/*’: No such file or directory

Wenn ich den gleichen Befehl in einem anderen Verzeichnis versuche, funktioniert es, aber unter diesem Verzeichnis /var/www/html funktioniert es nicht, auch wenn ich die Berechtigung Datei für Datei auf a+x ändere, wenn ich es ausführe

 ls

Ein Berechtigungsfehler wird angezeigt

 ls: cannot open directory .: Permission denied

Antwort1

Die Dateierweiterung in Linux ist nichts Besonderes, sie ist nur ein Teil des Dateinamens. Das Dateiglobbing der Shell wird *für alle Zeichen verwendet, daher können Sie einfach chmod a+x *anstelle von verwenden.

Antwort2

Das lsProblem scheint, dass Sie nicht über ausreichende Berechtigungen für das Verzeichnis verfügen.https://stackoverflow.com/a/15800917/3501748Zustände: Für Verzeichnisse muss die Ausführungsberechtigung festgelegt sein, um deren Inhalt anzeigen zu können.

cdGehen Sie eine Ebene zurück und prüfen Sie, welche Berechtigungen für das Verzeichnis gelten, aus dem Sie gerade gekommen sind. sudoSie erhalten keine Zugriffsrechte auf einen Ordner, wenn Root keine Rechte für diesen Ordner hat. Könnte vielleicht sudo -u <username>helfen.

Wenn Sie den Verzeichnisbaum unterhalb Ihres Startpunkts rekursiv durchsuchen müssen, verwenden Sie chmod -R.

Antwort3

Zunächst möchte ich die vorhandenen Antworten anerkennen:

  • Wie UweBurger sagt, verwendet man *in Ubuntu (oder, glaube ich, in Unix im Allgemeinen) ein allgemeines Platzhalterzeichen. (Ist es möglich, dass directoryin Ihrem Beispiel leer ist und der Fehler auftritt chmod: cannot access ‘directory/*’: No such file or directory?)
  • Wie northern-bradley vorgeschlagen hat, kann man das RFlag in verwenden chmod, um den Baum rekursiv zu durchlaufen und die Berechtigungen für alles unter Ihrem aktuellen Punkt zu ändern. Das heißt, verwenden Sie chmod -R directoryoder , wenn Ihnen die Berechtigungen fehlen sudo chmod -R directory(achten Sie jedoch darauf, dass Sie nicht versehentlich die Berechtigungen für Systemdateien ändern, wenn SiesudoZuchmod; Ihrem eigenen Benutzer fehlen einfach die Berechtigungen dazu, was die erste Variante sicherer macht).

Ich möchte jedoch hinzufügen, dass Sie die Berechtigungen von Verzeichnissen möglicherweise nicht auf die gleiche Weise ändern möchten wie die von Dateien. Wie imamtliche Dokumentation, die read ( r)-Berechtigung für Verzeichnisse bedeutet, dass man deren Inhalt anzeigen kann (z. B. mit ls), die write ( w)-Berechtigung ermöglicht es einem Benutzer, Dateien darin zu erstellen/entfernen, und die execute ( x)-Berechtigung, sich darin zu cdbefinden. Es gibt eine großartige AntwortHierschlägt eine Methode vor, um bei der rekursiven Anwendung neuer Berechtigungen zwischen Dateien und Verzeichnissen zu unterscheiden. Die verwendete Variante xargsistangeblich schnellerr. Möglicherweise möchten Sie das Flag hinzufügen , um xargseinen Fehler zu vermeiden, falls findnichts zurückgegeben wird. Wenn Sie rootBerechtigungen benötigen, sollten Sie diese sudofür beide Hälften der Pipe verwenden (gehen Sie auch hier vorsichtig vor, wenn Sie chmodas angeben root). Das wäre dann:

sudo find [Pfad/zum/Verzeichnis] ​​-type d -print0 | sudo xargs -0r chmod [Berechtigungen für das gewünschte Verzeichnis]

sudo find [Pfad/zum/Verzeichnis] ​​-type f -print0 | sudo xargs -0r chmod [gewünschte Dateiberechtigungen]

wo [desired-*-permissions]kann gegeben werdenausdrücklich( 777) odermit Buchstaben(wie a+x).

verwandte Informationen