WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Linux, UNIX, Open Source (http://www.wcm.at/forum/forumdisplay.php?f=13)
-   -   wieder eine bash Script Frage (http://www.wcm.at/forum/showthread.php?t=230560)

keksi77 13.09.2008 08:15

wieder eine bash Script Frage
 
Hallo,

im Home Verzeichnis hat jeder Benutzer ein eigenes Verzeichnis bei uns, leider sind in den Benutzerverzeichnissen, die Rechte und der Owner etwas durch einander gekommen.

wie kann ein script aussehen, das mir von jedem benutzerverzeichnis im home, den owner nimmt und dann rekursiv alle dateien in benutzerverzeichnis den owner neu setzt?

Danke Horst

buntstift 15.09.2008 13:07

hm ... ich weiß nicht :D so schwer ist das ja nicht ...

gut wär mal ein listing des /home verzeichnisses

machst du ls -l /home

Code:

drwxr-xr-x  2 ftp      nogroup  4096 2008-08-14 10:32 ftp
sollten dann ein paar solche einträge kommen. du weißt ja, die spalten 3 und 4 (hier ftp und nogroup) sind user und gruppe, denen das verzeichnis gehört.

diese spalten kannst mit dem befehl awk extrahieren (die syntax is a bissl schwer, schau dir mal die manpage an und wennst net weiter weißt dann gerne ;) )

brauchen wirst auch noch eine foreach schleife drumherum, weil du den befehl ja für jedes homeverzeichnis den user extrahieren willst.

und in der foreach machst dann das oben erwähne awk um aus der 3. spalte den usernamen zu extrahieren (gruppe nehm ich mal an wird gleich dem usernamen sein?).

dann setzt noch die zugriffsrechte mit chmod -R wie du sie haben willst. das -R steht natürlich für rekursiv, also alle unterverzeichnisse und -dateien. das gleiche gibts auch für chown.

hoff ich hab dir geholfen.
ein fertiges skript ... naja da müsst ich jetzt auch ein bissl arbeiten. aber man merkt sichs ja besser wenn mans selbst erarbeitet ;)

CM²S 12.10.2008 23:01

hello,

die Verzeichisse gehören normalerweise entweder

username username oder username , usergroup

sudo bash oder su -
cd /home

for username in `ls -1` ; do chown -R $username $username/; done

oder wenn die Gruppe auch falsch is

for username in `ls -1` ; do chown -R $username.$username $username/; done



das wars ...


ciao
CM²S

colossus 13.10.2008 21:30

Zitat:

Zitat von CM²S (Beitrag 2316561)
for username in `ls -1` ; do chown -R $username.$username $username/; done

STOP! You are doing it wrong!

CM²S 13.10.2008 22:12

wenn...
 
ok wiki gelesen

Bitte welcher trottel macht spaces im Usernamen , das können eigentlich nur Windowsuser sein !??!!??!

aber du hast recht .... a bisserl aufpassen muss ma schon....

# test
cd /home
for i in "`ls -1`"; do echo "$i"; done
# echt
for i in "`ls -1`"; do chown -R "$i.$i" "$i/"; done

und das mit dem "" funkt und das is das Ziel, schönen code schreib ich wenn ich mehr Zeit habe

aber du kannst ja den richtigen code posten !?!?

ciao
CM²S

colossus 14.10.2008 09:00

Username und Name des Homedirectories eines Users muessen nicht koinzidieren; das ist eine optionale Konvention. Natuerlich sind Leerzeichen in GNU und UNIX ueberall dort, wo es geht, tunlichst zu vermeiden - aber better safe than sorry, oder? Nennt sich auch defensive programming - es ist generell besser, vom worst case auszugehen, und auch den zu ueberwinden, als vielleicht 98% aller Anwendungsfaelle abzudecken, aber dann etwas Wichtiges phaenomenal zu verhauen.

Ad Topic: `ls -1` sollte durch * ersetzt werden. Spart Tipparbeit, und ist zudem noch richtig.

Don Manuel 14.10.2008 09:31

Werter Colossus, Du erfreust Dich ja am aufwändigeren Formulieren und dürftest @topic hier bisher der Kundigste sein. Warum befleissigst Du Dich dann nicht des geringen Zeilenumfanges des Miniscripts und beschränkst Dich lediglich auf Korrekturen anderer, die sich offensichtlich ungleich mehr Mühe geben müssen, um zum gewünschten Resultat zu kommen? Hat man es Dir auch so beigebracht?

colossus 14.10.2008 09:39

Ich bin hier niemandem Rechenschaft schuldig; was ich will und was ich tue ist allein meine Sache. Mein Wissen ist selbst angeeignet; ich habe mir den Luxus, in gut besuchten Foren nach Loesungen fuer die Mikrowelle zu fragen nicht gegoennt.

Nichtsdestrotrotz, mein Vorschlag waere:
Code:

for i in /home/*;
do chown --no-dereference -c -R "$(stat --format=%U:%G "${i}")" "${i}";
done

Edith schreit noch rueber: das kleine Script setzt Owner _und_ Group-owner. Wenn man wirklich nur Owner moechte, muss man den formatstring fuer `stat` entsprechend aendern, und schreibt statt %U:%G nur %U.

Don Manuel 14.10.2008 09:50

Na siehst Du, ist doch viel hilfreicher so. Ich bin mit der Syntax auch nicht so sattelfest, sonst hätte ich's natürlich auch gepostet.
Natürlich bist Du niemandem Rechenschaft schuldig, meine Kritik zielt auf den höheren Informationsgehalt des Forums sowie auch auf Dein Verhalten ab, allerdings kannst dadurch nur Du Dank und Anerkennung gewinnen, das wäre neben höherem Informationsgehalt auch noch ein freundlicheres Umfeld genau für Dich ;)

CM²S 14.10.2008 16:56

helo,

ich sehe , ich kann noch viel lernen !!

danke für die Aufklärung, aber moderne Linux Distributionen lassen keine Blanks in Usernames zu .... ;-)

aber es ist gut alternativen zu sehen...

und....

es funkt, und gibt sogar feedback um Änderungen wieder zürück nehmen zu können...

Danke

ciao
CM²S


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag