Новое в Ubuntu, вопрос об использовании 'du' [duplicate]

У меня возникла проблема на одном из моих серверов с 16.04: осталось свободное место.

Я понятия не имею, что занимает пространство. Есть ли команда для перечисления текущих размеров каталога, поэтому я могу пересечься и попасть в каталог, занимая все пространство?

54
задан 5 May 2017 в 17:02

18 ответов

Как всегда в Linux, есть более чем один способ выполнить работу. Однако, если вам нужно сделать это из CLI, это мой предпочтительный метод:

Я запускаю его как root или sudo:

du -cha --max-depth=1 / | grep -E "M|G"

Grep должен ограничивать возвращающие строки к тем, которые возвращаются со значениями в диапазоне мегабайт или гигабайт. Если ваши диски достаточно большие, вы можете добавить |T, чтобы включить количество терабайт. Вы можете получить некоторые ошибки на /proc, /sys и / или /dev, так как они не являются реальными файлами на диске. Тем не менее, он должен по-прежнему предоставлять действительный вывод для остальных каталогов в корне. После того, как вы найдете самые большие, вы можете запустить команду внутри этого каталога, чтобы сузить свой путь до преступника. Например, если /var был самым большим, вы могли бы сделать это следующим образом:

du -cha --max-depth=1 /var | grep -E "M|G"

Это должно привести к проблемам детей!

Дополнительные соображения

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

Предоставленный мной grep может привести к случайное значение «K» возвращается, если имя каталога или файла имеет значение G или M. Если вы абсолютно не хотите, чтобы какой-либо из отображаемых каталогов K отображался, вы хотите, чтобы ваша регулярная игра была более креативной и сложный. например grep -E "^[0-9\.]*[MG]" Если вы знаете, какой диск является проблемой, и на нем есть другие смонтированные диски, которые вы не хотите тратить время, в том числе на поиск, вы можете добавить флаг -x в свою команду du. Описание страницы этого флага: -x, --one-file-system skip directories on different file systems Вы можете отсортировать вывод команды du, чтобы верхнее значение было внизу. Просто добавьте это в конец команды: | sort -h
52
ответ дан 17 July 2018 в 16:01

Как всегда в Linux, есть более чем один способ выполнить работу. Однако, если вам нужно сделать это из CLI, это мой предпочтительный метод:

Я запускаю его как root или sudo:

du -cha --max-depth=1 / | grep -E "M|G"

Grep должен ограничивать возвращающие строки к тем, которые возвращаются со значениями в диапазоне мегабайт или гигабайт. Если ваши диски достаточно большие, вы можете добавить |T, чтобы включить количество терабайт. Вы можете получить некоторые ошибки на /proc, /sys и / или /dev, так как они не являются реальными файлами на диске. Тем не менее, он должен по-прежнему предоставлять действительный вывод для остальных каталогов в корне. После того, как вы найдете самые большие, вы можете запустить команду внутри этого каталога, чтобы сузить свой путь до преступника. Например, если /var был самым большим, вы могли бы сделать это следующим образом:

du -cha --max-depth=1 /var | grep -E "M|G"

Это должно привести к проблемам детей!

Дополнительные соображения

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

Предоставленный мной grep может привести к случайное значение «K» возвращается, если имя каталога или файла имеет значение G или M. Если вы абсолютно не хотите, чтобы какой-либо из отображаемых каталогов K отображался, вы хотите, чтобы ваша регулярная игра была более креативной и сложный. например grep -E "^[0-9\.]*[MG]" Если вы знаете, какой диск является проблемой, и на нем есть другие смонтированные диски, которые вы не хотите тратить время, в том числе на поиск, вы можете добавить флаг -x в свою команду du. Описание страницы этого флага: -x, --one-file-system skip directories on different file systems Вы можете отсортировать вывод команды du, чтобы верхнее значение было внизу. Просто добавьте это в конец команды: | sort -h
53
ответ дан 23 July 2018 в 16:56

