説明しているのは、ディスク名ではなく、ルート(/)にマウントされたパーティションを表すブロックデバイスのデバイス名です。通常のコンピュータでは通常、/dev/sdXN
または/dev/hdXN
のようになります.Xはディスク番号です(プライマリハードドライブは通常A、セカンダリはBなど)。Nはそのデバイスのパーティション番号です。
あなたがUNIXシステムで常時稼働している場合は、すべてのマウントされたパーティションを一覧表示する/ etc/mtabファイル、またはほとんど同じものである特殊ファイル/proc/mounts
を読むことができます。後でそれを解析して、必要なものを見つけて、そこからデバイス名を取得する必要があります。
代わりに、あなただけのプロセスとしてdf
を実行し、perlのにその入力を取得し、
open(DF, "df|");
@mount_points = <DF>;
close(DF);
のようなものと、あなたが必要なものを見つけるために、データを反復処理することができます。私はあなたのために働くだろう私の頭の上のモジュールを認識していませんが、コードはとにかく私にとってはとても簡単です。
P.S. Max OS XはBSDの派生物であるが、同じファイル構造を持たないので、このアプローチはうまくいかないことに注意してください。 Mac OS Xでは、ファイル/etc/fstab.hd
を読むことができます。このファイルには、同様の情報が含まれていますが、フォーマットは少し異なります。リストにクォータモジュールを使用して、ボーナスとして
use Quota;
Quota::setmntent();
while (my ($dev, $path, $type, $opts) = Quota::getmntent()) {
print "The root device is $dev.\n" if $path eq "/";
}
Quota::endmntent();
:
彼らは動作しますが、ここでいくつかの人々は私をないことをお勧めもはやサポートされていないモジュールを使用し、多くのバグが報告されています。 – Andrew
まず、dfはディスク名を返しません。マウントされたファイルシステムのマウントポイントを報告します。 grep、awk、パイプラインを使ってカットするのはプロセスの無駄です! AwkはPerlのように、あなたが見せるすべてのことを行うことができます。 – JRFerguson
だからこそ私はPerlで同じことをする方法を学ぼうとしています) – Andrew