Я сравниваю значение округленного размера файла, отображаемое ls -lh
, до необработанного размера в байтах (как показано, например, ls -l
). Мне сложно определить, какой алгоритм он использует для преобразования из байтов.Как размер файла `ls -lh`?
Мое предположение, что он интерпретирует единицы K, M, G либо как
- (а) 10^3, 10^6, 10^9, или
- (б) 1024, 1024^2, 1024^3.
С одной стороны, у меня есть один файл, который ls -l
отчеты как 2052 байт, и ls -lh
раундов до 2.1K:
$ ls -l usercount.c
-rw-r--r-- 1 ssanjabi lsf 2052 May 13 15:41 usercount.c
$ ls -lh usercount.c
-rw-r--r-- 1 ssanjabi lsf 2.1K May 13 15:41 usercount.c
Это, казалось бы поддержать гипотезу (а), так 2052/1000 = 2.052, который округляется до 2.1K, но 2052/1024 = 2.0039, который будет отображаться как 2.0K при округлении до одного десятичного знака.
С другой стороны, у меня есть еще один файл, который ls -l
отчеты как 7223 байт, что ls -lh
показывает, как 7.1K:
$ ls -l traverse.readdir_r.c
-rw-r--r-- 1 ssanjabi lsf 7223 Jul 21 2014 traverse.readdir_r.c
$ ls -lh traverse.readdir_r.c
-rw-r--r-- 1 ssanjabi lsf 7.1K Jul 21 2014 traverse.readdir_r.c
Это поддерживает hypthesis смешения (б), так как 7223/1000 = 7.223, который должен округлить до 7,2 К, но 7223/1024 = 7,0537, который округляется до отображаемого 7.1K
Это приводит меня к выводу, что мое предположение неверно и что оно не выполняет ни (a), ни (b) исключительно. Какой алгоритм использует ls
, чтобы сделать это округление?
Интересно, что файл 1999 и 2099 годов показал как 2.0K – Kevin
Попробуйте найти источник – Kevin