Eu tenho uma configuração lvm criptografada padrão do Ubuntu. /dev/sda3
é criptografado com LUKS. Dentro desse contêiner LUKS está um LVM (at /dev/mapper/dm_crypt-0
) e dentro desse LVM está um sistema de arquivos montado de /dev/ubuntu-vg/ubuntu-lv
para/
Como posso converter o ponto de montagem conhecido /
em /dev/sda3
uma linha no bash, de preferência sem root? Eu ficaria feliz em instalar um utilitário separado se pudesse fazer isso.
Eu descobri df|tail -n +2|cut -f 1 -d
como me pegar /dev/mapper/ubuntu--vg-ubuntu--lv
, mas como faço para sair /dev/sda3
disso?
Pode haver uma maneira mais simples e eficiente de fazer isso, mas consegui o que você deseja usando
lsblk
,grep
eawk
sem precisar de acesso root.dr.
Vamos analisar e usar uma VM de teste como exemplo, Ubuntu 22.04.3 Server. Comece com a saída de
lsblk
. Como você pode ver, todas as informações que você deseja estão lá. Ele mostra o ponto de montagem e o caminho até a árvore/dev/sda3
. O desafio é como analisar essa saída para obter o caminho/dev/sda3
do ponto de montagem,/
.Felizmente,
lsblk
existe uma-o
opção que permite fornecer uma lista de colunas para imprimir. Isso exibe informações adicionais que podem ser analisadas comgrep
eawk
. Vejalsblk --help
uma lista completa. Para começar, escolhiMOUNTPOINT
ePKNAME
, mas também usareiPATH
eKNAME
mais tarde.1. Encontre o
PKNAME
ponto de montagem:/
A linha a seguir imprime
MOUNTPOINT
ePKNAME
associado ao/
ponto de montagem:Use
awk
para imprimir e atribuir a 2ª coluna,PKNAME
, a uma variável:2. Encontre o
PKNAME
anteriorPKNAME
Use
lsblk
novamente, desta vez comPATH
,PKNAME
eKNAME
como colunas. Usegrep
para encontrar linhas contendo o valor de$pkname
:Isso resulta em duas correspondências, mas queremos apenas uma correspondência que
$pkname
corresponda à terceira coluna, que éKNAME
. A segunda coluna,PKNAME
, deve ser incluída, porque esse é o próximo valor necessário.Use
awk
novamente para obter esse valor e reatribua-o à sua variável:3. Encontre o
PATH
anteriorPKNAME
Use
lsblk
para exibirPATH
colunasKNAME
,grep
para encontrar a linha correspondente eawk
para imprimir a primeira colunaPATH
:Por fim, combine todos os comandos, separados por ponto e vírgula. Para completar, acrescente um
unset
no final para limpar a variável,$pkname
. Aí está o seu one-liner sem precisar de acesso root.