`du`がうまくいかない

[上に] [前に] [次に]
ぜむ 1999/03/31(水) 04:37:47
telnetが許可されていないISPでホームページの量を
調べるためにPerlで簡単に表示できないかと思ってい
ろいろとやっています。

しかし、
@du = `du`;
のようにしても、
$du = `du`
のようにしても
@duや$duには全く何も入ってくれません。

また、pwdやlsも入ってくれませんでした。

しかしdateやhostnameでは、ちゃんとコマンドの結果
が入ってくれます。

いろいろ調べ回ったのですが、さっぱり原因が掴め
ません。

CGIはnobodyで走っているようです。

この現象の原因や、CGIでファイル量を取る方法など、
ご教示いただければと思います。

よろしくお願いします。

B-Cus 1999/03/31(水) 07:03:55
`du 2>&1` で、du: not found となれば、パスが通ってません。
/usr/bin/du などとフルパスで指定してください。

ぜむ 1999/03/31(水) 14:48:38
書くのを忘れていました。

`du 2>&1`
は、まだ試していませんが、

@du = `usr/bin/du/`
といったふうに duにパスを通しても@duには何も
入りませんでした。

とりあえず`du 2>&1`をやってみます。

ぜむ 1999/03/31(水) 14:49:53
上の記事の訂正です。

@du = `/usr/bin/du`

です。

ぜむ 1999/03/31(水) 15:49:19
`du 2>&1`
でprintしてみたら、
Permission denied
になっちゃってました。
nobodyでCGIが動いているからでしょうか。

これではもう`du`ではどうしようもなさそうですが、
duが使えないとなると、特定のディレクトリ下(サ
ブディレクトリも含)のファイル量をCGIで取るに
は、どうすればよいのでしょうか。

よい知恵をお貸しください。

ふじ [HomePage] 1999/03/31(水) 16:16:40
>duが使えないとなると、特定のディレクトリ下(サ
>ブディレクトリも含)のファイル量をCGIで取るに
>は、どうすればよいのでしょうか。

強引かも知れませんが、以下のような再帰関数を書けば・・・
・引数として渡されたディレクトリを開く。(opendir)
・開いたディレクトリのファイル一覧を読んで(readdir)
・一覧の要素がディレクトリでなければ -s でサイズを取得
・ディレクトリなら、そのディレクトリ名を引数として、自分自身を呼ぶ
というような。
#絶対もっと簡単な方法がある気がする(^^;

mo [E-Mail] 1999/03/31(水) 16:35:16
require "find.pl"
&find('directory');
...
sub wanted { ... }
で、ディレクトリの中を再帰的に辿れます。
# すみません、いま、仕事中で忙しいので、詳細は本か何か、
# あるいは perl ライブラリの中にある find.pl の中身を読んで下さい。

ふじ [HomePage] 1999/03/31(水) 16:49:56
require('find.pl');
&find(DIRNAME);
print $size;

sub wanted{
$size += -s $name;
}

これでOK?
便利なものがあるんですね。勉強になります。

ぜむ 1999/04/01(木) 01:25:27
[[解決]]
find.pl使ってなんとかなりそうです。
ありがとうございました。

ただ読み込みパーミッションを立ててないディレクトリ
は読めないようですね。

そのあたりはやはりどうしようもないのでしょうか。

[上に] [前に] [次に]