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 ls
Problem 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.
cd
Gehen Sie eine Ebene zurück und prüfen Sie, welche Berechtigungen für das Verzeichnis gelten, aus dem Sie gerade gekommen sind. sudo
Sie 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, dassdirectory
in Ihrem Beispiel leer ist und der Fehler auftrittchmod: cannot access ‘directory/*’: No such file or directory
?) - Wie northern-bradley vorgeschlagen hat, kann man das
R
Flag in verwendenchmod
, um den Baum rekursiv zu durchlaufen und die Berechtigungen für alles unter Ihrem aktuellen Punkt zu ändern. Das heißt, verwenden Siechmod -R directory
oder , wenn Ihnen die Berechtigungen fehlensudo chmod -R directory
(achten Sie jedoch darauf, dass Sie nicht versehentlich die Berechtigungen für Systemdateien ändern, wenn Siesudo
Zuchmod
; 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 cd
befinden. 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 xargs
istangeblich schnellerr
. Möglicherweise möchten Sie das Flag hinzufügen , um xargs
einen Fehler zu vermeiden, falls find
nichts zurückgegeben wird. Wenn Sie root
Berechtigungen benötigen, sollten Sie diese sudo
für beide Hälften der Pipe verwenden (gehen Sie auch hier vorsichtig vor, wenn Sie chmod
as 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
).