Я можу використовувати ls -lлогічний розмір файлу, але чи є спосіб отримати фізичний розмір файлу?
Я можу використовувати ls -lлогічний розмір файлу, але чи є спосіб отримати фізичний розмір файлу?
Відповіді:
ls -lдасть вам очевидний розмір файлу, який кількість байтів прочитала б програма, якби вона прочитала файл від початку до кінця. duдав би вам розмір файлу "на диску".
За замовчуванням duнадає розмір файлу в кількості блоків дисків, але ви можете використовувати його, -hщоб замість цього отримати одиницю, прочитану людиною. Дивіться також посібник duіз вашої системи.
Зауважте, що для coreutil GNU du(що, мабуть, є у вас в Linux), -bотримання байтів передбачає --apparent-sizeможливість. Це не те, що ви хочете використовувати, щоб отримати кількість байтів, фактично використаних на диску. Натомість використовуйте --block-size=1або -B 1.
З GNU lsви також можете це зробити ls -s --block-size=1у файлі. Це дасть те саме число, що і du -B 1для файлу.
Приклад:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
Це означає, що це 512 Мб файл, який займає близько 24 КБ на диску. Це розріджений файл (переважно нулі, які насправді не записуються на диск, але представлені як логічні "дірки" у файлі). Рідкі файли поширені під час роботи з попередньо виділеними великими файлами, наприклад, зображеннями дисків для віртуальних машин або заміною файлів і т.д.
Дивіться також посібник fallocateз вашої системи Linux.
du показало б, скільки даних можна насправді прочитати, а lsпокаже, наскільки розподілені дискові сектори.
duпоказує кількість диска, який фактично використовується файлом, тоді як очевидний розмір (логічний розмір), який відображається, ls- скільки байтів програма змогла б прочитати з нього. Якщо файл розріджений, частина байтів для читання буде нульовою, але вони все одно будуть доставлені програмі, яка їх читає (тільки не з диска).