私は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デバイスのマウントポイントを取得できますか?
あなたが求めているのは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
...
mount
はこれを知っています。
例:
mount | grep /dev/sdc1
または(より速くなる可能性が高い):
grep '/dev/sdc1' /etc/mtab
カーネルのマウントテーブルは/proc/mounts
にあります。これは、/etc/mtab
よりもわずかに信頼性が高くなります。これは、システム/ソフトウェアエラーにより、mtab
が破損したり、本来あるべきときに書き込まれなかったりする可能性があるためです。
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つのグループを何も置き換えず、残りの行のみを残します。これは、可能なスペースを含むマウントポイントです。