Jak mogę zmienić wszystkie uprawnienia do katalogu w jednym poleceniu w Uniksie?
Jak mogę zmienić wszystkie uprawnienia do katalogu w jednym poleceniu w Uniksie?
Odpowiedzi:
Aby zmienić uprawnienia do wpisu pliku lub katalogu nierekurencyjnie, użyj chmod
polecenia (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 -R
działa dobrze w niektórych przypadkach (np. chmod -R g-r
), Ale nie w przypadkach, w których chcesz zadzierać z -x
bitem, ponieważ działa na plikach i katalogach bez rozróżnienia.
644
lub że -x
w ogóle ustawia katalogi? Pytanie tylko stanowi, że chce zmienić uprawnienia, a nie w szczególności.
chmod -R go=u,go-w /dir
chmod
ma -R
flagę, 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.
chmod -R 444 somedir
katalog z plikami. Dostajesz, Permission denied
ponieważ flaga -x jest usuwana z katalogów i konieczne jest dalsze czytanie katalogu.
chmod -R <file permission> *
Ze strony podręcznika użytkownika chmod
:
-R, --recursive
change files and directories recursively
Użyj chmod
z -R
przełą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.