現在のディレクトリのマウント情報


20

私が行うことができdf .、現在のディレクトリがであることをマウント上の情報の一部を取得するには、と私はから必要なすべての情報を取得することができmountますが、多くの情報(他のマウントに関する情報)を取得します。私はそれを把握することができますが、より良い方法があるかどうか疑問に思っています。

いくつかのコマンドがありmountinfo、このようなmountinfo .私が欲しい情報提供します(のようなdf .、しかし、情報をmount提供しますが。)


Debian Gnu + Linuxを使用しています。


1
statコマンドも使用できると思います。ただし、%mシステムのバージョンでマウントポイントを提供するオプションがサポートされているかどうかはわかりません。システムをチェックインしましたが、マウントポイントが返されないようです。
ラメシュ

1
@ Ramesh、Yes stat "--printf=%m\n" .は、現在のディレクトリが存在するファイルシステムのマウントポイントを取得します。したがって、いくつかの答えを簡略化できます。ありがとう。
ctrl-alt-delor

回答:


18

次のようなものが欲しいと思います:

findmnt -T .

オプションを使用する場合

-T、-ターゲットパス
パスがマウントポイントファイルまたはディレクトリではない場合、findmnt逆の順序でパス要素をチェックしてマウントポイントを取得します。を介して特定のフィールドのみを印刷できます-o, --output [list]。使用可能なフィールドのリストを
参照findmnt --helpしてください。


または、次を実行できます。

(until findmnt . ; do cd .. ; done)

実行中の問題は、すべてのパスが何か他のものに関連しているため、ツリーをたどるだけです。毎回。

findmntはutil-linuxパッケージのメンバーであり、数年前から存在しています。今では、ディストリビューションに関係なく、mountツールがあればLinuxマシンにすでにインストールされているはずです。

man mount | grep findmnt -B1 -m1
For  more robust and customizable output use
findmnt(8),  especially  in  your   scripts.

findmntは、マウントポイント引数なしですべてのマウントの情報を出力します。これ-Dエミュレートdfオプションです。-D出力がない場合はに似ていmountますが、はるかに設定可能です。findmnt --help自分で試してみてください。

現在のシェルの現在のディレクトリが変更されないように、サブシェルに貼り付けます。

そう:

mkdir -p /tmp/1/2/3/4/5/6 && cd $_ 
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd

出力

TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw
SOURCE FSTYPE  SIZE   USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G 839.7M   11G   7% /tmp
/tmp/1/2/3/4/5/6

-D使用可能なオプションがない場合(util-linuxの古いバージョンではない場合、心配する必要はありません-いずれにせよ、便利なスイッチにすぎません。各呼び出しに対して生成される列見出しに注意して-oください。utputスイッチを使用して、呼び出しごとに列見出しを含めるか除外することができます。次の-Dように提供される可能性があるものと同じ出力を取得できます。

 findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET

出力

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp

私はそれが好きですが、についてのビットを除いて-D、私はそのオプションを持っていません。(Debian7、util-linux 2.20.1-5.3を使用しています)
ctrl-alt-delor 14

数日後にあなたを√させます。誰かがより完璧な答えを持っているかどうかを確認する時間を残します。これは完璧に近いものですが(dfのように機能した場合:ループを必要としなかった場合、完璧になります)。
ctrl-alt-delor 14

@richard-それは良いアイデアです-回答がすぐに受け入れられたとき、私はそれが好きではありません。ループに関してdf- ループすることは間違いありませんが、ループするように指示する必要はありません。
mikeserv 14

1
@rameshのおかげで私たちもできるfindmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor

2
のバージョンにfindmnt-Tcd ..ループをバイパスできるオプションがあります。他の誰かに役立つかもしれません。
窒素

1

Linux / Unixの方法は、小さなユーティリティのツールボックスを用意することです。これを組み合わせることで、目的の結果を得ることができます。

彼らはすべての機会のためのユーティリティを持っていない傾向があります。代わりに、パイプなどと組み合わされた多数の小さな便利なユーティリティがあります。これの利点は、利用できるものがない場合、独自のユーティリティを非常に簡単に作成できることです。

たとえば、必要な情報を取得するには、次を使用できます。

mount | grep $(df  --output=source . | tail -1)

上記を別のディレクトリで再利用する場合は、スクリプトを作成します。

#!/bin/bash
mount | grep $(df  --output=source $1 | tail -1)

名前を付けて保存し、mountinfo実行可能にします(chmod +x mountinfo)。その後、次のように使用できます。

mountinfo .

相互運用性のないすべてのユーティリティを備えたシステムが必要な場合、特定のMr Gatesがあなたを助けることができるかもしれません;-)


