更改lsblk
排序顺序
lsblk
以难以遵循的顺序对分区进行排序。一种无需编写 bash 脚本或 python 脚本即可对其进行排序的方法将是首选。
在 Unix 和 Linux 中也提出了类似的问题:
但是,使用-x NAME
参数进行排序的答案会导致树缩进消失。
当前排序顺序
这是lsblk
现在的显示方式:
$ lsdrv
NAME FSTYPE LABEL MOUNTPOINT SIZE MODEL
nvme0n1 477G Samsung SSD 960 PRO 512GB
├─nvme0n1p9 swap [SWAP] 7.9G
├─nvme0n1p7 ext4 Old_Ubuntu_16.04 /mnt/old 23.1G
├─nvme0n1p5 ntfs 859M
├─nvme0n1p3 16M
├─nvme0n1p1 ntfs 450M
├─nvme0n1p8 ntfs Shared_WSL+Linux /mnt/e 9G
├─nvme0n1p10 ext4 Ubuntu_18.04 /mnt/clone 27.2G
├─nvme0n1p6 ext4 New_Ubuntu_16.04 / 45.1G
├─nvme0n1p4 ntfs NVMe_Win10 /mnt/c 363.2G
└─nvme0n1p2 vfat /boot/efi 99M
mmcblk0 119.1G
└─mmcblk0p1 vfat SANDISK128 /media/rick/SANDISK128 119.1G
sr0 1024M DVD+/-RW DW316
sda 931.5G HGST HTS721010A9
├─sda4 ntfs WINRETOOLS 450M
├─sda2 128M
├─sda5 ntfs Image 11.4G
├─sda3 ntfs HGST_Win10 /mnt/d 919G
└─sda1 vfat ESP 500M
建议的排序顺序
这是它lsblk
应该如何排序:
$ lsdrv
NAME FSTYPE LABEL MOUNTPOINT SIZE MODEL
nvme0n1 477G Samsung SSD 960 PRO 512GB
├─nvme0n1p1 ntfs 450M
├─nvme0n1p2 vfat /boot/efi 99M
├─nvme0n1p3 16M
├─nvme0n1p4 ntfs NVMe_Win10 /mnt/c 363.2G
├─nvme0n1p5 ntfs 859M
├─nvme0n1p6 ext4 New_Ubuntu_16.04 / 45.1G
├─nvme0n1p7 ext4 Old_Ubuntu_16.04 /mnt/old 23.1G
├─nvme0n1p8 ntfs Shared_WSL+Linux /mnt/e 9G
├─nvme0n1p9 swap [SWAP] 7.9G
└─nvme0n1p10 ext4 Ubuntu_18.04 /mnt/clone 27.2G
mmcblk0 119.1G
└─mmcblk0p1 vfat SANDISK128 /media/rick/SANDISK128 119.1G
sr0 1024M DVD+/-RW DW316
sda 931.5G HGST HTS721010A9
├─sda1 vfat ESP 500M
├─sda2 128M
├─sda3 ntfs HGST_Win10 /mnt/d 919G
├─sda4 ntfs WINRETOOLS 450M
└─sda5 ntfs Image 11.4G
注意: lsdrv
是在 中定义的别名~/.bashrc
:
$ alias lsdrv
alias lsdrv='lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL |egrep -v "^loop"'
概括
更改排序顺序的复杂性是:
- 只有带有线条绘制字符的分区
├─
并└─
在其驱动器下排序。 - 对分区进行排序后,最后一个分区可能需要
├─
替换为└─
. - 对分区进行排序后,可能需要将第一个分区到倒数第二个分区
└─
替换为├─
. - 旧的“阿喀琉斯之踵”排序位置
10
之后,然后1
是 EG 。真的应该出现在眼前。1
10
2
9
10
多年来,排序顺序lsblk
一直是个难题。希望有人有一个简单的 GNU 实用程序解决方案,例如:、、awk
和/或等。sed
grep
uniq
sort
我最终编写了一个通用的排序函数来解决这个问题。
新的
lsblk
排序顺序lsblk
用于对输出进行排序的 Bash 脚本花了几个小时在谷歌上搜索不同的 bash 命令才能找到解决方案。最初称为 的 bash 脚本
sblk
可用于其他目的: