Come posso modificare le autorizzazioni per una cartella e tutte le sue sottocartelle e file in un solo passaggio in Linux? [chiuso]


1806

Vorrei cambiare le autorizzazioni di una cartella e di tutte le sue sottocartelle e file in un solo passaggio (comando) in Linux.

Ho già provato il comando seguente ma funziona solo per la cartella menzionata:

chmod 775 /opt/lampp/htdocs

C'è un modo per impostare chmod 755per /opt/lampp/htdocse tutti i suoi contenuti, compresi sottocartelle e file?

Inoltre, in futuro, se creo una nuova cartella o file all'interno htdocs, come posso impostare automaticamente le autorizzazioni 755?

Ho dato un'occhiata anche a questo link:

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


4
Hai intenzione di scrivere chmod 75 /opt/lampp/htdocso dovrebbe essere davvero chmod 755 /opt/lampp/htdocs?
Ciao Arrivederci

234
Il fatto che la quarta domanda più votata su Linux sia "chiusa come fuori tema" è esilarante. Chi se non un programmatore si preoccuperebbe di chmod? Come è fuori tema? Perché "autorizzazioni", "cartella" e "cmod" sono tag anche se sono fuori tema?
Arthur Dent

8
@ArthurDent, perché questa domanda (sebbene perfettamente valida e utile) è più adatta a un sito SE focalizzato sul sistema, come SuperUser o ServerFault. Non è espressamente correlato alla programmazione.
timer

26
@timelmer Certo, ma chiedo di nuovo, perché sono i tag "autorizzazioni", "cartella" e "cmod"? Quando mai cmod verrebbe usato 'espressamente' per la programmazione?
Arthur Dent,

9
Se vuoi diventare davvero esigente, Bash è in realtà un linguaggio di scripting, ma lo è anche php, che SO non sembra preoccuparsi.
timer

Risposte:


2958

Le altre risposte sono corrette, in quanto chmod -R 755imposteranno queste autorizzazioni per tutti i file e le sottocartelle nella struttura. Ma perché mai vorresti farlo ? Potrebbe avere senso per le directory, ma perché impostare il bit di esecuzione su tutti i file?

Sospetto che quello che vuoi veramente fare sia impostare le directory su 755 e lasciare i file da soli o impostarli su 644. Per questo, puoi usare il findcomando. Per esempio:

Per modificare tutte le directory in 755 ( drwxr-xr-x):

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

Per modificare tutti i file in 644 ( -rw-r--r--):

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

231
Qualcuno ha cura di spiegare cosa {} \;significa alla fine della linea?
Nilzor,

307
@Nilzor chmod 644 {} \;specifica il comando che verrà eseguito da findogni file. {}viene sostituito dal percorso del file e il punto e virgola indica la fine del comando (scappato, altrimenti verrebbe interpretato dalla shell anziché find).
tobbez,

25
"ma perché impostare il bit di esecuzione su tutti i file" Perché no? Sono nuovo di Ubuntu / Linux ...
FlavorScape il

12
@FlavorScape Womble sta impostando il bit di esecuzione esclusivamente sulle directory restituite da find. L'autorizzazione di esecuzione su una directory consente a una classe utente di elencare il contenuto di quella directory e di inserirla in essa. In generale, vuoi che sia rex su una directory per renderti accessibile a te, anche se potrebbero esserci strani casi limite in cui dovresti impostare solo l'uno o l'altro. Consulta questa guida per maggiori informazioni: nixsrv.com/llthw/ex23
Alexandr Kurilin,

25
Con l'eccezione di sleepynate, ogni risposta ha trascurato di affrontare l'aspetto della sua domanda relativa all'impostazione delle autorizzazioni per i file / cartelle creati in futuro .
JGarrido

781

Seleziona l'opzione -R

chmod -R <permissionsettings> <dirname>

In futuro, puoi risparmiare molto tempo controllando prima la pagina man:

man <command name>

Quindi in questo caso:

man chmod

147
che cos'è quello man?
Adam,

36
sta per pagina di manuale ed è un comando linux che mostra la pagina man per un comando (la maggior parte dei comandi linux ha una pagina man). prova uomo o uomo uomo.
Steve Robillard,

8
Questo non ha funzionato per me nel Terminale in Mac OS X. Lì ho fatto "chmod -R <permissettings> <dirname> *" e ha funzionato.
Einar Ólafsson,

127
Penso che ormai sia più veloce pubblicare qui o utilizzare Google che utilizzare man. Soprattutto per qualcosa come grepdove, se sei nuovo man, può richiedere molto tempo per individuare esempi nel documento, ma Google o SO forniscono esempi in pochi secondi.
ely

17
Per la cronaca, quelli che non hanno familiarità con Linux potrebbero non avere familiarità con l'uomo. So solo della sua esistenza, ma cercare di capire come usarlo richiederebbe un'avventura su Google in sé e per sé. Forse è un'impresa degna, ma dovresti capire che ho trovato QUESTO MOLTO post tramite google e che ha risposto alla domanda ESATTA che stavo facendo. Risorse, amico mio. Le risorse sono preziose. E potresti pensare che fosse inutile e che avrebbe dovuto controllare l'uomo, ma questo ha aiutato me e centinaia di altri (persino mille). Quindi, per favore, consideralo.
Soundfx4,

391

Se si desidera impostare le autorizzazioni su tutti i file a+re su tutte le directory a+xe farlo in modo ricorsivo attraverso l'albero della sottodirectory completo, utilizzare:

chmod -R a+rX *

Il X(cioè maiuscolo X, non piccolo x!) Viene ignorato per i file (a meno che non siano già eseguibili per qualcuno) ma viene utilizzato per le directory.


27
Bella risposta. Basta notare che * non corrisponderà ai file nascosti (nomi che iniziano con un punto). Potrebbe avere più senso, quindi, usare. (per la directory corrente).
Aaron Adams,

21
Questa è la risposta corretta Nel mio caso, volevo impostare tutte le directory su 775 e tutti i file su 664 . L'eccellente risposta di Pete mi ha portato ai chmoddocumenti, dove ho capito che avrei potuto usare chmod -R g+wX .. Bravo!
Chadoh,

8
Questo non verrà rimosso xdai file se già lo hanno.
Benoit Duffez,

5
Nel caso in cui non sia del tutto chiaro, X maiuscola significa "rendere eseguibili tutte le directory" (ma non i file).
Matt Browne,

4
@BenoitDuffez se il tuo obiettivo è rimuovere anche il bit eseguibile dai file, puoi combinare direttive, come "a-x + rX" per rimuovere "x" da tutto e quindi impostare "r" su tutto e "x" solo sulle directory .
nunks

144

È possibile utilizzare -Rcon chmodper l'attraversamento ricorsivo di tutti i file e sottocartelle.

Potrebbe essere necessario sudo poiché dipende dal fatto che LAMP sia installato dall'utente corrente o da un altro:

sudo chmod -R 755 /opt/lampp/htdocs

17
In qualche modo, sudo chmod 755 -R /directorynon ha funzionato ma sudo chmod -R 755 /directoryha funzionato. Strano. A proposito, sto usando Mac OS X.
lomse,

8
Questo è corretto nella mia esperienza. Il flag deve apparire direttamente dopo chmod, non ovunque nella stringa.
Orionrush,

1
Il comando sopra scritto è sbagliato. Il comando ricorsivo corretto è: sudo chmod -R 755 / opt / lampp / htdocs Nota: -R dovrebbe essere prima del 755
Sandip Patel - SM

Questa soluzione funziona bene per Redhat. Grazie!
Lavande,

Ha funzionato bene su RHEL e ha sudo chmod 755 -Rfunzionato
AnBisw il

79

Il comando ricorsivo corretto è:

sudo chmod -R 755 /opt/lampp/htdocs

-R: cambia ogni sottocartella inclusa la cartella corrente


1
ciao sei sicuro della cartella corrente sei uno nonostante il percorso?
Shareef

OSX USANDO: sudo chmod 777 registri / -R COME OTTENERE: chmod: -R: nessun file o directory DOVREBBE ESSERE: sudo chmod -R 777 registri /
elad silver

76

Per impostare su tutte le sottocartelle (ricorsivamente) usa -R

chmod 755 /folder -R

E usa umask per impostare il default su nuove cartelle / file cd / cartella umask 755


24
NON impostare il valore umasksu 755! Non sarai in grado di elencare, leggere o utilizzare qualsiasi file o directory che crei!
Sleepynate,

14
Intendevi umask 022?
Xkeeper

4
questo imposta tutto su 755, compresi i file.!
Patrick Mutwiri,

@sleepynate Di cosa stai parlando? 755 significa che il proprietario può leggere, scrivere ed eseguire, e tutti gli altri utenti possono leggere ed eseguire, ma non scrivere sull'oggetto
svin83

2
@NicHartley @ svin83 umask sono i bit che verranno mascherati dai permessi, quindi è effettivamente l'inverso di chmod. λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
Sleepynate,

51

chmod 755 -R /opt/lampp/htdocsimposterà in modo ricorsivo le autorizzazioni. Non è possibile impostare automaticamente le autorizzazioni per i file solo in questa directory creata dopo aver impostato le autorizzazioni, ma è possibile modificare le autorizzazioni dei file predefiniti a livello di sistema impostando umask 022.


9
La risposta di sleepynate è SOLO corretta. Il poster ha posto due domande: 1) Come posso correggere i permessi su file e cartelle, e 2) come posso cambiare le impostazioni predefinite (che significano file "futuri"). Come ha detto Nate, il primo è con "chmod", e il secondo è con "umask". Aggiungo anche che NON c'è MODO per cambiare umask in una sola directory ... umask è "tutto o niente" per utente. Tuttavia, nulla ti impedisce di creare un nuovo utente, che condivide gruppi con te, in modo che tu possa semplicemente "sudo -u someuser [creare file]". Sta pensando un po 'fuori dagli schemi, ma è una bella soluzione.
Scott Prive

Penso che tu abbia ragione, ma non può inheritessere una soluzione per molti casi o funzionerà esclusivamente con NTFS-3G?
Sebastian Schlicht,

senza dare il permesso alle cartelle potrebbe essere creato in futuro, si potrebbe non essere in grado di copiare una cartella, diciamo myforlderda altri luoghi (come un PC) in questa directory di destinazione (su un server) perché proverà a creare una nuova cartella in la directory di destinazione con nome per il myfolder quale non si dispone dell'autorizzazione per farlo. Come ho rootappena, uso chown -R username:usergroup /directory.
Jason Goal,

27

Potresti prendere in considerazione questa risposta data da Nik su Superuser e usare "one chmod" per tutti i file / cartelle come questo:

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

9
Attenzione, è facile imbattersi nei limiti della riga di comando.
Lothar,

1
Ho questo errore: -bash: / bin / chmod: lista degli argomenti troppo lunga
Oleg Abrazhaev

Sarebbe meglio usare l' -execopzione di findper superare l' Argument list too longerrore.
miravalls,


20

Uso:

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

Tuttavia, fai attenzione. Può davvero farti del male se cambi i permessi di file / cartelle sbagliati.


20

Ecco un altro modo per impostare le directory su 775 e i file su 664.

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

Potrebbe sembrare lungo, ma è piuttosto interessante per tre motivi:

  1. Esegue la scansione del file system solo una volta anziché due volte.
  2. Fornisce un migliore controllo su come vengono gestiti i file e su come vengono gestite le directory . Ciò è utile quando si lavora con modalità speciali come il bit appiccicoso , che probabilmente si desidera applicare alle directory ma non ai file.
  3. Usa una tecnica direttamente dalle manpagine (vedi sotto).