--outputGNU coreutilsのごく最近のバージョン(8.22以上)にのみ存在します。
ジル「SO-停止されて悪」

これは私がやっていることのほとんどmountであり、オプションなしで少し考えられているだけです:マウントポイントを作成するオプションでは、それらをリストせずに、より良いリストツールを望んでいました。ご覧のとおり、@ mikeservが示していfindmntます。
ctrl-alt-delor 14

1

マウントポイントに空白が含まれていると、多少厄介になりますが、マウントポイントに改行が含まれる場合を除いて、これは機能するはずです。

#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
    if (NR==1)
        i=index($0,"Mounted on");
    else
        print substr($0,i);
    }')"
mount|grep " on ${mountpoint} type "

df -Pファイルシステムの1行を出力します。このオプションがないとdf、マウントポイントが長い場合に2行を出力する場合があります。マウントポイント名は、ヘッダー行の「マウントされた」ラベルと同じ列で始まります。

マウントポイントを取得したら、の出力でそれをgrepしますmount


1

コマンドはわかりませんが、関数を作成できます。以下に以下を追加できます.bashrc

mountinfo () {
  mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}

これによりmountコマンドが実行され、出力がに渡されgrepます。grepの出力を探しdf -P "$1" | tail -n 1 | awk '{print $1}'、それを分解します:

  • df -P "$1"df関数に渡された引数で実行されます。
  • tail -n 1partition情報を含む2行目のみを出力します。
  • awk '{print $1}'は、その行の最初の部分、たとえば、ディスク/パーティション番号を出力します/dev/sda5。それgrepがmountコマンドで検索され、出力されます。

ソース.bashrc変更を適用するには、ファイルを、またはログアウトして再度ログインします。

これで、を実行するとmountinfo .、必要な出力が得られます。


これは私がやっているものをほとんどである(私が行うときに機能せず、私は十分にそれをしない、それはこのサイト上の他のシステムなどの回答である。)、それだけということですmountオプションなしでのビットに見えます後の考え:マウントポイントを作成するオプションでは、それらを一覧表示せずに、より良い一覧ツールを望んでいました。ご覧のとおり、@ mikeservが示していfindmntます。
ctrl-alt-delor 14

0

GNU coreutils dfの完全に古いバージョンを使用していない場合、echo $(df . --output=target | tail -n 1)動作します。同様にstat -c '%m' .https: //linux.die.net/man/1/statには%mformatオプションのドキュメントがないことに注意してください

これを移植性のある方法で行うのは面倒です。上記のいずれも、BSDまたはCygwinバージョンのstatまたはdfでは動作しません。マウントポイントのパスにスペースが含まれていない場合はdf -P . | tail -1 | awk '{ print $NF}'良いでしょうが、多くの場合、USBフラッシュドライブにはボリューム名にスペースが含まれており、マウントパスにスペースが含まれている可能性があります。移植性のために、Perlは事実上どこにでもインストールでき、CPANにはモジュールSys :: Filesystem :: MountPointがあり、必要な機能を提供します。


echo $()コマンドの追加内容を教えてください。
ctrl-alt-delor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.