Странное поведение du.

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Lockywolf
Сообщения: 56

Странное поведение du.

Сообщение Lockywolf »

Код: Выделить всё

bash-4.1# du -chs
79G .
79G итого


bash-4.1# du -chs *
<... skipped ...>
54G итого
bash-4.1#



WTF??
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Странное поведение du.

Сообщение eddy »

Очевидно, в директории были файлы/поддиректории, чьи имена начинаются с точки.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo

Re: Странное поведение du.

Сообщение Brainsburn »

Код: Выделить всё

~ $ ls | wc -l
378

Файлы текущего каталога, не включая скрытые и файлы в подкаталогах.

Код: Выделить всё

~ $ ls -a | wc -l
827

Файлы текущего каталога, включая скрытые, но не включая файлы в подкаталогах.

Код: Выделить всё

~ $ ls * | wc -l
731

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

Код: Выделить всё

~ $ ls -R | wc -l
7887

Файлы текущего каталога, включая файлы в подкаталогах, но не включая скрытые файлы и подкаталоги. Первой строкой выводятся и файлы и каталоги.

Код: Выделить всё

~ $ ls -a * | wc -l
804

Файлы текущего каталога, включая скрытые файлы в нескрытых подкаталогах, но не включая файлы в скрытых подкаталогах.

Код: Выделить всё

~ $ ls -aR | wc -l
114687

Все файлы текущего каталога, включая скрытые файлы в скрытых подкаталогах.

wc -l данном случае не выведет реальное кол-во файлов, т.к. будет каждый раз учитывать каталоги "." и "..". Например, команды ls -R и ls * - идентичны, но wc -l выдаст разный результат.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Странное поведение du.

Сообщение drBatty »

Brainsburn писал(а):
30.09.2012 15:07
Например, команды ls -R и ls * - идентичны

ORLY??

ниразу они НЕ идентичны. Если в каталоге dir1 dir2 и dir3, то команда ls * выполнятся НЕ будет, а будет выполнена команда

Код: Выделить всё

ls dir1 dir2 dir3

А с ключом R команда ls рекурсивно обойдёт ВСЕ каталоги, и кроме файлов напечатает ещё много разного мусора. Типа

Код: Выделить всё

./:
file1
file2
file3

./dir1:
file11
file12

./dir2:
file21

./dir3:
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo

Re: Странное поведение du.

Сообщение Brainsburn »

drBatty писал(а):
30.09.2012 16:56
А с ключом R команда ls рекурсивно обойдёт ВСЕ каталоги, и кроме файлов напечатает ещё много разного мусора.

Если учитывать мусор, то да, не идентичны.
Спасибо сказали:
Lockywolf
Сообщения: 56

Re: Странное поведение du.

Сообщение Lockywolf »

eddy писал(а):
30.09.2012 14:28
Очевидно, в директории были файлы/поддиректории, чьи имена начинаются с точки.


Правда что ли?

А что вот это означает:

Код: Выделить всё

bash-4.1# du -shc * .
56G <...skipped...>
25G     .
81G     итого


Что за "текущий каталог" весом 25G?

Причем файлов в каталоге пара штук по 100кб.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Странное поведение du.

Сообщение eddy »

Lockywolf, а у меня так:

Код: Выделить всё

du -shc * .
<skipped>
0    .
8,0M    итого

выждал даже, запустив в "хомяке":

Код: Выделить всё

du -shc * .
<skipped>
11G    .
114G    итого

du -hs .
du: невозможно прочитать каталог <<./.dbus/session-bus>>: Отказано в доступе
114G    .

так что, с итоговым размером все ОК, а что это за "11G ." - я без понятия.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Странное поведение du.

Сообщение NickLion »

В "." входит всё, что не попало в ранее перечисленное из текущего каталога. Т.е. du -shc . даст одно и то же значение и для ".", и для "итого". В "." войдёт всё содержимое. Если написать du -shc * ., то в * будут перечислены все папки без точки. Когда du будет после этого просматривать ".", то ранее просмотренные она проигнорирует, а папки файлы с точкой посчитает. Если, например, написать du -shc tmp ., то в "." войдёт всё, кроме tmp.

UPD это не какое-то специальное поведение. Просто du не просматривает повторно. du -shc folder1/subfolder folder1 для folder1 выдаст также результат за вычетом subfolder.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Странное поведение du.

Сообщение drBatty »

Brainsburn писал(а):
30.09.2012 18:20
Если учитывать мусор, то да, не идентичны.

они неидентичны ещё и потому, что * не обходит подкаталоги, а ls -R обходит.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Странное поведение du.

Сообщение drBatty »

Lockywolf писал(а):
30.09.2012 19:42
Что за "текущий каталог" весом 25G?

откуда нам знать-то? man pwd вам поможет.
Lockywolf писал(а):
30.09.2012 19:42
Причем файлов в каталоге пара штук по 100кб.

ну значит, что либо вы не видите какие-то файлы, либо эти два файла _занимают_ 25Гб. И да, сами каталоги тоже имеют свой вес, обычно 4К, но не всегда. Вес самого каталога НЕ зависит от веса файлов в нём. Потому-что каталог - это каталог.
eddy писал(а):
01.10.2012 08:54
так что, с итоговым размером все ОК, а что это за "11G ." - я без понятия.

блин, ну что тут непонятного?! . 11Гб это размер, который занимает текущий каталог(точка). А 114Гб это сумма всех размеров, которая выведена командой du.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: