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

Hoe wijzig je bestandspermissies voor een directory in één commando

Hoe kan ik in Unix alle bestandspermissies van een directory met één commando wijzigen?

Antwoorden (3)

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

Om de rechten van een bestand of een map niet recursief te wijzigen, gebruikt u het commando chmod (zie man chmod voor meer informatie over de specifieke opties):

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

Om de eigenaar van een bestand/directory recursief te wijzigen (met gevolgen voor alle afstammelingen):

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

Om de rechten van alle bestanden in een directory recursief te wijzigen:

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

Om de machtigingsbits van alle mappen te wijzigen:

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

Het zou mooi zijn als je dit gewoon kon doen:

chmod -R 755 dir

Dit heeft echter problemen. Het behandelt bestanden en mappen hetzelfde. Het bovenstaande commando maakt mappen lijst- en leesbaar voor alle gebruikers, maar het maakt ook alle bestanden uitvoerbaar, wat je meestal niet wilt doen.

Als we het veranderen in 644, krijgen we een ander probleem:

$ 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
...

Het probleem is dat 644 de directorylijst bit wegneemt, en dit neveneffect verhindert verdere traversal van de bestandsboom. Je zou dit probleem kunnen omzeilen door sudo te gebruiken, maar je eindigt nog steeds met mappen die compleet nutteloos zijn voor niet-root gebruikers.

Het punt is, chmod -R werkt prima in sommige gevallen (b.v. chmod -R g-r), maar niet in gevallen waar je wilt knoeien met het -x bit, daar het werkt op bestanden en directories zonder onderscheid te maken.

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

chmod heeft een -R vlag die betekent dat je recursief rechten op bestanden en mappen kunt wijzigen.

Je kunt een hoofdletter ‘X’ gebruiken om het juiste te doen voor mappen: ‘X’ = “alleen uitvoeren/zoeken als het bestand een map is of al uitvoerrechten heeft voor een gebruiker”

Dus, bijvoorbeeld: chmod -R ug=rwX,o-rwx .

Zou een hele boom toegankelijk maken voor de eigenaar en de groep van elk bestand, en niet toegankelijk voor iemand anders. Alle reeds uitvoerbare bestanden zouden daarna nog steeds uitvoerbaar zijn, en alle directories zouden de ‘x’ hebben voor de gebruiker en de groep en niet voor anderen.

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

Van de man pagina van chmod:

-R, --recursive
              change files and directories recursively

Gebruik chmod met -R switch voor meervoudige directories die een sub-directory boom hebben met miljoenen bestanden erin en je wilt de bestandspermissies van deze bestanden samen in een keer veranderen.

Bestandspermissies kunnen bijvoorbeeld 777, 755, 644 enz. zijn.