Часто возникает необходимость проверить размер директорий и файлов в проекте и оценить занимаемое в dev/live окружениях пространство.

Вот список полезных команд, которые вы можете использовать, чтобы убедиться, что на машине достаточно свободного дискового пространства, и что размер node_modules вашего проекта не сошел с ума: D

Мы будем использовать команду du, пояснения ниже:



du (disc usage) command estimates file_path space usage

The options -sh are (from man du):

  -s, --summarize
         display only a total for each argument

  -h, --human-readable
         print sizes in human readable format (e.g., 1K 234M 2G)


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

  -c, --total
         produce a grand total


Итак, давайте посмотрим основные команды:



Показать размер каталога в читаемом формате:

$ du -sh directory/


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

$ du -sh * | sort -h


Пример того, как выглядит результат этой команды на тестовом проекте:

paul@paul-Inspiron-N5110:~/projects/flutter_test$ du -sh * | sort -h
4,0K    android.iml
4,0K    flutter_test_android.iml
4,0K    flutter_test.iml
4,0K    pubspec.yaml
4,0K    README.md
8,0K    test
12K lib
200K    android
212K    ios


Если вы хотите включить скрытые файлы и каталоги (начинаются с точки):

$ du -sch .[^.]* * |sort -h


Бонус:



Показать общий и доступный объем системных разделов:

$ df -h


Показать использование инодов в вашей системе:

$ df -i


Если у вас есть более полезные команды, поделитесь ими в комментариях!

