web-dev-qa-db-ja.com

uuidを使用してフラッシュドライブのマウントポイントを取得するにはどうすればよいですか?

私はubuntulinuxの初心者で、次のuuidを使用して必要なフラッシュドライブ(1つだけvfatパーティションを含む)を識別できる簡単なbashスクリプトを作成する必要があります。このパーティションを作成し、このフラッシュドライブのマウントポイントを取得します./ etc/fstabファイルにmountigルールが含まれていませんこのドライブ用。たとえば、パーティションuuidを7DCD-9380としましょう。readlinkツールを使用すると、/ devカタログ:

teddy@st1:~$ readlink -f /dev/disk/by-uuid/7DCD-9380  
/dev/sdc1

しかし、どうすれば/ dev/sdc1デバイスのマウントポイントを取得できますか?

7

あなたが求めているのはfindmntです。例えば:

$ findmnt -rn -S UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

または

$ findmnt -rn -S PARTUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

そのUUIDに一致するものがマウントされていない場合、何も出力されず、戻りコードは1(失敗)です。それ以外の場合、マウントポイントが出力され、戻りコードは0(成功)です。

オプションの説明

-r, --raw              use raw output format
-n, --noheadings       don't print column headings
-S, --source <string>  the device to mount (by name, maj:min, 
                         LABEL=, UUID=, PARTUUID=, PARTLABEL=)
-o, --output <list>    the output columns to be shown

Available columns:
      ...
      TARGET  mountpoint
      ...
9
lukejjh

mountはこれを知っています。

例:

mount | grep /dev/sdc1

または(より速くなる可能性が高い):

grep '/dev/sdc1' /etc/mtab
2
Bart De Vos

カーネルのマウントテーブルは/proc/mountsにあります。これは、/etc/mtabよりもわずかに信頼性が高くなります。これは、システム/ソフトウェアエラーにより、mtabが破損したり、本来あるべきときに書き込まれなかったりする可能性があるためです。

2
jmtd

UUIDから実際のデバイスを見つけるには、udevに依存するblkidソリューションよりもreadlinkの方が適している場合があります。

myuuid="7DCD-9380"
mydev=$(blkid -l -o device -t UUID="$myuuid")

このデバイスのマウントポイントを取得するには、次を使用できます。

grep $mydev /proc/mounts | cut -d' ' -f 2

または

df -P | grep $mydev | awk '{print $6}'

/ procはLinuxのみであるため、後者の方が移植性が高くなります。 dfソリューションと-P(POSIX)オプションは、Macおよびその他のUnixシステムでも機能するはずです。

もちろん、マウントポイントにスペースが含まれていると、両方が壊れます。しかし、誰も「/ mnt/evil mountpoint /」に何かをマウントしませんよね?

前任者がまさにそれを行ったのではないかと心配している場合は、awkの代わりにPerlを使用できます。

df -P | grep $mydev | Perl -pe 's/^(\S+\s+){5}//'

(grepはPerlでも処理できますが、一部の人にとっては読みにくい場合があります)

Perl正規表現は、非スペース+スペースの5つのグループを何も置き換えず、残りの行のみを残します。これは、可能なスペースを含むマウントポイントです。

2
mivk