User since
2003-08-04
2536
Artikel
ModeratorIn
gibt's eigentlich eine einfache möglichkeit auf einem ftpserver herauszufinden, wieviel platz zur verfügung steht und wieviel davon noch frei ist?
limitierungen könnten ja sein: plattenplatz oder quota. aber wie weiß man, ohne auf eine fehlermeldung zu warten, ob der aktuelle hochzuladene kram noch draufpasst?
User since
2004-02-19
1750
Artikel
BenutzerIn
afaik nicht direkt, aber viele ftp-server erlauben das ausführen von komandos in der lokalen shell.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
User since
2003-08-04
2536
Artikel
ModeratorIn
mh, wie würde ich denn lokale kommandos per ftp ausführen?
User since
2005-01-17
14748
Artikel
Admin1
Nein.
df wird ja garantiert nicht ausgeführt. Meist nur ls und chmod.
Manche Befehle kannst du mit SITE ausführen, aber wie das auf deinem ftp-Server geht, kA.\n\n
<!--EDIT|GwenDragon|1143045409-->
User since
2003-08-04
2536
Artikel
ModeratorIn
mh, cool, dann werde ich wohl nicht drum herum kommen, rekursiv zumindest den aktuell belegten platz auslesen zu lassen.
laut meinem kunden hat sich der support-mitarbeiter (von schlund & partner, es geht um den backup-space für rootserver) dahingehend geäußert, dass das mit
Filesys::DiskFree ginge - allerdings finde ich keinen hinweis darauf ;(
User since
2003-11-28
3645
Artikel
ModeratorIn
Bei FTP-Servern hat man allgemein nicht die Möglichkeit, eigene Programme ausführen zu lassen. Bei HTTP-Servern kann man das, typischerweise als CGI. Du könntest also versuchen, beide Protokolle zu verheiraten, oder gleich alles über HTTP (evtl. auch WebDAV?) abzudecken. Oder du findest einen FTP-Server, der (über Hooks?) eigene Programme ausführen kann.
User since
2003-08-04
2536
Artikel
ModeratorIn
nein, das problem ist ja leider, dass zu dem root-server bei schlund ein schöner backup-space gehört, der per ftp erreichbar ist. darauf soll nun ein backup laufen - soweit kein thema. allerdings ist der backupspace kleiner als die platte des servers und da der kunde fröhlich seine festplatte vollknallt, reicht der platz nicht. natürlich spart man mit tgzs einiges, aber es wäre ja trotzdem möglich, dass der platz vollläuft - dann sollten ev. alte backups gelöscht werden. da der ftp-backup-server nicht unter meiner kontrolle steht, habe ich daher leider keine möglichkeit, irgendwelche http-sachen laufen zu lassen oder den ftpd auszutauschen ;(
naja, da ich die gesamtkapazität theoretisch kenne, brauche ich nun nur noch rekursiv zu checken, welche dateien drauf sind (was in diesem fall kein problem ist, weil's nur wenige verzeichnisse mit ein paar dutzend dateien sind). aber die antwort von dem techniker machte mich stutzig, denn ich war auch immer der meinung, dass das vom ftp-protocol prinzipiell erst mal nicht vorgesehen wird. naja. aus fehlern lernt man - und da die uns sämtliche aktionen im kundenmenü gesperrt haben, weil sie das image, das wir damals zum installieren genutzt haben, nicht mehr haben erklärt ja einiges.
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
Hast du es denn mal mit einem SITE-Befehl versucht, wie von GwenDragon vorgeschlagen? Du könntest per Kommandozeilen-FTP nach dem Einloggen mit so etwas wie "quote help" testen, ob und welche Remote-Befehle noch existieren.
User since
2003-08-04
2536
Artikel
ModeratorIn
ja, das habe ich, aber da ist mir leider nur
Quoteftp> quote SITE help
214 CHMOD UMASK HELP
erlaubt ;(
User since
2003-08-04
2536
Artikel
ModeratorIn
mein jetziges script (uh uh, code ahead, bitte nur freundlich kritisieren ;( )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/local/bin/perl
use strict;
use warnings;
use Net::FTP;
my $ftphost = $ARGV[0] || '';
my $ftpuser = $ARGV[1] || '';
my $ftppass = $ARGV[2] || '';
my $ftpdir = $ARGV[3] || '';
my $ftp = Net::FTP->new($ftphost, Debug => 0) or die 'Cannot connect to ' . $ftphost . ': ' . $@;
$ftp->login($ftpuser, $ftppass) or die 'Cannot login ' . $ftp->message;
my @directories = ('');
my $totalsize = 0;
my $verbose = 0;
while(defined(my $directory = shift @directories))
{
print "checking " . $ftpdir . $directory . "\n" if($verbose);
if(my $listing = $ftp->dir($ftpdir . $directory))
{
for my $element (@$listing)
{
if(my ($permissions, $trash, $user, $group, $size, $month, $mday, $year, $name) = split(/\s+/, $element, 9))
{
if(substr($permissions, 0, 1) eq 'd')
{
push @directories, $directory . '/' . $name;
print "adding $directory/$name to list\n" if($verbose);
}
else
{
$totalsize += $size;
}
}
}
}
else
{
die 'Cannot read ' . $ftpdir . $directory . ': ' . $ftp->message;
}
}
$ftp->quit;
if($verbose)
{
print "total size is: " . $totalsize . "\n" if($verbose);
}
else
{
print $totalsize;
}
aufruf als ./filename.pl ftpserver ftpuser ftppassword [ftpverzeichnis falls man nur die gesamtgröße eines verzeichnisses haben will.]