🔖
lsblkの表示形式
linux等のOSのファイルシステム表示CLIに、lsblkというものがある。おなじみの表示は次の通りだろう。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
├─sda1 8:1 0 170.1G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 5G 0 part [SWAP]
sdb 8:16 0 5.5T 0 disk
└─sdb1 8:17 0 5.5T 0 part /V*****
情報量にとくに驚きはないが、これらの標準に加えて、 -o オブションで表示項目を増減することができる。
色々見繕って指定してみた。尚これで全てではない。
$ lsblk -o kname,mountpoint,label,partlabel,wwn,pkname,model
KNAME MOUNTPOINT LABEL PARTLABEL WWN PKNAME MODEL
sda 0x5**1b444a6****22b SanDisk SDSSDA**
sda1 / 0x5**1b444a6****22b sda
sda2 0x5**1b444a6****22b sda
sda5 [SWAP] 0x5**1b444a6****22b sda
sdb HD-EDS-D
sdb1 /V***** REC******* R***** sdb
小生の環境ではこのとおり。微妙に伏せ字。
識別子に使えそうな情報が多数でてくる。なかなか使い出がありそうだ。だが問題はここからだ。
これらの形式、人間が眺める分には問題ないが、一見固定カラムで出力されてるかのようでいて、その実、ご丁寧に項目名や中身で伸縮してくれるため、スクリプト等で処理するには非常に扱いづらい。
困ってる人は何人か見受けられる。
もっと扱いやすい形式はないのか?
あったよ orz
raw
シェルスクリプト等で処理する場合に、格段に楽なのはこれだろう。
$ lsblk -o kname,mountpoint,label,partlabel,wwn,pkname,model --raw
KNAME MOUNTPOINT LABEL PARTLABEL WWN PKNAME MODEL
sda 0x5**1b444a6****22b SanDisk\x20SDSSDA**
sda1 / 0x5**1b444a6****22b sda
sda2 0x5**1b444a6****22b sda
sda5 [SWAP] 0x5**1b444a6****22b sda
sdb HD-EDS-D\x20\x20\x20\x20\x20\x20\x20\x20
sdb1 /V***** REC******* R***** sdb
空欄カラムは厳格にスキップされてるようだ。
空白をカンマに置換してみると、ほぼそのまま使えるCSVが出来上がる。
$ lsblk -o kname,mountpoint,label,partlabel,wwn,pkname,model --raw | tr " " ,
KNAME,MOUNTPOINT,LABEL,PARTLABEL,WWN,PKNAME,MODEL
sda,,,,0x5**1b444a6****22b,,SanDisk\x20SDSSDA**
sda1,/,,,0x5**1b444a6****22b,sda,
sda2,,,,0x5**1b444a6****22b,sda,
sda5,[SWAP],,,0x5**1b444a6****22b,sda,
sdb,,,,,,HD-EDS-D\x20\x20\x20\x20\x20\x20\x20\x20
sdb1,/V*****,REC*******,R*****,,sdb,
一部エスケープされてしまう文字があるが、「マウントしてないデバイスを検索てほげほげするようなスクリプト」を書く場合であれば、これで十分であろう。
json
みんな大好きjsonももちろんある。(あるんかーい)
$ lsblk -o kname,mountpoint,label,partlabel,wwn,pkname,model -J
{
"blockdevices": [
{"kname": "sda", "mountpoint": null, "label": null, "partlabel": null, "wwn": "0x5**1b444a6****22b", "pkname": null, "model": "SanDisk SDSSDA**"},
{"kname": "sda1", "mountpoint": "/", "label": null, "partlabel": null, "wwn": "0x5**1b444a6****22b", "pkname": "sda", "model": null},
{"kname": "sda2", "mountpoint": null, "label": null, "partlabel": null, "wwn": "0x5**1b444a6****22b", "pkname": "sda", "model": null},
{"kname": "sda5", "mountpoint": "[SWAP]", "label": null, "partlabel": null, "wwn": "0x5**1b444a6****22b", "pkname": "sda", "model": null},
{"kname": "sdb", "mountpoint": null, "label": null, "partlabel": null, "wwn": null, "pkname": null, "model": "HD-EDS-D "},
{"kname": "sdb1", "mountpoint": "/V*****", "label": "REC*******", "partlabel": "R*****", "wwn": null, "pkname": "sdb", "model": null}
]
}
Discussion