Почему df и df -h показывают разные значения? Как df -h выполняет вычисления?

Я не могу представить себе причину для написания этого кода, и я не совсем уверен, чего пытался достичь человек, написавший этот код. wait здесь ничего не делает - с его точки зрения нет дочерних процессов, поэтому он просто выйдет сразу и будет действовать как noop ( wait сам выполняет в дочернем процессе из-за подстановки команд, но это не связано).

Кстати, синтаксический анализ вывода ls довольно хрупок . Вместо этого рассмотрите возможность просто сделать это:

for file in *.txt; do
    ...
done

5
22.08.2018, 22:30
2 ответа

El código que publicaste es de la función "obtener encabezado _" que genera el texto en la primera fila. En su caso, esto se aplica al encabezado "1K -bloques" (llame df -B1023para ver la diferencia ).

Importante tener en cuenta :"1K" se refiere a bloques de 1024 -bytes, no a bloques de 1000 -bytes (indicados por "bloques de 1kB -", consultedf -B1000)

El cálculo de los números en el formato legible por humanos es manejado por la función "human _readable" (human.c :153 ). En df.c :1571 puede encontrar las opciones que se utilizan cuando se llama con la bandera -h:

case 'h':
    human_output_opts = human_autoscale | human_SI | human_base_1024;
    output_block_size = 1;
    break;

Todos los cálculos se realizan con base 1024 en formato legible por humanos (" -h" ). Además de las opciones humanas _de salida _que se muestran, hay una configuración predeterminada que se aplica aquí (consulte human.h, declaración de enumeración):

/* The following three options are mutually exclusive.  */
/* Round to plus infinity (default).  */
human_ceiling = 0,
/* Round to nearest, ties to even.  */
human_round_to_nearest = 1,
/* Round to minus infinity.  */
human_floor = 2,

Como la salida humana __opts no incluye humano _redondo _a _más cercano o humano _piso, utilizará su valor predeterminado de humano _techo. Por lo tanto, todos los valores calculados se redondearán hacia arriba.

Para verificar la configuración, podemos intentar calcular el formato legible por humanos en función de los bloques de 1K -dedf:

Size = ceil(41943040/1024/1024) = ceil(40) = 40
Used = ceil(7659828/1024/1024) = ceil(7.305) = 7.4
Available = ceil(34283212/1024/1024) = ceil(32.695) = 33

Que es lo mismo que la salida de df -h.

(... y si prefiere el formato de 1000 -bytes, simplemente puede llamar adf -H).

6
27.01.2020, 20:39

Ni el programa dfde FreeBSD (aquí es donde df -hes originalmente de )ni la implementación dfde Solaris se comportan de esta manera.

Dado que las fuentes de Solaris son OpenSource, puede verificar si puede compilar dfen su sistema operativo:

0
27.01.2020, 20:39

Теги

Похожие вопросы