Получить общий размер каталога в Linux

Введение В Linux команда ls -l выводит список файлов и каталогов по определенному пути с их именами, датами и размерами (использование диска). Первое, что вы заметите при использовании этой команды, это то, что размер каталогов всегда отображается как 4096 байт (или 4,0 КБ, если вы используете ls -lh), даже если они содержат файлы размером более 4 КБ. Причина в том, что ls возвращает метаданные для каталогов, а не фактический размер. Итак, какой самый короткий и простой способ получить размер каталога i

Вступление

В Linux ls -l список файлов и каталогов по определенному пути с их именами, датами и размерами (использование диска). Первое, что вы заметите при использовании этой команды, это то, что размер каталогов всегда отображается как 4096 байт (или 4,0 КБ, если вы используете ls -lh ), даже если они содержат файлы размером более 4 КБ. Причина в том, что ls возвращает метаданные для каталогов, а не фактический размер.

Вы спросите, какой самый короткий и простой способ получить размер каталога в Linux? Чтобы получить общий размер каталога в Linux, вы можете использовать команду du (disk-usage).

В этой статье мы рассмотрим некоторые из наиболее распространенных обычаев du команд, в том числе , но не ограничиваясь du -sh , du -ch и du --max-depth .

Получение размера каталога в Linux с помощью du

Чтобы увидеть полное описание и список аргументов команды du , обратитесь к man du .

Если мы введем du без каких-либо аргументов, он будет рекурсивно перечислить все имена и размеры каталогов для текущего рабочего каталога и всех подкаталогов:

 rus:~/nltk_data$ du 
 2156 ./corpora/state_union 
 64 ./corpora/names 
 7624 ./corpora/conll2002 
 432 ./corpora/toolbox/rotokas 
 ### ... 
 246984 ./corpora 
 16792 ./tokenizers/punkt/PY3 
 36028 ./tokenizers/punkt 
 49420 ./tokenizers 
 296408 . 

Получить размер текущего рабочего каталога

Чтобы получить размер только текущего рабочего каталога, а не подкаталогов, мы можем использовать du -s или du --summarize :

 rus:~/nltk_data$ du -s 
 296408 . 

Мы можем добавить -h чтобы получить размер в более удобочитаемом формате:

 rus:~/nltk_data$ du -sh 
 290M . 

Мы также можем использовать du с $PATH чтобы получить размер каталога, который находится где-то кроме текущего рабочего каталога:

 rus:~/nltk_data$ sudo du /var -sh # or "du -sh /var" if you prefer 
 11G /var 

Обратите внимание, что вам нужно будет использовать его с sudo для некоторых каталогов, иначе вы получите ошибку Permission denied

Получить размер подкаталогов первого уровня

Чтобы получить размер подкаталогов первого уровня, а также общий размер каталога пути:

 rus:~$ sudo du /var/* -shc 
 6,1M /var/backups 
 144M /var/cache 
 4,0K /var/crash 
 7,2G /var/lib 
 4,0K /var/local 
 0 /var/lock 
 3,0G /var/log 
 4,0K /var/mail 
 4,0K /var/metrics 
 4,0K /var/opt 
 0 /var/run 
 3,8M /var/snap 
 52K /var/spool 
 72K /var/tmp 
 28K /var/www 
 11G total 

-c или --total возвращает общий размер пути ( 11G total ). * перечисляет все подкаталоги первого уровня в каталоге /var/ . Мы также можем добавить --exclude чтобы исключить любой каталог:

 rus:~$ sudo du /var/* -shc --exclude=lib 
 6,1M /var/backups 
 144M /var/cache 
 4,0K /var/crash 
 4,0K /var/local 
 0 /var/lock 
 3,0G /var/log 
 4,0K /var/mail 
 4,0K /var/metrics 
 4,0K /var/opt 
 0 /var/run 
 3,8M /var/snap 
 52K /var/spool 
 72K /var/tmp 
 28K /var/www 
 3,2G total 

Обратите внимание, что исключение lib также влияет на общий размер ( 3,2G total ). Это также эквивалент sudo du /var/ -h --exclude=lib --max-depth=1

 rus:~$ sudo du /var/ -h --exclude=lib --max-depth=1 
 4,0K /var/mail 
 52K /var/spool 
 3,8M /var/snap 
 4,0K /var/metrics 
 144M /var/cache 
 6,1M /var/backups 
 72K /var/tmp 
 4,0K /var/crash 
 3,0G /var/log 
 4,0K /var/opt 
 28K /var/www 
 4,0K /var/local 
 3,2G /var/ 

--max-depth=N вернет все уровни подкаталогов, которые равны или меньше числа N Установка --max-depth на 1 возвращает первый уровень, 2

  • второй и так далее.

Получить размер всех подкаталогов

Чтобы рекурсивно получить все подкаталоги /var/ , вы можете использовать sudo du /var/ -h . Или вы можете передать значение --max-depth которое, как вы уверены, больше или равно максимальному уровню глубины подкаталога: sudo du /var/ -h --max-depth=999 .

Второй вариант - скорее обходной путь, чем самый эффективный способ.

Получить размер каталога в Linux с помощью tree --du -h

tree - это рекурсивная программа для вывода списка каталогов, которая выводит список каталогов и файлов в древовидном формате. Обратите внимание, что tree не устанавливается по умолчанию. Для Debian / Ubuntu мы можем установить tree , запустив sudo apt install tree .

После завершения установки мы используем команду tree для отображения имен и размеров всех каталогов и файлов по определенному пути в древовидном формате:

 rus:~$ tree /var/www/ --du -h 
 /var/www/ 
 ├── [4.2K] demosite 
 │ └── [ 189] index.html 
 └── [ 15K] html 
 └── [ 11K] index.html 
 
 23K used in 2 directories, 2 files 

Заключение

В этой статье мы узнали, как получить размеры каталогов в Linux. Вы можете использовать эти команды на удаленных машинах Linux, серверах и / или машинах Linux с графическим интерфейсом пользователя или без него.

В большинстве случаев достаточно du command. Он также имеет то преимущество, что устанавливается по умолчанию. С другой стороны, команда tree обеспечила бы более наглядный и подробный пользовательский интерфейс для отображения почти тех же результатов, что сделало бы ее мощной альтернативой для du .

comments powered by Disqus