it-swarm.com.de

Wie ändere ich die Berechtigungen für einen Ordner und alle Unterordner und Dateien in einem Schritt unter Linux?

Ich möchte die Berechtigungen eines Ordners und aller seiner Unterordner und Dateien in einem Schritt (Befehl) unter Linux ändern.

Ich habe den folgenden Befehl bereits ausprobiert, aber er funktioniert nur für den angegebenen Ordner:

chmod 775 /opt/lampp/htdocs

Gibt es eine Möglichkeit, chmod 755 für /opt/lampp/htdocs und den gesamten Inhalt einschließlich der Unterordner und Dateien festzulegen?

Wenn ich in Zukunft einen neuen Ordner oder eine neue Datei in htdocs erstelle, wie können die Berechtigungen dafür automatisch auf 755 gesetzt werden?

Ich habe mir auch diesen Link angesehen:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal

1648
Adam

Die anderen Antworten sind korrekt, da chmod -R 755 diese Berechtigungen für alle Dateien und Unterordner im Baum festlegt. Aber warum um alles in der Welt würdest du wollen? Es mag für die Verzeichnisse sinnvoll sein, aber warum sollte das Ausführungsbit für alle Dateien gesetzt werden?

Ich vermute, Sie möchten die Verzeichnisse auf 755 setzen und entweder die Dateien in Ruhe lassen oder auf 644 setzen. Dazu können Sie den Befehl find verwenden. Zum Beispiel:

So ändern Sie alle Verzeichnisse in 755 (drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

So ändern Sie alle Dateien in 644 (-rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;
2733
WombleGoneBad

Aktivieren Sie die Option -R

chmod -R <permissionsettings> <dirname>

In Zukunft können Sie viel Zeit sparen, indem Sie zuerst die Manpage überprüfen:

man <command name>

Also in diesem Fall:

man chmod
738
Steve Robillard

Wenn Sie Berechtigungen für alle Dateien auf a+r und für alle Verzeichnisse auf a+x festlegen möchten und dies rekursiv über den gesamten Unterverzeichnisbaum tun möchten, verwenden Sie:

chmod -R a+rX *

Das X (das ist das Großbuchstaben X, nicht das Kleinbuchstaben x!) Wird für Dateien ignoriert (es sei denn, sie sind bereits für jemanden ausführbar), wird jedoch für Verzeichnisse verwendet.

359
Pete

Sie können -R mit chmod zum rekursiven Durchlaufen aller Dateien und Unterordner verwenden.

Möglicherweise benötigen Sie Sudo, da dies davon abhängt, dass LAMP vom aktuellen oder einem anderen Benutzer installiert wird:

Sudo chmod 755 -R /opt/lampp/htdocs
127
ravi ranjan

Verwenden Sie -R, um alle Unterordner (rekursiv) festzulegen

chmod 755 /folder -R

Und verwenden Sie umask, um den Standard auf neue Ordner/Dateien einzustellen. Cd/folder umask 755

71
Topera

Der korrekte rekursive Befehl lautet:

Sudo chmod 755 -R /opt/lampp/htdocs

-R: Ändert jeden Unterordner einschließlich des aktuellen Ordners

68
Pramendra Gupta

chmod 755 -R /opt/lampp/htdocs setzt die Berechtigungen rekursiv. Es gibt keine Möglichkeit, die Berechtigungen für Dateien automatisch nur in diesem Verzeichnis festzulegen, das nach dem Festlegen der Berechtigungen erstellt wurde. Sie können jedoch Ihre systemweiten Standarddateiberechtigungen ändern, indem Sie umask 022 festlegen.

49
sleepynate

Vielleicht möchten Sie diese Antwort von nik für den Superuser in Betracht ziehen und "one chmod" für alle Dateien/Ordner wie folgt verwenden:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
24
Iam Zesh

Verwenden:

Sudo chmod 755 -R /whatever/your/directory/is

Seien Sie jedoch vorsichtig damit. Es kann wirklich weh tun, wenn Sie die Berechtigungen der falschen Dateien/Ordner ändern.

20
Nate Starner

Hier ist eine andere Möglichkeit, Verzeichnisse auf 775 und Dateien auf 664 festzulegen.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Es mag lang aussehen, ist aber aus drei Gründen ziemlich cool:

  1. Durchsucht das Dateisystem nur einmal und nicht zweimal.
  2. Bietet eine bessere Kontrolle darüber, wie Dateien und wie Verzeichnisse behandelt werden . Dies ist nützlich, wenn Sie mit Spezialmodi wie dem Sticky-Bit arbeiten, das Sie wahrscheinlich auf Verzeichnisse, aber nicht auf Dateien anwenden möchten.
  3. Verwendet eine Technik direkt aus den man Seiten (siehe unten).

Beachten Sie, dass ich den Leistungsunterschied (falls vorhanden) zwischen dieser Lösung und dem einfachen Verwenden von zwei Suchbefehlen (wie in Peter Mortensens Lösung) nicht bestätigt habe. Es ist jedoch ermutigend, ein ähnliches Beispiel im Handbuch zu sehen.

Beispiel von man find Seite:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

Prost

20
chrisfargen

chmod -R 755 directory_name funktioniert, aber wie würden Sie neue Dateien auch auf 755 speichern? Die Berechtigungen der Datei werden zur Standardberechtigung.

12
Sanchit Gupta

Sie möchten sicherstellen, dass die entsprechenden Dateien und Verzeichnisse chmod-ed sind, und dass die entsprechenden Berechtigungen vorhanden sind. Für alle gewünschten Verzeichnisse

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

Und für alle Bilder, JavaScript, CSS, HTML ... sollten Sie sie nicht ausführen. Also benutze

chmod 644 img/* js/* html/*

Für den gesamten Logikcode (zum Beispiel PHP Code) sollten Sie die Berechtigungen so festlegen, dass der Benutzer diesen Code nicht sehen kann:

chmod 600 file
10
NikolaiDante

Für Mac OS X 10.7 (Lion) ist dies:

chmod -R 755 /directory

Und ja, wie alle anderen sagen, seien Sie vorsichtig, wenn Sie dies tun.

7
wmartin

Ich denke, Adam fragte, wie man den umask-Wert für alle Prozesse ändert, die mit dem /opt/lampp/htdocs -Verzeichnis arbeiten sollen.

Die Benutzerdatei-Erstellungsmodus-Maske (umask) wird verwendet, um die Dateiberechtigung für neu erstellte Dateien zu bestimmen. Es kann verwendet werden, um die Standarddateiberechtigung für neue Dateien zu steuern.

wenn Sie also ein FTP-Programm verwenden, um Dateien in /opt/lampp/htdocs hochzuladen, müssen Sie Ihren FTP-Server so konfigurieren, dass er die von Ihnen gewünschte umask verwendet.

Wenn Dateien/Verzeichnisse zum Beispiel von PHP erstellt werden, müssen Sie den PHP-Code ändern

<?php
umask(0022);
// other code
?>

wenn Sie aus Ihrer Bash-Sitzung neue Dateien/Ordner erstellen, können Sie den Wert umask in Ihrem Shell-Profil ~/.bashrc festlegen. Alternativ können Sie umask in der Datei /etc/bashrc oder /etc/profile für alle Benutzer festlegen. Fügen Sie der Datei Folgendes hinzu: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Und um die Berechtigungen für bereits erstellte Dateien zu ändern, können Sie find verwenden. Hoffe das hilft.

6
Viktor

Es gibt zwei Antworten, Dateien zu finden und chmod auf sie anzuwenden. Zuerst ist find die Datei und wende chmod an, wie es gefunden wird (wie von @WombleGoneBad vorgeschlagen).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Die zweite Lösung besteht darin, eine Liste aller Dateien mit dem Befehl find zu erstellen und diese Liste an den Befehl chmod weiterzuleiten (wie von @lamgesh vorgeschlagen).

chmod 755 $(find /path/to/base/dir -type d)

Beide Versionen funktionieren einwandfrei, solange die Anzahl der vom Befehl find zurückgegebenen Dateien gering ist. Die zweite Lösung sieht gut aus und ist besser lesbar als die erste. Wenn es eine große Anzahl von Dateien gibt, gibt die zweite Lösung einen Fehler zurück: Argument list too long.

Also mein Vorschlag ist

  1. Verwenden Sie chmod -R 755 /opt/lampp/htdocs, wenn Sie die Berechtigungen aller Dateien und Verzeichnisse gleichzeitig ändern möchten.
  2. Verwenden Sie find /opt/lampp/htdocs -type d -exec chmod 755 {} \;, wenn die Anzahl der von Ihnen verwendeten Dateien sehr groß ist. Die Option -type x sucht nur nach einem bestimmten Dateityp, wobei d zum Suchen des Verzeichnisses, f für die Datei und l für die Verknüpfung verwendet wird.
  3. Verwenden Sie andernfalls chmod 755 $(find /path/to/base/dir -type d)
  4. Besser in jeder Situation die erste verwenden
4
Prabhu

Es ist sehr einfach.

Gehen Sie im Terminal zum Dateimanager. Beispiel: Sudo nemo. Gehe zu /opt/ und klicke dann auf Eigenschaften → Berechtigung . und dann Andere . Schließlich ändern, um zu erstellen und zu löschen und den Zugriff auf Dateien zu lesen und zu schreiben und klicken Sie auf die Schaltfläche Übernehmen ... und arbeiten.

2
Debian.