Попробуйте sudo apt-get autoremove удалить неиспользуемые файлы, если вы этого еще не сделали

4
ответ дан 17 July 2018 в 16:01

Вы можете использовать ncdu для этого. Он работает очень хорошо.

sudo apt install ncdu

48
ответ дан 17 July 2018 в 16:01

Если вы также заинтересованы в том, чтобы не использовать команду, вот приложение: Filelight

Позволяет быстро визуализировать, что использует дисковое пространство в любой папке.

Filelight

6
ответ дан 17 July 2018 в 16:01

Уже есть много хороших ответов о том, как найти каталоги, занимающие большую часть пространства. Если у вас есть основания полагать, что основная проблема состоит из нескольких больших файлов, а не для многих небольших, вы можете использовать что-то вроде find / -size +10M.

10
ответ дан 17 July 2018 в 16:01

Я нахожу особенно ценным вывод таких инструментов, как Filelight, но, как и в вашем случае, на серверах обычно отсутствует GUI, но команда du всегда доступна.

То, что я обычно делаю is:

записать вывод du в файл (du / > du_output.txt); скопируйте файл на мою машину; используйте DuFS для «монтирования» вывода du во временном каталоге; DuFS использует FUSE для создания виртуальной файловой системы (= файлы фактически не созданы, это все подделка) в соответствии с выходом du; запустите Filelight или другой инструмент GUI в этом временном каталоге.

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

2
ответ дан 17 July 2018 в 16:01

Я не знаю Ubuntu и не могу проверить свой ответ, но после этого напишу здесь свой ответ, основанный на моем опыте как администратор unix давно.

