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


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.


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!


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.


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