这是我的lsblk
输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 465.8G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /efi
├─nvme0n1p2 259:2 0 420G 0 part
│ └─cryptroot 254:0 0 420G 0 crypt /
└─nvme0n1p3 259:3 0 45.3G 0 part
我需要检索其“crypt”与挂载点“/”关联的“part”,而不事先知道“crypt”或“part”:
nvme0n1p2 /
这可以通过单个命令来实现吗?
答案1
lsblk
可以输出 JSON,您可以通过管道传输到该 JSONjq
。 jq
是一个 JSON 处理器,您可以用它执行任意数量的复杂查询。所以这样的事情应该有效:
lsblk --json | \
jq -r '.blockdevices[] | .children[] | select( .. | objects | .mountpoints[]? == "/" ) | .name'
例如:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 953.9G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
├─nvme0n1p2 259:2 0 3.9G 0 part /boot
└─nvme0n1p3 259:3 0 949.5G 0 part
└─nvme0n1p3_crypt 253:0 0 949.5G 0 crypt /
$ lsblk --json | \
jq -r '.blockdevices[] | .children[] | select( .. | objects | .mountpoints[]? == "/" ) | .name'
nvme0n1p3