Откуда берется размер файла, т.е. как ls и cp узнают размер файла?

Обязательно используйте Perl, если хотите, но разве этот sed не поможет?

echo "$API_URI" | sed 's/\//\\\//g'
http:\/\/something\/api

Или ... в прямом Bash:

echo "${API_URI//\//\\/}"
http:\/\/something\/api
2
24.08.2017, 21:46
2 ответа
strace -v -e trace=lstat ls -l file
[...]
lstat("tw.txt", {[...] st_size=1103, [...]
0
27.01.2020, 22:37

Размер файла хранится как часть метаданных файла вместе с типом файла (каталог/обычный/символическая ссылка/… ), метками времени, разрешениями и т. д. получить эти метаданные с помощью системного вызоваstat. Метаданные хранятся в индексном узле файла.

Драйвер SATA задействован, если файл хранится на диске SATA, но это гораздо более низкий уровень, чем файловая система. Принятие во внимание уровня SATA не поможет вам понять, что происходит, как раз наоборот.

Размер файла может превышать размер диска. Файл можно сжать. Большинство файловых систем поддерживают только одну очень простую форму сжатия:разреженных файлов ,где на диске не хранятся большие блоки нулевых байтов. Использование диска, о котором сообщает du, не учитывает эти пропущенные блоки, но учитывает размер файла, о котором сообщает ls.

Как отмечает Wumpus Q. Wumbley в комментарии, найденный вами размер (36028797019011568 )на один бит отличается от совершенно разумного размера (47600 ). Так что вполне вероятно, что такой размер не является законным разреженным файлом, а является признаком повреждения данных на диске. Прежде чем делать что-либо еще, запустите тест памяти. ОЗУ является самым большим источником неисправленных одиночных -битовых ошибок. Имейте в виду, что из-за этой ошибки у вас может быть больше поврежденных данных.

0
27.01.2020, 22:37

Теги

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