• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shell script zwecks Filesystem analyse

A

Anonymous

Gast
Hallo

ich habe einige Probleme bei meinem Script.

Auf meinem Server laufen oft die FIlesysteme voll,Um dann einen Produktionsstillstand zu vermeiden würde ich gerne ein Script schreiben dass mir:
- per df- k herausfindent welche filesysteme voll sind.
- mir dann denn vollständigen Pfad und dateigrößen von mehr als 30MB und das zugriffs bzw. erstelldatum nicht älter als 24h ist, auszugeben..

da im scripteln noch nicht so besonders Fit bin, bitte ich um Hilfe, wie ich am besten an diese Sache herangehe...

besten Dank schonmal im Vorraus!!!
 
OP
A

Anonymous

Gast
du wirst aber sehr viele Daten finden die größer als 30mb sind....
so viel sinn wird das nicht machen.

davon abgesehen wird es sehr viel performance in Anspruch nehemen wenn du z.b. ein
Code:
 find / - name core
laufen lässt...

Meine Erfahrung ist die, dass es immer der beste Weg ist, immer "von Hand" nach fehrerhatten daten zu suchen. Dann kann auch nichts passieren wenn Du irgendwas automatisiert gelöscht haben willst...
 
OP
A

Anonymous

Gast
Ich versuche mich mit dem ganz normalen Shell scripting. ( #!/bin/ksh) 8)

hab noch nicht besonders viel zusammen. Mein Problem ist im Moment, dass ich mit via df das entsprechende File system grepen kann, aber ich keine möglichkeit habe mir eine Liste des Systems (mit allen directories und supdirectories) anzeigen zu lassen. Gibt es überhaut einen solchen Befehl?

Wenn erst einmal die Fillist hätte könnte ich ja nach entsprechenden größen greppen lassen....

oder gehe ich das Problem schon ganz falsch an.... (wie gesagt, bin absoluter anfänger im bereich scripting...) :oops:
 

wenf

Hacker
bloob schrieb:
Hallo
- mir dann denn vollständigen Pfad und dateigrößen von mehr als 30MB und das zugriffs bzw. erstelldatum nicht älter als 24h ist, auszugeben..

schon mal
man find
versucht ?

Code:
find /home/user/ -size +30000k -mtime +30 -print
sucht im Ordner /home/user (mit Unterordner) nach dateien, welche größer als 30000kByte und älter als 30 Tage alt ist.
-print gibt einfach alle gefundenen Dateien mit Pfad zeilenweise aus.

das einzige Problem das jetzt noch besteht, ist das Zugriffsdatum - da muß ich noch grübeln ob und wenn, wie das geht
 

jado

Member
OK, das überlastete Filesystem/Partition kannst du also schon selektieren.

Mit "/usr/bin/du" kannst du dir die Nutzung von Verzeichnissen ausgeben lassen,
und mit "/usr/bin/find <start-verzeichnis> -exec ls -l {} \;" die einzelnen Dateien.

War es das, wonach du gesucht hast??
 
OP
A

Anonymous

Gast
suuuuper klasse...

das ist ablosut genau das was ich gesucht habe!!

Danke!!

das mit "exec" ist ja spitze... lässt sich auf alle befehle anwenden?
 
OP
A

Anonymous

Gast
@ wenf
Code: find /home/user/ -size +30000k -mtime +1 -print

Code:
mtime +1

gibt mir alle Daten aus die neuer als ein tag und gröer als 30MB sind....


thx to jado und wenf;
Damit habe ich die Lösung meines Probelms gefunden!
 
OP
A

Anonymous

Gast
mist; es muß natürlich minus heissen:

Code:
 find /home/user/ -size +30000k -mtime -1 -print

mtime -1 gibt alle daten neuer als ein tag aus
 
OP
A

Anonymous

Gast
lässt sich auf alle befehle anwenden?
ist nicht korrekt, du kannst an dieser stelle keine dateien löschen... der befehl rm funktioniert mit find nicht

stattdessen kannst du aber folgendes machen wenn du die direkt löschen willst:
Code:
find /home/user/ -size +30000k -mtime -30 -print | rm -
mit dem - sagst du rm er soll seine argumente aus der pipe nehmen, sollte an sich funktionieren, wenn nicht einfach noch mal melden
 
OP
A

Anonymous

Gast
naja ist ja doch auch bissl gefährlich wenn ich Dateinen einfach so löschen lasse.
Im Moment hab ich´s so gemacht, dass ich mir alle "großen" dateinen als ll in eine Liste erstellen lasse und dann selber mit dem editor die noch benötigten Daten lösche.
Der rest wird dann via script gelöscht.
for i in 'cat list'
do
rm
exit

und fertig...
 

sirzero

Newbie
Hi,

ich bin neu und über google auf diesen Thread gestossen.

Also ich hab vom Prinzip her ein ganz ähnliches Problem. Ich soll nen Script oder nen Programm schreiben was sämtliche Dateien auf unserem Fileserver auflistet (Dateiname, Dateityp, Dateigröße, CHMOD-Status, wann zu letzt angefasst, wem gehört sie, Pfad).

So könnte man ja alles in Form von nem Shell-Script schreiben mit den entsprechenden befehlen.
Nunwurde aber in diesem Thread auch schon erwähnt dass das sehr viel Performance in Anspruch nimmt und wenn ich mir überlege bei einem Terrabyte Daten, wielang da wohl nen find dauern wird.

Ja nun würde mich interessieren, ob nicht vielleicht voneuch jemand eine bessere Idee hat wie dieses Problem lösen könnte?

Ich hab mir vielleicht überlegt wirklich das komplette Filesystem einmal einlesen und vielleicht in eine Datenbank zu schreiben womit man dann vielleicht weiterarbeiten kann? Der Gedanke kam mir, da ja der Locate Befehl ja eigentlich auch innerhalb einer Datenbank nach dem File sucht und es daher relativ schnell ist oder täusch ich mich da jetzt?

Also ich wär euch über jeden Tipp oder Hinweis dankbar!!!

@bloob

Sag mal könntest du mir vielleicht mal dein Script schicken?
 
Oben