come controllare il formato di un filesystem


11

Vorrei controllare, in uno script bash, su quale tipo di filesystem è una directory.

L'idea è qualcosa di simile

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if

Vuoi il mount point o il tipo di filesystem? Quale sarebbe l'output desiderato?
terdon

Risposte:


11

Usa df. Puoi passargli un percorso e ti darà le informazioni sul filesystem per quel percorso. Se hai bisogno del tipo di filesystem, usa l' -Topzione, in questo modo:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

Per estrarre il tipo di filesystem, puoi analizzarlo (usa l' -Pinterruttore per evitare di dfspezzare le linee se la parte del dispositivo è troppo lunga):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

Quindi puoi usare quel valore in un ifcostrutto in questo modo:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

Attenzione che la colonna del dispositivo può contenere spazi (ma è raro), nel qual caso l'analisi non riuscirà.


12

Su un sistema con il comando stat GNU installato (come con qualsiasi distribuzione Linux standard), è possibile ottenere il tipo fs per un dato file senza richiedere alcun analisi usando il statcomando:

stat -f -c %T filename

-findica statdi fornire informazioni sul file system anziché sul file e -c %Timposta il formato di output in modo che includa solo il tipo di file system leggibile ( %T).

Quindi potresti usarlo (in bash) come:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat fornirà ulteriori informazioni.


3

Con findmnt(parte di util-linux):

findmnt -no fstype -T /path/to/file

Quando si utilizza l'opzione

-T, --target path
se il percorso non è un file o una directory mountpoint, findmntcontrolla gli elementi del percorso in ordine inverso per ottenere il mountpoint. Le altre due opzioni eliminano la riga di intestazione: -n, --noheadinge selezionano le colonne da elencare:-o, --output


dfda coreutilsha un'opzione simile --output=per stampare solo alcuni campi, come fstypead esempio:

df --output=fstype /path/to/file

non esiste alcuna opzione per rimuovere l'intestazione, quindi dovrai reindirizzare l'output ad es | sed 1d


Uno findmntstrumento carino , anche con output TUI di disegno a tratteggio. Grazie!
Incnis Mrsi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.