Como obter o ponto de montagem da unidade flash usando o uuid?

6

Eu sou iniciante no Ubuntu Linux e eu preciso escrever script bash simples, que pode identificar a unidade flash necessária (que contém apenas uma partição vfat ) usando uuid desta partição e obter o ponto de montagem desta unidade flash.O arquivo / etc / fstab does'nt contém a regra mountig para esta unidade. Por exemplo, deixe a partição uuid como 7DCD-9380 Usando a ferramenta readlink, posso obter o link do dispositivo no / dev catálogo:

teddy@st1:~$ readlink -f /dev/disk/by-uuid/7DCD-9380  
/dev/sdc1

Mas como posso obter o ponto de montagem do dispositivo / dev / sdc1 ?

    
por teddypickerfromul 20.05.2011 / 13:49

4 respostas

8

O que você procura é findmnt . Por exemplo:

$ findmnt -rn -S UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

ou

$ findmnt -rn -S PARTUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

Se nada for montado correspondendo a esse UUID, nada será emitido e o código de retorno será 1 (falha), caso contrário, o ponto de montagem será enviado e o código de retorno será 0 (êxito).

Explicação das opções

-r, --raw              use raw output format
-n, --noheadings       don't print column headings
-S, --source <string>  the device to mount (by name, maj:min, 
                         LABEL=, UUID=, PARTUUID=, PARTLABEL=)
-o, --output <list>    the output columns to be shown

Available columns:
      ...
      TARGET  mountpoint
      ...
    
por 11.12.2014 / 12:18
2

mount sabe disso.

Exemplo:

mount | grep /dev/sdc1

Ou (provavelmente mais rápido):

grep '/dev/sdc1' /etc/mtab
    
por 20.05.2011 / 14:12
2

A tabela de montagem do kernel está em /proc/mounts . Isso é um pouco mais confiável do que /etc/mtab , porque um erro de sistema / software pode resultar em que o mtab seja corrompido ou não esteja gravado quando deveria.

    
por 20.05.2011 / 14:53
2

Para encontrar o dispositivo real a partir do UUID, blkid pode ser melhor do que sua readlink solution, que depende do udev.

myuuid="7DCD-9380"
mydev=$(blkid -l -o device -t UUID="$myuuid")

Para obter o ponto de montagem para este dispositivo, você pode usar isto:

grep $mydev /proc/mounts | cut -d' ' -f 2

ou

df -P | grep $mydev | awk '{print $6}'

O último é mais portável, porque / proc é somente Linux. A solução df com a opção -P (POSIX) também deve funcionar no Mac e em outros sistemas Unix.

Claro, ambos iriam quebrar se o seu ponto de montagem contivesse espaços. Mas ninguém monta coisas em "/ mnt / evil mount point /", certo?

Se você teme que seu predecessor tenha feito exatamente isso, você pode usar o perl ao invés do awk:

df -P | grep $mydev | perl -pe 's/^(\S+\s+){5}//'

(o grep também pode ser manipulado pelo perl, mas pode ser mais difícil de ler para alguns)

O regex perl substitui 5 grupos de não espaços + espaços por nada, deixando apenas o resto da linha. Qual é o ponto de montagem, incluindo todos os espaços possíveis.

    
por 18.12.2012 / 00:29