Skopiuj uprawnienia właściciela pliku do uprawnień grupy

25

Jak mogę skopiować uprawnienia użytkownika / właściciela pliku do uprawnień grupy?

Na przykład, jeśli uprawnienia wynoszą 755, chcę, aby stały się 775.

Wyjaśnienie: 755 -> 775 123 -> 113 abc -> aac

Bonus, jeśli mogę to zrobić rekurencyjnie dla wszystkich plików w katalogu.

(To znaczy, dla każdego pliku uprawnienia właściciela są kopiowane do uprawnień grupy. Każdy plik może mieć inne uprawnienia).

Annan
źródło
Nie jestem pewien, czy to rozumiem. Chcesz zmienić uprawnienia do katalogu / plików, aby uprawnienie grupy było jak właściciel? Jeśli tak, to po prostu pobaw się chmod. Mogę pokazać ci wyraźniejszy przykład w mojej odpowiedzi, jeśli chcesz.
Anarko_Bizounours
W twojej odpowiedzi zmienia on wszystkie pliki na 775. Co zrobić, jeśli jeden z plików pierwotnie ma uprawnienia 123? Następnie należy go zmienić na 113, a nie 775. Pozwolenie, którego użyłem w pytaniu (755) jest tylko przykładem, faktyczne pozwolenie może być dowolne. Chcę to zrobić programowo.
Annan
liczba po chmod to tylko numeryczne pozwolenie. Jeśli wykonasz ls -l i otrzymasz 452 jako pozwolenie, to po prostu do chmod 442 / you_directory /. Wszystko zostało wyjaśnione (całkiem dobrze) na stronie wikipedii, którą zamieściłem w odpowiedzi na moją odpowiedź.
Anarko_Bizounours
wydaje się, że jest to duplikat pytania serverfault.com/questions/241082/…
ShoeLace,

Odpowiedzi:

54

możesz użyć, g=uaby perms grupy były takie same jak perms użytkownika

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

i rekurencyjnie

chmod -R g=u *

lub dla niektórych plikówspec

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

strona chmod jest twoim przyjacielem.

user9517 obsługuje GoFundMonica
źródło
dobry sposób na zrobienie tego! Zapomniałem tej sztuczki za każdym razem xD
Anarko_Bizounours
Nigdy nie słyszałem o tej sztuczce! Przydatny.
skinp
Ta g=usztuczka pozwoliła mi zaoszczędzić wiele godzin żmudnego zarządzania. Tam idzie +1 ;-)
Edurne Pascual
Miałem kilka plików należących do mojego użytkownika, które chciałem udostępnić wszystkim użytkownikom. więc zrobiłemchmod -R ag=u ${path_to_directory}
Trevor Boyd Smith
2

Jak powiedzieli ludzie, zmiana uprawnień do plików może być niebezpieczna. Z wielką mocą wiąże się wielka odpowiedzialność i wszystkie shizy. Oto moja odpowiedź:

plik / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

Przykładowe użycie:

find . -exec otog {} \;

Używa statystyki, aby uzyskać uprawnienia numeryczne, używa chmod do zmiany uprawnień.

PS: Proszę zobaczyć odpowiedź Iaina na lepszy sposób na zrobienie tego!

Annan
źródło
1
Czy nie powinno to być $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}?
minaev
Tak, masz rację. Dziwnie to też działało po mojej myśli.
Annan
Ktoś proszę wyjaśnić opinię?
Annan
Nie ja, ale chciałbym to zrekompensować. To dobre rozwiązanie, które działa.
minaev
1
Powiedziałbym, że bezpieczniej jest używać niebezpiecznych poleceń w skryptach niż ręcznie. W dobrze przetestowanych skryptach to znaczy :). Z drugiej strony chmodjest daleki od bycia naprawdę, bardzo niebezpiecznym poleceniem. W porównaniu do rm, mam na myśli, rsync --deletelub niektórych innych.
minaev
1

Przede wszystkim musisz wymienić swoje prawo.

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

aby przetłumaczyć wynik na uprawnienia numeryczne, użyj tego: R = 4, W = 2, X = 1.

Tak więc w tym pliku 2 uprawnienia wynoszą 755.

Po uzyskaniu prawa musisz użyć polecenia chmod, aby zmienić prawo tak, jak chcesz:

chmod 775 /your_directory/

To polecenie zmieni tylko prawo do katalogu, ale nie do pliku w środku.

Jeśli chcesz również zmienić prawe wnętrze, wykonaj następujące polecenie:

chmod 775 /your_directory/ -fR

-FR wymusi rekurencyjność. (użyj go tylko wtedy, gdy masz pewność, że chcesz zastosować, a plik w katalogu).

Jeśli chcesz tylko zmienić prawo do pliku 1, to:

chmod 775 /your_directory/file1

I tak właśnie ciasteczka się kruszą!

/! \ Uważaj, niewłaściwe użycie tego polecenia może zniszczyć wszystkie uprawnienia systemu operacyjnego i spowodować jego nieprawidłowe działanie. /! \

ps: spójrz tam, aby uzyskać więcej informacji na temat chmod.

Mam nadzieję, że to ci pomoże.

Anarko_Bizounours
źródło
Dodałem trochę wyjaśnienia do pytania. Pliki mogą nie mieć tych samych uprawnień właściciela, więc jeśli chmod ma być używany, musi istnieć sposób na wyodrębnienie uprawnień właściciela przed przekazaniem go do chmod?
Annan
to trudne, ale polecenie ls -l musi dać ci pozwolenie, ale będzie miało taką postać -rw-rw-r--. Problem polega na tym, że NIE WOLNO używać skryptu do pracy z chmod! najpierw musisz uzyskać wszystkie uprawnienia z pliku. Następnie chmod, aby mieć dobre prawo do grupy. Zmienię swoją odpowiedź, aby pokazać przykład.
Anarko_Bizounours