lsblk -o NAME,SERIAL,MOUNTPOINT
出力に以下が含まれている場合
sdb X55MM4827123
└─sdb1
└─luks-4d0dc651-9aa6-452d-9442-7b33d95f8427 /run/media/main/mydrive
X55MM4827123
マウントポイント(この場合)を提供するときにシリアル番号(この場合)を取得するために使用できる単純なコンソール/ CLIコマンドは何ですか/run/media/main/mydrive
?
答えを使用する必要はありませんが、lsblk
簡潔でなければならず、単純なbashスクリプトを使用することをお勧めします。
答え1
次のオプションは、ヘッダーなしでディスクのシリアル番号を印刷します。lsblk -n -o SERIAL /dev/sda
オプションの説明はマンページにあります。
-n, --noheadings
Do not print a header line.
Serial:
このオプションはコマンド出力からヘッダーを削除します。
-o, --output list
Specify which output columns to print. Use --help to get a list of all supported columns.
ディスクについて印刷する情報を選択してください。
シリーズを提供するのに十分です。残念ながら、lsblk
シリアル番号はパーティションではなくディスクの属性なので、マウントポイントでは機能しません。見学するsynopsis
:
Synopsis
lsblk [options]
lsblk [options] device...
マウントポイントからパーティションを抽出し、ディスク情報を整理し、それを引数として提供するには多くの努力が必要ですlsblk
。これで成功することができます。
mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'
mount
すべてのマウントポイントが一覧表示され、マウントポイントの行がフェッチgrep
され、awk
パーティション列がフェッチされ、sed
パーティションを表す番号が削除されます。要約すると、次のようになります。
lsblk -n -o SERIAL `mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'`
答え2
私が理解しているように、目標はマウントポイントにコマンドを入力し、シリアル番号を出力することです。まあ、少しawk
魔法とパッケージを使用する小さなスクリプトで可能ですsmartmontools
。
デモ2 :
$ ./mount2serial.sh /
[sudo] password for xieerqi:
Serial Number: 4G7AA3Q1HSZ4HH4YN
$ ./mount2serial.sh /mnt/HDD
[sudo] password for xieerqi:
Serial Number: 4O75CEXFLML9M
スクリプト自体は次のとおりです。
#!/usr/bin/env bash
if [ "$1" = "/" ]
then
dev=$(awk -v mount="$1" '$2 == mount{print $1}' /proc/self/mounts)
else
dev=$(awk -v mount="$1" '$0 ~ mount{print $1}' /proc/self/mounts)
fi
sudo smartctl -i "$dev" | grep 'Serial Number:'
からシリアル番号を取得し、lsblk
GNUバージョン1はJSONデータを出力できるため、次のようにlsblk
動作するPythonスクリプトを設定しました。
$ ./mount2serial.py '/mnt/ubuntu'
4O75CEXFLML9M
xie@xie-PC:~$ ./mount2serial.py '/'
B4VOM8OEIZIHF
#!/usr/bin/env python3
import json
import subprocess
import sys
lsblk = subprocess.run(['lsblk','-J','-o','NAME,SERIAL,MOUNTPOINT'],stdout=subprocess.PIPE)
for dev in json.loads(lsblk.stdout.decode())['blockdevices']:
serial = ''
# find serial number of current block device
for key,value in dev.items():
if key == 'serial':
serial = value
break
# we don't need to iterate through everything in dev.items()
for child in dev['children']:
if child['mountpoint'] == sys.argv[1]:
print(serial)
sys.exit(0)
# if nothing is found we end up here with exit status 1 and nothing printed
sys.exit(1)
1. GNU以外のバージョンがあるかどうかはわかりませんがlsblk
、ある場合はコメントを残してください。
/dev/urandom
2. 表示されるシリアル番号は、デモ目的で生成された任意の文字列です。