hetticom Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Hallo zusammen, hab den Auftrag bekommen, ein Perl-Skript zu schreiben, das mithilfe einer Config-Datei prüft, ob die Rechte richtig gesetzt sind und der Owner übereinstimmt. Bsp: Config-Datei: /PfadzurDatei/Dateiname.txt;Benutzername;755 Bin jetzt soweit, dass ich unter Unix mithilfe von ls -la $dateiname | awk '{print $3}' den Owner ausgegeben bekomme. Kenne keine Perl-Bordmittel, mit denen ich das realisieren könnte. Jetzt bekomm ichs aber nicht hin, das in ner Variable in Perl zu speichern. ein simples ">" bringt mich leider nicht weiter. Die gleiche Methode wollte ich auch für die Rechte nutzen, um dann jeweils nach "r, w, x" zu prüfen und entsprechend aufzuaddieren (4, 2, 1). Häng aber absolut fest. Habt ihr ne Idee? Danke schon mal! Chris Zitieren
P3AC3MAK3R Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Du mußt also zwingend ein Perl-Skript schreiben und darfst Dich nicht auf ein Shellskript beschränken? Zitieren
hetticom Geschrieben 26. Juli 2007 Autor Geschrieben 26. Juli 2007 Naja, ein Shellskript könnte evtl auch gehen, aber da müsste ich mich halt reinarbeiten. Hab bisher schon n paar Perlskripte geschrieben und war auch auf nem Seminar deswegen. Wenns aber nicht geht mit Perl oder zu umständlich ist, dann schlag ich meinem Kollegen vor, ob ich das nicht mit der Shell machen kann. Zitieren
mtn Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Hallo, ich denke unter stat - perldoc.perl.org findest du was du suchst. Viele Grüße Zitieren
lordy Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Ja, stat ist die richtige Lösung für Perl. Zitieren
P3AC3MAK3R Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Mit der Zeile VARIABLE=$(BEFEHL) kannst Du in einem Shellskript die Ausgabe des Befehls BEFEHL der Variablen VARIABLE zuweisen. Zwei Variablen kannst Du mit dem Test-Kommando auf Gleichheit prüfen. Zitieren
hetticom Geschrieben 26. Juli 2007 Autor Geschrieben 26. Juli 2007 ok, stat bringt mich schon mal n Stück weiter. Damit kann ich recht einfach die Rechte prüfen. Danke schon mal dafür! Problem weiterhin: Der Owner. stat zeigt mit die User-ID an, ich möchte/soll aber nach dem Namen prüfen. Und ich finde es ziemlich umständlich, den Namen in der Config-Datei unter Unix mit "id <Username>" in die uid umzuwandeln und dann zu vergleichen. Habt ihr da ne einfachere Lösung? Zitieren
lordy Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Dafür gibt es die getpw*() Funktionen: getpwnam - get passwd record given user login name Zitieren
hetticom Geschrieben 26. Juli 2007 Autor Geschrieben 26. Juli 2007 ok, super, das klappt auch! Ihr seid echt klasse Kann mir jemand die Syntax hier erklären? Ich steig da nicht dahinter :confused: Mach ja erst seit Mai Perl ... $mode = (stat($filename))[2]; printf "Permissions are %04o\n", $mode & 07777; Das gibt mir dann z.B. "0644" aus. Wie kann ich diese Ausgabe denn jetzt in ner Variablen speichern? Und was bewirkt dieses "& 07777"? Zitieren
mtn Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Hm... (s)printf war auch noch nie meine Stärke aber ich versuchs mal... printf "Permissions are %04o\n", $mode & 07777; # das %04o steht dafür das eine Zahl ausgegeben werden sollwelche bis zu 4 führende 0en haben kann (04) und auf Octal umgerechnet wird (o). # $mode enthält den Wert der vorher so definiert ausgeben werden soll # 07777 ist der zulässigste Höchstwert der ausgegeben werden darf (rat ich jetzt mal, genau weiß ichs nicht) Und in einer Variable speichern kannst du folgendermaßen: $permission = sprintf "%04o", $mode & 07777; Gruß Zitieren
lupo49 Geschrieben 26. Juli 2007 Geschrieben 26. Juli 2007 Und in einer Variable speichern kannst du folgendermaßen: $permission = sprintf "%04o", $mode & 07777; Gruß Das sieht eher so aus, als wenn der Wert von $mode bitweise mit 07777 (UND-)verknuepft wird. Das was in "" steht, ist eine Art Formatierung fuer den Wert ($mode) der ausgegeben werden soll. Zitieren
hetticom Geschrieben 27. Juli 2007 Autor Geschrieben 27. Juli 2007 lupo49 hat Recht, das is ne bitweise UND-Verknüpfung. Wie das genau funktioniert weiß ich zwar immer noch nicht (sollte ich das als Fi-Si im 2. Jahr *kopfkratz*), aber das lass ich mir noch erklären. Oder kann das einer von euch zufällig? ;-) Jedenfalls funktioniert das Skript wunderbar. Vielen Dank an euch für die tatkräftige Hilfe! Zitieren
lupo49 Geschrieben 27. Juli 2007 Geschrieben 27. Juli 2007 lupo49 hat Recht, das is ne bitweise UND-Verknüpfung. Wie das genau funktioniert weiß ich zwar immer noch nicht (sollte ich das als Fi-Si im 2. Jahr *kopfkratz*), aber das lass ich mir noch erklären. Oder kann das einer von euch zufällig? ;-) Jedenfalls funktioniert das Skript wunderbar. Vielen Dank an euch für die tatkräftige Hilfe! Ich hoffe das stimmst so (:beagolisc): Beispiel: $mode hat den Wert 27 (00011011), 07777 = 1111001100001 0000000011011 1111001100001 ------------------- 0000000000001 (UND-verknuepft) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.