2010-11-08 17:31:41 +0000 2010-11-08 17:31:41 +0000
11
11

Jak zmienić uprawnienia do plików w katalogu za pomocą jednego polecenia?

Jak mogę zmienić uprawnienia do wszystkich plików w katalogu w jednym poleceniu w systemie Unix?

Odpowiedzi (3)

21
21
21
2010-11-08 17:40:58 +0000

Aby zmienić uprawnienia do pliku lub wpisu w katalogu w sposób nierekursywny, użyj polecenia chmod (zobacz man chmod aby przeczytać więcej o jego specyficznych opcjach):

chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable

Aby zmienić właściciela pliku/katalogu rekursywnie (wpływając na wszystkie pliki potomne):

chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Aby zmienić bity uprawnień wszystkich plików w katalogu, rekursywnie:

find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-

Aby zmienić bity uprawnień wszystkich katalogów:

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Byłoby miło, gdybyś mógł po prostu zrobić tak:

chmod -R 755 dir

Jednak wiąże się to z problemami. Traktuje pliki i katalogi tak samo. Powyższa komenda czyni katalogi listowalnymi i możliwymi do odczytania przez wszystkich użytkowników, ale czyni też wszystkie pliki wykonywalnymi, czego zazwyczaj nie chcemy robić.

Jeśli zmienimy to na 644, otrzymamy kolejny problem:

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Problem polega na tym, że 644 usuwa bit listy katalogów, a ten efekt uboczny uniemożliwia dalsze poruszanie się po drzewie plików. Możesz obejść ten problem używając sudo, ale nadal kończysz z katalogami, które są całkowicie bezużyteczne dla użytkowników nie będących rootami.

Chodzi o to, że chmod -R działa dobrze w niektórych przypadkach (np. chmod -R g-r), ale nie w przypadkach, w których chcesz mieszać z bitem -x, ponieważ działa on na plikach i katalogach w sposób niedyskryminujący.

6
6
6
2010-11-08 17:34:48 +0000

chmod ma flagę -R, która oznacza rekurencyjną zmianę uprawnień na plikach i katalogach.

Możesz użyć dużej litery ‘X’, aby zrobić właściwą rzecz dla katalogów: ‘X’ = “wykonaj/wyszukaj tylko jeśli plik jest katalogiem lub ma już uprawnienia execute dla jakiegoś użytkownika”

Tak więc, np: chmod -R ug=rwX,o-rwx .

Uczyniłoby całe drzewo dostępnym dla właściciela i grupy każdego pliku, a niedostępnym dla nikogo innego. Wszystkie już wykonane pliki byłyby nadal wykonywalne po tym, a wszystkie katalogi miałyby ‘x’ dla użytkownika i grupy, a nie dla innych.

3
3
3
2012-08-01 07:10:21 +0000
chmod -R <file permission> *

Ze strony man dla chmod:

-R, --recursive
              change files and directories recursively

Użyj chmod z przełącznikiem -R dla wielu kierunków, które mają drzewo podkatalogów mające miliony plików wewnątrz i chcesz zmienić uprawnienia do plików tych plików razem za jednym zamachem.

Uprawnienia plików mogą być np. 777, 755, 644 itd.