Для ясности я добавляю более или менее скриптовый тест того, о чем мы говорили в комментариях. Это ядро 4.7.2 , где проблема тоже не возникает:
$ cd /dev/shm
$ free
total used free shared buff/cache available
Mem: 1794788 673948 873668 19300 247172 963316
Swap: 2097148 0 2097148
$ for i in `seq 100000`; do touch node$i; done
$ ls -1|wc -l # oops, there are extra three pulseaudio files here
100003
$ free
total used free shared buff/cache available
Mem: 1794788 738240 811944 19300 244604 890184
Swap: 2097148 0 2097148
Хорошо, мы получили объем памяти. Но rm
очищает его
$ rm node*
$ free
total used free shared buff/cache available
Mem: 1794788 671484 896524 19300 226780 965884
Swap: 2097148 0 2097148
Совпадение не идеальное, потому что я тем временем очистил некоторые кеши. Но количество свободной памяти и памяти в кеше одинаково в начале и в конце этого небольшого эксперимента.
Поэтому да, проблема возникает только в старой версии ядра. Это будет означать, что была ошибка, но она уже исправлена.
У вас есть вкладки; каждая вкладка считается одним символом с точки зрения cut
, но может занимать больше места, чем на экране. Более того, он занимает количество, которое зависит от того, где в строке он выводится ...
Каждая строка, длина которой превышает 64 символа, имеет соответствующий пробел, который совпадает с табулятором (до сих пор в большинстве сред это восемь символов. столетие):
3"fcALD`&L\#Ls7fP!Gs9Ksjv\) ?Fm9]R#oRlEb%&=R{-zRvRE /})^uM:H9sq
^ tab here
^ tabstop here
1234567812345678123456781234567812345678123456781234567812345678
Когда вы копировали и вставляли результат для второго набора измерений, пробелы, до которых были расширены вкладки, были скопированы, поэтому wc -c
вместо этого подсчитал их.