Zum Inhalt springen

[perl] owner einer Datei unter Unix rausfinden


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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"?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...