Jak zmienić uprawnienia do pliku dla katalogu w jednym poleceniu


11

Jak mogę zmienić wszystkie uprawnienia do katalogu w jednym poleceniu w Uniksie?


Czy masz na myśli, że chcesz zmienić uprawnienia do wszystkich plików w katalogu? Czy chcesz, aby to również trafiło do zagnieżdżonych katalogów? Czy chcesz zmienić uprawnienia do samego katalogu (-ów), czy tylko samych plików? Wreszcie, czy próbowałeś najpierw przeszukać tę stronę przed opublikowaniem pytania?
Eter

Odpowiedzi:


21

Aby zmienić uprawnienia do wpisu pliku lub katalogu nierekurencyjnie, użyj chmodpolecenia (zobacz man chmod, aby dowiedzieć się więcej o jego konkretnych opcjach):

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

Aby rekurencyjnie zmienić właściciela pliku / katalogu (wpływając na wszystkich potomków):

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, rekurencyjnie:

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 to zrobić:

chmod -R 755 dir

Ma to jednak problemy. Traktuje tak samo pliki i katalogi. Powyższe polecenie powoduje, że katalogi mogą być wyświetlane i czytelne dla wszystkich użytkowników, ale także sprawia, że ​​wszystkie pliki są wykonywalne, co zwykle jest tym, czego nie chcesz 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 644, że usuwa bit listy katalogów, a ten efekt uboczny zapobiega dalszemu przechodzeniu do drzewa plików. Możesz obejść ten problem, używając sudo, ale nadal masz katalogi, które są całkowicie bezużyteczne dla użytkowników innych niż root.

Chodzi o to, że chmod -Rdziała dobrze w niektórych przypadkach (np. chmod -R g-r), Ale nie w przypadkach, w których chcesz zadzierać z -xbitem, ponieważ działa na plikach i katalogach bez rozróżnienia.


Dlaczego zakładasz, że chce ustawić 644lub że -xw ogóle ustawia katalogi? Pytanie tylko stanowi, że chce zmienić uprawnienia, a nie w szczególności.
Reese Moore,

@Reese Moore: Masz rację. Pytający nawet nie powiedział nic o rekurencyjnej zmianie uprawnień.
Joey Adams,

1
Na ogół chcesz do tego użyć trybu symbolicznego + i -; tj.chmod -R go=u,go-w /dir
dannysauer,

6

chmodma -Rflagę, która oznacza rekurencyjną zmianę uprawnień do plików i katalogów.

Możesz użyć wielkich liter „X”, aby zrobić właściwą rzecz dla folderów: „X” = „wykonaj / wyszukaj tylko, jeśli plik jest katalogiem lub ma już uprawnienia do wykonywania dla niektórych użytkowników”

Na przykład: chmod -R ug = rwX, o-rwx.

Sprawi, że całe drzewo będzie dostępne dla właściciela i grupy każdego pliku i nie będzie dostępne dla nikogo innego. Wszelkie pliki, które już są wykonywalne, byłyby nadal możliwe do wykonania, a wszystkie katalogi miałyby „x” dla użytkownika i grupy, a nie dla innych.


Wypróbuj chmod -R 444 somedirkatalog z plikami. Dostajesz, Permission deniedponieważ flaga -x jest usuwana z katalogów i konieczne jest dalsze czytanie katalogu.
Joey Adams,

1
Przydatnym dodatkiem do tego jest składnia X = Y. Możesz na przykład ustawić uprawnienia grupy do uprawnień użytkownika za pomocą chmod -R g = u katalog, aby ustawić równoważną grupę i użytkownika. Działa to wokół takich katalogów, które wymagają plików wykonywalnych, podczas gdy pliki „zwykłe” nie.
Paul Rubel,

3
chmod -R <file permission> *

Ze strony podręcznika użytkownika chmod:

-R, --recursive
              change files and directories recursively

Użyj chmodz -Rprzełącznikiem dla wielu kierunków, które mają drzewo podkatalogów zawierające miliony plików w środku i chcesz zmienić uprawnienia do tych plików jednocześnie.

Zezwolenie na plik może dotyczyć np. 777, 755, 644 itd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.