Si noti che non ho confermato la differenza di prestazioni (se presente) tra questa soluzione e quella di utilizzare semplicemente due comandi di ricerca (come nella soluzione di Peter Mortensen). Tuttavia, vedere un esempio simile nel manuale è incoraggiante.

Esempio dalla man findpagina:

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.

Saluti


Ora, come trasformarlo in uno script di shell in modo da poter eseguire openmod $ folder?
StR

Persone, per favore usate xargs. Salva migliaia di invocazioni di processo.
seanahern

13

chmod -R 755 directory_namefunziona, ma come manterresti anche i nuovi file su 755? Le autorizzazioni del file diventano le autorizzazioni predefinite.


L'ho fatto ma non riesco ad aprire il terminale da lì. Non posso aggiustarlo.
Kavindu Gayantha,

9

Per Mac OS X 10.7 (Lion), è:

chmod -R 755 /directory

E sì, come dicono tutti gli altri, fai attenzione quando lo fai.


9

Si desidera assicurarsi che i file e le directory appropriati siano modificati / autorizzazioni per quelli appropriati. Per tutte le directory che desideri

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

E per tutte le immagini, JavaScript, CSS, HTML ... beh, non dovresti eseguirle. Quindi usa

chmod 644 img/* js/* html/*

Ma per tutto il codice logico (ad esempio il codice PHP), dovresti impostare le autorizzazioni in modo tale che l'utente non possa vedere quel codice:

chmod 600 file

6

Penso che Adam stesse chiedendo come modificare il valore di umask per tutti i processi che cercano di operare su una /opt/lampp/htdocsdirectory.

La maschera della modalità di creazione file dell'utente (umask) viene utilizzata per determinare l'autorizzazione del file per i file appena creati. Può essere utilizzato per controllare l'autorizzazione del file predefinito per i nuovi file.

quindi se utilizzerai una specie di programma ftp per caricare file, /opt/lampp/htdocsdevi configurare il tuo server ftp per usare umask che desideri.

Se file / directory vengono creati ad esempio da php, è necessario modificare il codice php

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

se creerai nuovi file / cartelle dalla tua sessione bash, puoi impostare il valore umask nel tuo profilo shell ~ / .bashrc oppure puoi impostare umask in /etc/bashrco /etc/profilefile per tutti gli utenti. aggiungere quanto segue al file: 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

E per modificare le autorizzazioni per i file già creati è possibile utilizzare find. Spero che sia di aiuto.


4

Esistono due risposte per trovare i file e applicarli chmod. Il primo è findil file e si applica chmodcome trova (come suggerito da @WombleGoneBad).

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

La seconda soluzione è quella di generare un elenco di tutti i file con findcomando e fornire questo elenco al chmodcomando (come suggerito da @lamgesh).

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

Entrambe queste versioni funzionano bene a condizione che il numero di file restituiti dal findcomando sia ridotto. La seconda soluzione ha un bell'aspetto e più leggibile della prima. Se è presente un numero elevato di file, la seconda soluzione restituisce un errore:Argument list too long.

Quindi il mio suggerimento è

  1. Uso chmod -R 755 /opt/lampp/htdocs se si desidera modificare le autorizzazioni di tutti i file e le directory contemporaneamente.
  2. Utilizzare find /opt/lampp/htdocs -type d -exec chmod 755 {} \;se il numero di file che si sta utilizzando è molto elevato. Il-type x opzione cerca solo il tipo specifico di file, dove d viene utilizzato per trovare la directory, f per il file e l per il collegamento.
  3. Uso chmod 755 $(find /path/to/base/dir -type d) altrimenti
  4. Meglio usare il primo in qualsiasi situazione

2

È molto semplice.

Nel Terminale vai al file manager. Esempio: sudo nemo. Vai /opt/quindi fai clic su Proprietà → Autorizzazione . e poi Altro . Infine, modifica per creare ed eliminare e accedere ai file per leggere e scrivere e fare clic sul pulsante Applica ... E funziona.


cos'è sudo nemo?
Vikranth Inti,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.