Комментарии (33)


  1. aFanOfSwift
    27.06.2018 16:54

    Вот за это спасибо!


  1. Mobyman
    27.06.2018 17:17
    +8

    А есть способ посмотреть список файлов в директории?


    1. limonte Автор
      27.06.2018 17:21

      У вас тег <sarcasm> потерялся или вы серьезно спрашиваете это?


    1. Survtur
      27.06.2018 17:21
      +1

      В догонку… ещё бы список поддиректорий и, главное, как в эту поддиректорию перейти.


  1. valery1707
    27.06.2018 17:21
    +4

    Используйте ncdu: nCurses du
    ncdu
    Плюсы:


    • Интерактивен
    • Позволяет бегать по каталогам
    • Сортирует по размеру
    • Показывает в понятном виде
    • Позволяет удалять файлы и рефрешить частично

    Минусы:


    • Нужно ставить


    1. limonte Автор
      27.06.2018 17:26
      -1

      Спасибо, поставил, пользуюсь. Добавлю еще один минус — скорость, по 500-мегабайтовому node_modules он неспешно так пробегался секунды 3-4.


      1. valery1707
        27.06.2018 17:39

        А du по тому же архиву отрабатывает сильно быстрее?
        Скорее всего дело в том что в node_modules много файлов, а ncdu вынужден хранить данные о каждом файле/папке, в отличии от du.


        1. limonte Автор
          27.06.2018 17:45
          -1

          А du по тому же архиву отрабатывает сильно быстрее?

          Хм, и то и другое использует какой-то кэш. Первый раз медленно оба, второй раз оба мгновенно. Так что мой предыдущий комментарий неточен, прошу прощения.


          1. Alj
            27.06.2018 22:51
            +1

            Тот, который buff/cache в выводе команды free -m
            Как только эта память понадобится приложениям — она будет освобождена


  1. sah4ez32
    27.06.2018 17:32
    +2

    Это еще и перевод О_о


  1. acmnu
    27.06.2018 17:32

    Очень полезный ограничитель max-depth. Это позволяет раскручивать дерево на любую глубину.


    Я активно использую вот такую функцию, может кому пригодится.


    hlp_du_subdirs () 
    { 
        where=${1:-.};
        du -a -m --max-depth 1 $where | sort -n
    }


  1. vaniacer
    27.06.2018 17:48

    Я делаю почти также, но добавляю к ду ключ -x чтобы пропускать каталоги из других файловых систем, а к сорт ключ -r, удобнее показывать сначала бОльшие файлы:
    du -shx * | sort -hr


    1. Gilberg
      27.06.2018 19:09
      +1

      А это смотря сколько у вас файлов в директории, если 10-20, то да, но если больше — то лучше чтобы были внизу.
      Но, как говорится, на вкус и цвет…


  1. robert_ayrapetyan
    27.06.2018 17:58
    -1

    Для du лучше всегда использовать ключ -A


    1. limonte Автор
      27.06.2018 19:25
      -1

      Такого ключа у du не существует.


      1. robert_ayrapetyan
        27.06.2018 19:35
        +1

        Существует, существует. Просто сокращение для --apparent-size. Это именно тот размер, который обычно хочет видеть пользователь. Без него на разделах с включенной компрессией будет подсчитан размер сжатого файла, что весьма сильно сбивает с толку. Так что убирайте свой минус.


        1. limonte Автор
          27.06.2018 19:59
          -1

          Во-первых, ключа -A у du нет, пруф из man du:


          image


          Во-вторых, "лучше всегда использовать" без "потому что" заслуживает только минуса. Так что минус первому комменту и плюс второму :)


          1. robert_ayrapetyan
            27.06.2018 21:20

            По-чесноку, у меня оборвался первый коммент, как раз на пояснении (поэтому точка не стоит в конце предложения). А по ману — это старый, с Ubuntu 12, кажется, добавили этот ключ.


            1. 027
              27.06.2018 22:45
              +1

              Ubuntu 16.04:
              onotole@home ~ $ du -A *
              du: неверный ключ — «A»
              По команде «du --help» можно получить дополнительную информацию.


              1. robert_ayrapetyan
                27.06.2018 23:59

                Странно, в FreeBSD:

                NAME
                du — display disk usage statistics

                SYNOPSIS
                du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] [-a | -s | -d depth]
                [-B blocksize] [-I mask] [-t threshold] [file ...]

                DESCRIPTION
                The du utility displays the file system block usage for each file
                argument and for each directory in the file hierarchy rooted in each
                directory argument. If no file is specified, the block usage of the
                hierarchy rooted in the current directory is displayed.

                The options are as follows:

                -A Display the apparent size instead of the disk usage. This can be
                helpful when operating on compressed volumes or sparse files.



                А то что он есть в убурне 12.2 взято отсюда: superuser.com/questions/602818/how-to-get-the-actual-directory-size-out-of-du.
                Значит? нет короткого варианта в убунте, только длинный, ничего не поделать…


                1. Vkuvaev
                  28.06.2018 00:40

                  Вы серьезно так сравниваете две команды из разных OS? Не говоря уже о том что одна Unix а другая Linux, и, наконец, они только с виду похожи, реализация независима.


                  1. robert_ayrapetyan
                    28.06.2018 00:51

                    В данном случае речь идет о прикладной стандартной утилите, где опция есть (просто в Linux для нее не придумали сокращения), сравнение весьма уместно.
                    Насчет философии вокруг Unix\Linux — Freebsd такой же Unix как и Linux, но, предвидя дискуссию с ссылками и свидетельствами очевидцев на много уровней вглубь, призываю не начинать это обсуждение здесь…


                    1. Vkuvaev
                      28.06.2018 00:56

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


                1. 027
                  28.06.2018 01:43

                  А то что он есть в убурне 12.2 взято отсюда: superuser.com/questions/602818/how-to-get-the-actual-directory-size-out-of-du.

                  Там как раз нет короткого варианта. Скорее всего, и не было никогда.

                  Freebsd такой же Unix как и Linux

                  Немного не так. GNU окружение очень похоже на BSD окружение, но не идентично ему.


  1. nlog
    27.06.2018 19:27
    -1

    Я бы добавил ключ r к sort, чтобы самые тяжёлые вещи были наверху списка.

    du -sh * | sort -hr


  1. Asten
    27.06.2018 20:10
    +2

    стоит ли ждать перевод по ls -alah? волнуюсь


    1. Vkuvaev
      28.06.2018 00:43

      Если пошла такая пьянка, то жду перевода man vi. Люблю, знаете ли, исторические романы:)


  1. Barafu_Albino_Cheetah
    27.06.2018 20:48

    Подскажите, если кто знает команду, прежде чем я начал писать велосипед.
    Есть папка А и папка Б. В папке Б дохрена файлов, требуется из папки Б удалить те файлы, что есть в папке А (с другими названиями). Без ручной проверки каждого случая. Команды типа fdupes или fslint предлагают на удаление файл из случайной папки, если только я не пропусти какой-либо ключ. Поэтому сами по себе не годятся.


    1. kloppspb
      27.06.2018 21:32

      если только я не пропусти какой-либо ключ

      Оформить в виде скрипта, в котором все правильные ключи прописаны, и принимающего два аргумента (имена каталогов) — не?


      1. Barafu_Albino_Cheetah
        27.06.2018 23:23

        Не. В каком порядке папки не даю, он предлагает удалять откуда получится.


        1. Vkuvaev
          28.06.2018 00:46

          Попробуйте в виде скрипта с Md5 суммой, сначала все их в два файлика сбросьте, затем потрите в нужной папке если есть повтор.
          Велосипед, конечно. Но зато можно сделать быстро.


    1. pansa
      28.06.2018 01:37

      Думаю, как-то так
      find dirA/ -type f -exec md5sum '{}' \; | sort > out1
      find dirB/ -type f -exec md5sum '{}' \; | sort > out2
      join… out1 out2 > to_del (тут на память ключи не помню, но суть должна быть понятна)
      проверяем руками to_del, если похоже на правду, то грохаем все файлы, перечисленные в нем, как-то так
      awk '{print $1}' to_del | xargs rm


  1. Alj
    27.06.2018 22:28

    Мне удобнее видеть по алфавиту и в одной единице измерения. Например:
    du -hsm /var/lib/mysql/*
    du -hsm /home/*