Alterar lsblk
ordem de classificação
lsblk
classifica as partições em uma ordem difícil de seguir. Um método de classificá-lo sem ter que escrever um script bash ou um script python seria a primeira escolha.
Uma pergunta semelhante foi feita em Unix e Linux:
No entanto, a resposta para usar o -x NAME
parâmetro para classificação faz com que o recuo da árvore desapareça.
Ordem de classificação atual
É assim que lsblk
aparece agora:
$ 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
Ordem de classificação proposta
É assim que lsblk
deve ser classificado:
$ 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
Nota: lsdrv
é um alias definido em ~/.bashrc
:
$ alias lsdrv
alias lsdrv='lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL |egrep -v "^loop"'
Resumo
As complexidades da alteração da ordem de classificação são:
- Apenas partições com caracteres de desenho de linha
├─
e└─
são classificadas em suas unidades. - Depois de classificar as partições, a última partição pode precisar ser
├─
substituída por└─
. - Depois de classificar as partições, a primeira partição para a penúltima partição pode precisar ser
└─
substituída por├─
. - O velho "calcanhar de Aquiles" de classificar os lugares
10
depois de ,1
EG1
depois . Realmente deve aparecer antes .10
2
9
10
A ordem de classificação de lsblk
tem sido um espinho por anos. Espero que alguém tenha uma solução simples com utilitários GNU como: awk
, sed
, grep
, uniq
e/ou sort
, etc.
Acabei escrevendo uma função de classificação genérica para resolver o problema.
Nova
lsblk
ordem de classificaçãoScript Bash para classificar a
lsblk
saídaDemorou algumas horas pesquisando diferentes comandos bash para criar uma solução. O script bash, inicialmente chamado
sblk
de , pode ser adaptado para outras finalidades: