find und grep mit php

buzzom

Mitglied
Moin die Herren und Damen habe ein Problem mit find bzw. grep.
Und zwar will ich folgendee Linux Suche mit PHP umsetzen.

find secure/save/ -type f -print0 | xargs -0 grep -wl 'std/shells/human' | wc -l

Heraus kommt dabei eine Zahl, diese will ich als Variable haben, um sie später ausgeben zu können.

Kann man das irgendwie mit php machen? Wenn nicht welche anderen Möglichkeiten habe ich? Perl?

Ich danke
Buzzi
 
Also hab jetzt folgenden kurzen Code:
Code:
<?
  $x=exec("find /mud/mudlib/secure/save/ -type f -print0 | xargs -0 grep -wl 'std/shells/elf' | wc -l");
  echo $x;
?>

Ausgabe ist dann: 29

Laut Shell Suche mit gleichem Befehl müsste aber 141 rauskommen.
Wo ist mein Fehler?

Danke
Buzzi
 
Hmm also das php file läuft über user web1 und den shell Befehl oben, habe ich auch über web1 ausgeführt. Ausserdem haben die Dateien, die durchsucht werden, alle die gleichen Rechte. Daher dürfte es nicht sein, dass nur manche durchsucht werden und andere nicht.
 
Zuletzt bearbeitet:
Hm, dann nimm doch mal system() anstatt exec() und lass den wc-Befehl weg. Dann kannst du ja mal die Ergebnislisten zwischen Server- und Terminal-Aufruf vergleichen und gucken was fehlt. Das wird dir dann hoffentlich weitere Anhaltspunkte liefern.
 
Also ohne wc kommt bei exec nur die letzte datei, die den Inhalt 'std/shells/human' hat. Bei system werden alle datein aufgelistet, die 'std/shells/human' in sich haben. Also von A bis Z. Uber die Shell werden auch ohne wc alle Datein aufgelistet, die 'std/shells/human' in sich haben. Mein php file soll aber ausgeben wieviele Datein 'std/shells/human' in sich haben. Mit dem Paramenter | wc -l wird das ja auch auf der Shell ausgegeben. Verstehe nicht warum dann nicht mit exec oder system. Nach meinem Verständnise gibt es jetzt zwei Möglichkeiten: 1. den Wert in einer Datei speichern und wieder auslesen. Aber das wollte ich eigentlich nicht unbedingt machen, wenn es nicht direkt geht. 2: Bei system() alle ausgespuckten Dateien in ein Array packen und zählen.

Oder gibts doch noch ne einfachere Lösung? Wenn nicht, wie kann ich das mit nem Array am besten lösen?

Danke wieder
Buzzi
 
Hallo,

hier eine kleine Einführung in CONFIXX-Theorie - gell du hast Confixx ;)

Wenn du dich als root-User über die Konsole per SSH auf deinen Server einloggst dann hast du logischerweise ROOT-Rechte.
Wenn du über dein Script kommst dann kommt das Script mit der UID (heisst das so - ich bin nicht sicher) web1 - der Web1 hat aber auf dem Server nicht die Rechte wie sie Root hat - wäre ja auch furchtbar schlimm.

So was könntest du jetzt machen - ich würde vorschlagen - du loggst dich auf deinem Server via SSH ein und vergibst für das PHP-Script einen anderen Benutzer und zwar so:
Code:
chown root:root /srv/www/htdocs/web1/html/deinsscript.php
Und Enter und schon ist der neue Besitzer deines Scriptes nicht mehr web1 mit der Gruppe ftponly sondern root mit der Gruppe root.
Nachteil du kannst die Datei per FTP nicht mehr bearbeiten und auch nicht löschen da diese jetzt ja root und nicht mehr web1 gehört. Das ganze kann man natürlich auch mit dem obigen Befehl wieder rückgängig machen in dem man statt root:root - in deinem Fall web1:ftponly eingibt.

Jetzt sollte das Script mit den Rechten von Root ausgeführt werden und deine Ergebnisse stimmt.

Ob das Sicher ist - NEIN - wenn dein Script einen Fehler hat dann könnte man evtl usw. usw. usw. das ist aber ein anderes Thema.
 
Zurück