diferença entre df -h e dfc

1

Por que existe uma diferença no tamanho usado entre dfc e df -h ?

$ df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda7        64G     51G   11G   83% /
none            4,0K       0  4,0K    0% /sys/fs/cgroup
udev            3,9G    4,0K  3,9G    1% /dev
tmpfs           801M    1,5M  799M    1% /run
none            5,0M       0  5,0M    0% /run/lock
none            4,0G    148K  4,0G    1% /run/shm
...

$ dfc

FILESYSTEM  (=) USED      FREE (-) %USED AVAILABLE     TOTAL MOUNTED ON 
/dev/sda7   [=================---]   83%     10.6G     63.9G /
none        [--------------------]    0%      4.0K      4.0K /sys/fs/cgroup
udev        [=-------------------]    0%      3.9G      3.9G /dev
tmpfs       [=-------------------]    0%    798.7M    800.1M /run
none        [--------------------]    0%      5.0M      5.0M /run/lock
none        [=-------------------]    0%      3.9G      3.9G /run/shm
...

Eu não arredo para 3.9 até 4 e depois exibo 4.0 que não faz sentido para mim.

    
por rubo77 05.08.2014 / 21:45

2 respostas

3

Não é simplesmente "arredondamento". dfc (e di ) imprime o valor arredondado para a representação mais próxima em dígitos, enquanto df arredonda para cima .

A pergunta não especifica uma versão do coreutils; Eu estou respondendo baseado na versão 8.13 (no Debian 7), embora eu veja o mesmo resultado com 8.25.

Comece com a -h opção em df.c :

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

Existe um código de acompanhamento no "human.c" do gnulib ( humblock ), onde decide qual tipo de arredondamento usar. Como as opções humanas não são modificadas, ele usa o teto em vez de andar ou arredondamento para o valor mais próximo. Isso acontece porque um zero é o valor de enumeração do teto:

  /* Unless otherwise specified these options may be ORed together.  */

  /* 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,
    
por 14.05.2016 / 02:04
0

Eu acredito que isso é chamado de "arredondamento".

    
por 05.08.2014 / 22:41

Tags