Узнайте, какая файловая система заканчивается в пространстве df -h будут перечислены все файловые системы, их размер и их свободное пространство. Вы просто теряете время, если исследуете файловые системы, у которых достаточно места. Предположим, что полная файловая система - это / myfilesystem. проверьте выход df, если есть файловые системы, установленные на поддиректорах / myfilesystems. Если это так, следующие изменения должны быть адаптированы к этой ситуации. Узнайте, сколько мест используется файлами этой файловой системы du -sh /myfilesystem . Параметр -x может использоваться, чтобы гарантировать, что учитываются только файлы, входящие в эту файловую систему. Некоторые Unix-варианты (например, Solaris) не знают опции -x для du. Затем вы должны использовать некоторые обходные пути, чтобы найти дю файловой системы. Теперь проверьте, является ли дю видимых файлов примерно размером используемого пространства, отображаемого df. Если это так, вы можете начать поиск больших файлов / каталогов файловой системы / myfilesystem для очистки. для поиска самых больших подкаталогов каталога /.../dir используйте du -sk /.../dir/*|sort -n параметр -k заставляет выводить sie в килобайте без какой-либо единицы. Это может быть значение по умолчанию для некоторых систем. Тогда вы можете опустить эту опцию. Самые большие файлы / подкаталоги будут показаны внизу вывода. Если вы нашли большой файл / каталог, который вам больше не нужен, вы можете удалить его соответствующим образом. Не беспокойтесь о небольших каталогах в верхней части вывода. Он не решит вашу проблему, если вы их удалите. Если у вас все еще недостаточно места, вы можете повторить шаг 4 в больших подкаталогах, которые отображаются в нижней части списка.

Но что произошло, если выход du не является приблизительно доступным пространством, отображаемым df?

Если выход du больше, вы пропустили подкаталог, в котором монтируется другая файловая система. Если выход du намного меньше, то som-файлы не отображаются ни в одной директории, которую проверяет. Для его явлений могут быть разные причины.

Узнайте, в какой файловой системе пробегает пробел. [F1] отобразит всю файловую систему, ее размер и свободное пространство. Вы просто теряете время, если исследуете файловые системы, у которых достаточно места. Предположим, что полная файловая система - это / myfilesystem. проверьте выход df, если есть файловые системы, установленные на поддиректорах / myfilesystems. Если это так, следующие изменения должны быть адаптированы к этой ситуации.

Узнайте, какая файловая система закончила пространство

du -shx /myfilesystem сообщит значение, которое не содержит размер / myfilesystem / subdir / большой_файл. Единственный способ узнать, существуют ли такие файлы, это размонтировать / myfilesystem / subir и проверить с помощью ls -la /myfilesystem/subdir

список всех файловых систем, их размер и их свободное пространство. Вы просто теряете время, если исследуете файловые системы, у которых достаточно места. Предположим, что полная файловая система - это / myfilesystem. проверьте выход df, если есть файловые системы, установленные на поддиректорах / myfilesystems. Если это так, следующие изменения должны быть адаптированы к этой ситуации.

Узнайте, сколько пространства используется файлами этой файловой системы du -sh /myfilesystem . Параметр -x может использоваться, чтобы гарантировать, что только файлы, являются членами этой файловой системы. Некоторые Unix-варианты (например, Solaris) не знают опции -x для du. Затем вы должны использовать некоторые обходные пути, чтобы найти дю файловой системы.

есть файлы в каталогах, которые больше не видны, потому что в одном из своих родительских каталогов монтируется другая файловая система. Поэтому, если у вас есть файл / myfilesysem / subdir / bigfile и теперь монтируйте другую файловую систему в / myfilesystem / subdir, вы больше не видите этот файл и

9
ответ дан 17 July 2018 в 16:01

На самом деле не ответ, но добавление.

Вам тяжело не хватает места и не удается установить ncdu из ответа @erman.

Некоторые предложения

sudo apt clean all для удаления пакетов, которые вы уже загрузили. SAFE sudo rm -f /var/log/*gz файлы журнала очистки более чем через неделю или две - не будут удалять более новые / текущие журналы. MOSTLY SAFE sudo lsof | grep deleted перечисляет все открытые файлы, но фильтрует их до тех, которые были удалены с диска. FAIRLY SAFE sudo rm /tmp/* удаляет некоторые временные файлы - если что-то их использует, вы можете нарушить процесс. НЕ ДЕЙСТВИТЕЛЬНО, ЧТО БЕЗОПАСНО

Чтобы `lsof можно было бы возвращать такие строки:

server456 ~ $ lsof | grep deleted init 1 root 9r REG 253,0 10406312 3104 /var/lib/sss/mc/initgro ups (deleted) salt-mini 4532 root 0r REG 253,0 17 393614 /tmp/sh-thd-1492991421 (deleted)

Не может многое сделать для строки init, но вторая строка предполагает, что соль-миньон имеет открытый файл, который был удален, и блоки диска будут возвращены после того, как все дескрипторы файлов будут закрыты перезагрузкой службы.

Другие общие подозреваемые здесь включают в себя syslog / rsyslog / syslog-ng, squid, apache , или любой процесс, выполняемый вашим сервером, который является «тяжелым».

2
ответ дан 17 July 2018 в 16:01

Подобно @TopHat, но фильтрует некоторые файлы, если у них есть M, G или T в имени. Я не думаю, что он пропустит размер в первом столбце, но он не будет соответствовать имени файла, если вы не назовете файлы творчески.

du -chad 1 . | grep -E '[0-9]M[[:blank:]]|[0-9]G[[:blank:]]|[0-9]T[[:blank:]]'

Переключатели командной строки объясняются здесь, так как я не знал, что c или a.

-1
ответ дан 17 July 2018 в 16:01

Попробуйте sudo apt-get autoremove удалить неиспользуемые файлы, если вы этого еще не сделали

4
ответ дан 23 July 2018 в 16:56
  • 1
    Дает вам +1 за то, что он работает! Однако решение TopHats действительно быстрее читает мой диск! – Karl Morrison 4 May 2017 в 18:47
  • 2
    Я часто считаю это более полезным для этого без переключателя -d 1 (и обычно с less вместо head -20), так что я получаю полный рекурсивно перечислимый список всех файлов и каталогов, отсортированных по пространству, которое они потребляют. Таким образом, если я вижу, что каталог занимает много места, я могу просто прокрутить вниз, чтобы увидеть, действительно ли большая часть пространства занята каким-то конкретным файлом или подкаталогом. Это хороший способ найти ненужные файлы и каталоги для удаления, чтобы освободить место: просто прокрутите вниз, пока не увидите что-то, что вы уверены, что не хотите его хранить, удалять и повторять. – Ilmari Karonen 5 May 2017 в 22:16
  • 3
    Уже делал это раньше :( Но хорошая идея для других! – Karl Morrison 6 May 2017 в 12:10
  • 4
    @KarlMorrison он не читает это быстрее, просто sort ждет завершения вывода до начала вывода. – muru 29 May 2017 в 08:34
  • 5
    @muru А ладно. Однако я быстрее получаю информацию, чтобы начать быстрее, если это лучший термин! – Karl Morrison 29 May 2017 в 11:19

Вы можете использовать ncdu для этого. Он работает очень хорошо.

sudo apt install ncdu

48
ответ дан 23 July 2018 в 16:56
  • 1
    Я пинаю себя, как я обычно использую эту программу, но так как нет свободного места, я не могу установить его ха-ха – Karl Morrison 4 May 2017 в 18:29
  • 2
    @KarlMorrison Я вижу несколько возможных решений, просто смонтируйте их поверх sshfs на другом компьютере и запустите ncdu (если у вас уже есть ssh-сервер на нем ..) - или если у вас нет ssh-сервера на нем, вы можете сделать наоборот, установите ncdu на другой сервер и смонтируйте его с помощью sshfs и запустите ncdu с монтирования (если у вас уже есть sshfs на сервере) - или если у вас их нет, ... если ncdu - это один скрипт, вы может просто curl http://path/to/ncdu | sh, и он будет работать в кэше ввода-вывода IO-памяти, но это потребует некоторой удачи. вероятно, есть способ сделать ram-диск тоже – hanshenrik 4 May 2017 в 23:09
  • 3
    @KarlMorrison или вы можете загрузить образ Live Linux и установить его там. – Mark Yisri 10 May 2017 в 13:31

Если вы также заинтересованы в том, чтобы не использовать команду, вот приложение: Filelight

Позволяет быстро визуализировать, что использует дисковое пространство в любой папке.

Filelight

6
ответ дан 23 July 2018 в 16:56
  • 1
    Это сервер I SSH, без GUI. – Karl Morrison 6 May 2017 в 12:10
  • 2
    @KarlMorrison Я думаю, что есть способы запуска GUI-программ по ssh, но это идея позже, когда у вас есть место для установки пакетов – Xen2050 7 May 2017 в 02:54
  • 3
    @ Давид. О да, я пытаюсь уйти от этого. Это было необходимо на другой платформе, которую я использовал. Я исправлю этот комментарий. – Mark Yisri 5 June 2017 в 14:29
  • 4
    @Karl да, легко, если X уже установлен на клиенте: ssh -X <your host>, а затем запустите вашу программу из командной строки – Mark Yisri 5 June 2017 в 14:30
  • 5
    @MarkYisri - это то, что вам нужно установить программу и ее зависимости. И в случае с Filelight требуется, по крайней мере, KDElibs и Qt, которые не очень малы. См. эта страница для пакета файлов Ubuntu filelight , обратите внимание на то, сколько у него зависимостей. – Ruslan 4 July 2017 в 18:10

Уже есть много хороших ответов о том, как найти каталоги, занимающие большую часть пространства. Если у вас есть основания полагать, что основная проблема состоит из нескольких больших файлов, а не для многих небольших, вы можете использовать что-то вроде find / -size +10M.

10
ответ дан 23 July 2018 в 16:56

Я нахожу особенно ценным вывод таких инструментов, как Filelight, но, как и в вашем случае, на серверах обычно отсутствует GUI, но команда du всегда доступна.

То, что я обычно делаю is:

записать вывод du в файл (du / > du_output.txt); скопируйте файл на мою машину; используйте DuFS для «монтирования» вывода du во временном каталоге; DuFS использует FUSE для создания виртуальной файловой системы (= файлы фактически не созданы, это все подделка) в соответствии с выходом du; запустите Filelight или другой инструмент GUI в этом временном каталоге.

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

2
ответ дан 23 July 2018 в 16:56
  • 1
    Вы можете просто отсортировать -n du_output.txt – Zan Lynx 7 May 2017 в 21:33
  • 2
    Я нахожу графическое отображение используемого пространства более интуитивным. – Matteo Italia 7 May 2017 в 21:50

Я не знаю Ubuntu и не могу проверить свой ответ, но после этого напишу здесь свой ответ, основанный на моем опыте как администратор unix давно.

Узнайте, какая файловая система заканчивается в пространстве df -h будут перечислены все файловые системы, их размер и их свободное пространство. Вы просто теряете время, если исследуете файловые системы, у которых достаточно места. Предположим, что полная файловая система - это / myfilesystem. проверьте выход df, если есть файловые системы, установленные на поддиректорах / myfilesystems. Если это так, следующие изменения должны быть адаптированы к этой ситуации. Узнайте, сколько мест используется файлами этой файловой системы du -sh /myfilesystem . Параметр -x может использоваться, чтобы гарантировать, что учитываются только файлы, входящие в эту файловую систему. Некоторые Unix-варианты (например, Solaris) не знают опции -x для du. Затем вы должны использовать некоторые обходные пути, чтобы найти дю файловой системы. Теперь проверьте, является ли дю видимых файлов примерно размером используемого пространства, отображаемого df. Если это так, вы можете начать поиск больших файлов / каталогов файловой системы / myfilesystem для очистки. для поиска самых больших подкаталогов каталога /.../dir используйте du -sk /.../dir/*|sort -n параметр -k заставляет выводить sie в килобайте без какой-либо единицы. Это может быть значение по умолчанию для некоторых систем. Тогда вы можете опустить эту опцию. Самые большие файлы / подкаталоги будут показаны внизу вывода. Если вы нашли большой файл / каталог, который вам больше не нужен, вы можете удалить его соответствующим образом. Не беспокойтесь о небольших каталогах в верхней части вывода. Он не решит вашу проблему, если вы их удалите. Если у вас все еще недостаточно места, вы можете повторить шаг 4 в больших подкаталогах, которые отображаются в нижней части списка.

Но что произошло, если выход du не является приблизительно доступным пространством, отображаемым df?

Если выход du больше, вы пропустили подкаталог, в котором монтируется другая файловая система. Если выход du намного меньше, то som-файлы не отображаются ни в одной директории, которую проверяет. Для его явлений могут быть разные причины.

Узнайте, в какой файловой системе пробегает пробел. [F1] отобразит всю файловую систему, ее размер и свободное пространство. Вы просто теряете время, если исследуете файловые системы, у которых достаточно места. Предположим, что полная файловая система - это / myfilesystem. проверьте выход df, если есть файловые системы, установленные на поддиректорах / myfilesystems. Если это так, следующие изменения должны быть адаптированы к этой ситуации.

Узнайте, какая файловая система закончила пространство

du -shx /myfilesystem сообщит значение, которое не содержит размер / myfilesystem / subdir / большой_файл. Единственный способ узнать, существуют ли такие файлы, это размонтировать / myfilesystem / subir и проверить с помощью ls -la /myfilesystem/subdir

список всех файловых систем, их размер и их свободное пространство. Вы просто теряете время, если исследуете файловые системы, у которых достаточно места. Предположим, что полная файловая система - это / myfilesystem. проверьте выход df, если есть файловые системы, установленные на поддиректорах / myfilesystems. Если это так, следующие изменения должны быть адаптированы к этой ситуации.

Узнайте, сколько пространства используется файлами этой файловой системы du -sh /myfilesystem . Параметр -x может использоваться, чтобы гарантировать, что только файлы, являются членами этой файловой системы. Некоторые Unix-варианты (например, Solaris) не знают опции -x для du. Затем вы должны использовать некоторые обходные пути, чтобы найти дю файловой системы.

есть файлы в каталогах, которые больше не видны, потому что в одном из своих родительских каталогов монтируется другая файловая система. Поэтому, если у вас есть файл / myfilesysem / subdir / bigfile и теперь монтируйте другую файловую систему в / myfilesystem / subdir, вы больше не видите этот файл и

9
ответ дан 23 July 2018 в 16:56
  • 1
    На занятом сервере вы не можете всегда отключать все. Но вы можете привязать верхний каталог к ​​временному местоположению, и он не будет включать в себя другие монтирования и разрешит доступ к скрытым файлам. – Zan Lynx 7 May 2017 в 21:25
  • 2
    Перед systemd у меня часто возникали сбои монтирования, что приводило к заполнению / монтированием мусора. Запись резервной копии в / mnt / backup без подключенного USB-накопителя. Теперь я убеждаюсь, что эти единицы задания имеют требования к монтированию. – Zan Lynx 7 May 2017 в 21:30
  • 3
    @ZanLynx Спасибо, я никогда не слышал о bind mounts до – miracle173 8 May 2017 в 14:01
  • 4
    @ZanLynx: Не только на занятых серверах. Представьте, что вы /tmp в отдельной файловой системе (например, tmpfs) и что-то создали файлы в /tmp, прежде чем она стала точкой монтирования в другую файловую систему. Теперь эти файлы находятся в корневой файловой системе, затененных точкой монтирования, и вы не можете получить к ним доступ без перезагрузки в режим восстановления (который не обрабатывает /etc/fstab) или, как вы предлагаете, привязки. – David Foerster 3 June 2017 в 19:58

На самом деле не ответ, но добавление.

Вам тяжело не хватает места и не удается установить ncdu из ответа @erman.

Некоторые предложения

sudo apt clean all для удаления пакетов, которые вы уже загрузили. SAFE sudo rm -f /var/log/*gz файлы журнала очистки более чем через неделю или две - не будут удалять более новые / текущие журналы. MOSTLY SAFE sudo lsof | grep deleted перечисляет все открытые файлы, но фильтрует их до тех, которые были удалены с диска. FAIRLY SAFE sudo rm /tmp/* удаляет некоторые временные файлы - если что-то их использует, вы можете нарушить процесс. НЕ ДЕЙСТВИТЕЛЬНО, ЧТО БЕЗОПАСНО

Чтобы `lsof можно было бы возвращать такие строки:

server456 ~ $ lsof | grep deleted init 1 root 9r REG 253,0 10406312 3104 /var/lib/sss/mc/initgro ups (deleted) salt-mini 4532 root 0r REG 253,0 17 393614 /tmp/sh-thd-1492991421 (deleted)

Не может многое сделать для строки init, но вторая строка предполагает, что соль-миньон имеет открытый файл, который был удален, и блоки диска будут возвращены после того, как все дескрипторы файлов будут закрыты перезагрузкой службы.

Другие общие подозреваемые здесь включают в себя syslog / rsyslog / syslog-ng, squid, apache , или любой процесс, выполняемый вашим сервером, который является «тяжелым».

2
ответ дан 23 July 2018 в 16:56

Подобно @TopHat, но фильтрует некоторые файлы, если у них есть M, G или T в имени. Я не думаю, что он пропустит размер в первом столбце, но он не будет соответствовать имени файла, если вы не назовете файлы творчески.

du -chad 1 . | grep -E '[0-9]M[[:blank:]]|[0-9]G[[:blank:]]|[0-9]T[[:blank:]]'

Переключатели командной строки объясняются здесь, так как я не знал, что c или a.

-1
ответ дан 23 July 2018 в 16:56

Другие вопросы по тегам:

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