AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1487099
Accepted
Mr. T
Mr. T
Asked: 2023-09-27 08:28:41 +0800 CST2023-09-27 08:28:41 +0800 CST 2023-09-27 08:28:41 +0800 CST

Ubuntu 22.04 bash one-liner para identificar o dispositivo que suporta um volume LUKS?

  • 772

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-lvpara/

Como posso converter o ponto de montagem conhecido /em /dev/sda3uma 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 -dcomo me pegar /dev/mapper/ubuntu--vg-ubuntu--lv, mas como faço para sair /dev/sda3disso?

mount
  • 1 1 respostas
  • 134 Views

1 respostas

  • Voted
  1. Best Answer
    mpboden
    2023-09-30T12:32:21+08:002023-09-30T12:32:21+08:00

    Pode haver uma maneira mais simples e eficiente de fazer isso, mas consegui o que você deseja usando lsblk, grepe awksem precisar de acesso root.

    dr.

    pkname=$(lsblk -o MOUNTPOINT,PKNAME | grep "^/"[^[:alnum:]] | awk '{ print $2 }');pkname=$(lsblk -o PATH,PKNAME,KNAME | grep $pkname | awk -v val="$pkname" '$3 == val { print $2 }');lsblk -o PATH,KNAME | grep $pkname | awk '{ print $1 }';unset pkname
    

    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/sda3do ponto de montagem, /.

    $ lsblk
    NAME                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
    loop0                         7:0    0  63.4M  1 loop  /snap/core20/1974
    loop1                         7:1    0 111.9M  1 loop  /snap/lxd/24322
    loop2                         7:2    0  53.3M  1 loop  /snap/snapd/19457
    sda                           8:0    0    25G  0 disk  
    ├─sda1                        8:1    0     1M  0 part  
    ├─sda2                        8:2    0     2G  0 part  /boot
    └─sda3                        8:3    0    23G  0 part  
      └─dm_crypt-0              253:0    0    23G  0 crypt 
        └─ubuntu--vg-ubuntu--lv 253:1    0    23G  0 lvm   /
    sr0                          11:0    1  1024M  0 rom  
    

    Felizmente, lsblkexiste uma -oopção que permite fornecer uma lista de colunas para imprimir. Isso exibe informações adicionais que podem ser analisadas com grepe awk. Veja lsblk --helpuma lista completa. Para começar, escolhi MOUNTPOINTe PKNAME, mas também usarei PATHe KNAMEmais tarde.

    $ lsblk --help
    --snip--
     KNAME  internal kernel device name
     PATH  path to the device node
    --snip--
     MOUNTPOINT  where the device is mounted
    --snip--
     PKNAME  internal parent kernel device name
    --snip--
    

    1. Encontre o PKNAMEponto de montagem:/

    A linha a seguir imprime MOUNTPOINTe PKNAMEassociado ao /ponto de montagem:

    $ lsblk -o MOUNTPOINT,PKNAME | grep "^/"[^[:alnum:]]
    /                 dm-0
    

    Use awkpara imprimir e atribuir a 2ª coluna, PKNAME, a uma variável:

    $ pkname=$(lsblk -o MOUNTPOINT,PKNAME | grep "^/"[^[:alnum:]] | awk '{ print $2 }')
    $ echo $pkname
    dm-0
    

    2. Encontre o PKNAMEanteriorPKNAME

    Use lsblknovamente, desta vez com PATH, PKNAMEe KNAMEcomo colunas. Use greppara encontrar linhas contendo o valor de $pkname:

    $ lsblk -o PATH,PKNAME,KNAME | grep $pkname
    /dev/mapper/dm_crypt-0            sda3   dm-0
    /dev/mapper/ubuntu--vg-ubuntu--lv dm-0   dm-1
    

    Isso resulta em duas correspondências, mas queremos apenas uma correspondência que $pknamecorresponda à terceira coluna, que é KNAME. A segunda coluna, PKNAME, deve ser incluída, porque esse é o próximo valor necessário.

    Use awknovamente para obter esse valor e reatribua-o à sua variável:

    $ pkname=$(lsblk -o PATH,PKNAME,KNAME | grep $pkname | awk -v val="$pkname" '$3 == val { print $2 }')
    $ echo $pkname
    sda3
    

    3. Encontre o PATHanteriorPKNAME

    Use lsblkpara exibir PATHcolunas KNAME, greppara encontrar a linha correspondente e awkpara imprimir a primeira coluna PATH:

    $ lsblk -o PATH,KNAME | grep $pkname | awk '{ print $1 }'
    /dev/sda3
    

    Por fim, combine todos os comandos, separados por ponto e vírgula. Para completar, acrescente um unsetno final para limpar a variável, $pkname. Aí está o seu one-liner sem precisar de acesso root.

    $ pkname=$(lsblk -o MOUNTPOINT,PKNAME | grep "^/"[^[:alnum:]] | awk '{ print $2 }');pkname=$(lsblk -o PATH,PKNAME,KNAME | grep $pkname | awk -v val="$pkname" '$3 == val { print $2 }');lsblk -o PATH,KNAME | grep $pkname | awk '{ print $1 }';unset pkname
    /dev/sda3
    
    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve