linux - ver - Obtenga espacio libre en disco con df para mostrar espacio libre en kb?
ver tamaño total de disco en linux (3)
Estoy tratando de generar la cantidad de espacio libre en disco en el sistema de archivos /example
.
Si ejecuto el comando df -k /example
puedo obtener buena información sobre el espacio disponible en el disco en kb, pero solo siendo humano y realmente mirándolo.
Necesito tomar estos datos y usarlos en otro lugar en mi script de shell. Inicialmente pensé en usar el cut
pero luego mi guión no será portátil para otros discos ya que el espacio libre en el disco variará y el corte no producirá resultados precisos.
¿Cómo puedo obtener el resultado del espacio libre en disco del ejemplo en kb?
Puede usar el comando stat (2) para visualizar bloques libres y también para averiguar qué tan grande es cada bloque, por ejemplo
stat -f --printf="%a %s/n" /
mostrará el número de bloques libres (% a) en un sistema de archivos determinado (/) seguido de un tamaño de bloque (% s). Para obtener el tamaño en kB, puede usar el comando bc (1) como en el siguiente ejemplo:
stat -f --printf="%a * %s / 1024/n" / | bc
Finalmente, poner esto en una variable es simplemente una cuestión de usar la sustitución de retroceso (o $ () como en la primera respuesta):
SOMEVAR=`stat -f --printf="%a * %s / 1024/n" / | bc`
Mostrar solo columnas interesantes
df /example --total -k -h --output=source,avail
- --total = gran total al final
- -k = tamaño de bloque 1K
- -h = humano legible
- --output = [FIELD_LIST] lista de columnas para mostrar separadas por ","
No totalmente estándar (he visto - salida solo en las páginas man de Ubuntu), en este caso, Awk y otros solo para eliminar columnas no son necesarios.
Para que la salida de df
muestre los datos en kb, solo necesita usar el indicador -k
:
df -k
Además, si especifica un sistema de archivos para df
, obtendrá los valores para ese específico, en lugar de todos ellos:
df -k /example
En cuanto al cuerpo de su pregunta: desea extraer la cantidad de espacio libre en disco en un sistema de archivos determinado. Esto requerirá algún procesamiento.
Dado un resultado df -k
normal:
$ df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7223800 4270396 2586456 63% /
Puede obtener el Available
(4ta columna) por ejemplo con awk
o cut
(previamente piping a tr
para squeeze-repeats
( -s
) para espacios):
$ df -k /tmp | tail -1 | awk ''{print $4}''
2586456
$ df -k /tmp | tail -1 | tr -s '' '' | cut -d'' '' -f4
2586456
Como siempre, si desea almacenar el resultado en una variable, use la sintaxis var=$(command)
como esta:
$ myUsed=$(df -k /tmp | tail -1 | awk ''{print $4}'')
$ echo "$myUsed"
2586456
Además, a partir del comentario de Tim Bunce , puede manejar nombres largos de sistemas de archivos usando --direct
para obtener a -
lugar, para que no se imprima una línea que rompa el motor:
$ df -k --direct /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
- 7223800 4270396 2586456 63% /