PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ein denkanstoss ist erwünscht



rabenkind
19-07-2002, 13:38
hi to all

habe folgendes script geschrieben um auf meinem apache-testserver die ausführungsrechte regelmäßig zu ändern, weil hier auch dateien von win-clients gespeichert werden, die zb. htmldateien mit 0744 speichern. diese sollen aber 0644 sein, usw.

__________________________________________________ ____

#! /bin/sh
#
# Verzeichnisrechte aendern mit chmod
#
chmod 0755 $(find /usr/local/httpd/htdocs/selfservix -name '*')
chmod 0644 $(find /usr/local/httpd/htdocs/selfservix -name '*.*')
#
chmod 0755 $(find /usr/local/httpd/htdocs/cugel -name '*')
chmod 0644 $(find /usr/local/httpd/htdocs/cugel -name '*.*')
#
chmod 0755 $(find /usr/local/httpd/htdocs/sternberatung -name '*')
chmod 0644 $(find /usr/local/httpd/htdocs/sternberatung -name '*.*')


das ganze ist aber ein wenig unflexibel bzw aufgebläht, wenn ein neues verzeichnis hinzu kommt muss ich es per hand eintragen. da hier aber auch noch verzeichnisse liegen die anderen usern gehoeren (insgesamt 3 user) kann ich ja nicht einfach htdocs als wurzel nehmen.
wie kann ich das etwas einfacher kürzer machen, bin dankbar für nen tip,

greetz rabenkind :))

tkortkamp
19-07-2002, 14:54
Hier ein Perl-Script, dass ich so ähnlich selber ab und zu mal benutze:


#!/usr/bin/perl

open(PASSWD, '/etc/passwd');
@pass = <PASSWD>;
$pfad = '/usr/local/httpd/htdocs/';

for($i = 0; $i < $#pass; $i++)
{
chomp $pass[$i];
($name, $blarg, $uid) = split(/:/, $pass[$i], 4);
#Ändere die Rechte von $pfad Für alle user mit einer UserID höher als 100
if($uid > 100)
{
print "Changing permission for user $name in $pfad...\n";
system("chmod -Rv 0755 $pfad$name");
system("chmod -Rv 0644 $pfad$name");
}
}
close(PASSWD);


Das ist IMO sehr flexibel und richtet sich nach der User-ID. Wenn diese über 100 ist, dann fängt er an die Rechte für alle Dateien in $pfad zu änderen.

c ya,
Tobias

fork
19-07-2002, 16:33
BASE="/usr/local/httpd/htdocs/"
chmod 0755 $(find $BASE -user $USER -name '*')
chmod 0644 $(find $BASE -user $USER -name '*.*')


Aber wieso die Unterscheidung * und *.* ?Dateien/Verzeichnisse(dafür gibt's -type d/-type f)?

rabenkind
19-07-2002, 18:35
hi to all

erstmal danke euch beiden, für die ideen.

@tkortkamp
mit perl will ich nicht weil ich gerade scripten in der bash lernen möchte. aber die idee mit den user ids ist gut.

jetzt habe ich folgendes gemacht läuft auch,

BASE="/home/michael/texte/"
chmod 0755 $(find $BASE -type d -user $USER -name '*')
chmod 0644 $(find $BASE -type f -user $USER -name '*')

aber wenn ich vorher noch USER="michael,thor,herbert"
schreibe dann bricht das script ab

da ich im moment kein geld für ein gutes buch habe kennt jemand vielleicht eine gute einführung in bashscripting?

greetz rabenkind :))

fork
19-07-2002, 20:32
http://www.linuxfibel.de/bashprog.htm