Рейтинг:4

Как подсчитать все файлы в моей системе?

флаг ng

Мне нужно посмотреть, сколько файлов у меня во всей системе. В частности, мне нужно посчитать все файлы из / (так по всей системе), и мне нужно получить номер в конце. Так что во всей системе 10000 файлов.

Как я могу это сделать? Я надеюсь, что вы можете помочь!

флаг cn
«В частности, мне нужно подсчитать все файлы из / (то есть во всей системе)», я вижу здесь проблему ... это также будет учитывать tmpfs, и это - виртуальные, а не фактические файлы.
флаг st
Как вы определяете «все файлы»? Все иноды? Все ссылки? Только обычные файлы или специальные файлы? Какие типы специальных файлов? Специальные файлы каталога? Специальные файлы персонажей? Блокировать специальные файлы? Специальные файлы сокета? Специальные файлы Symlink? Трубные специальные файлы? И в какой момент? Например, когда вы подключаете мышь, автоматически создается специальный файл символов, поэтому в зависимости от того, подключена ли ваша мышь или нет, номер будет другим.
Eric Duminil avatar
флаг us
Просто интересно, зачем вам эта информация?
terdon avatar
флаг cn
Пожалуйста [отредактируйте] свой вопрос и уточните, что вы подразумеваете под «файлами», потому что ответ будет очень сильно зависеть от того, что вы на самом деле хотите подсчитать. Следует ли учитывать символические ссылки? Должны ли жесткие ссылки считаться одним файлом или двумя? Нужно ли считать каталоги? Как насчет файлов устройств? Или именованные каналы? А как насчет файлов, которые живут только в оперативной памяти?
флаг in
Материалы @Rinzwind на tmpfs могут быть или не быть частью того, что ОП хочет здесь учитывать. Более серьезные проблемы — это `/sys`, `/proc` и `/dev`, которые OP почти наверняка не хочет учитывать.
Рейтинг:16
флаг in

Использовать дф -я чтобы увидеть количество Иноды используется -> Я использовал поле.

Или ограничить вывод, например:

df --output=источник,цель,используется

Обратите внимание, что цифры из найти и дф -я не обязательно будет соответствовать:

  • дф -я также считает каталоги
  • файлы, которые ссылаются на один и тот же индексный дескриптор (жесткие ссылки), будут учитываться только один раз.
  • Некоторые специальные индексные дескрипторы, которые не связаны ни с каким каталогом для внутреннего использования, не учитываются.
  • дф не будет переходить в смонтированные каталоги, например. /ботинок или если у вас есть отдельный /дом раздел. С найти, вы можете получить такое поведение, используя -xdev флаг.

Проверять этот ответ на U&L SE.

Я ожидаю, что результат будет немного меньше, чем подсчет df -i, поскольку в некоторых файловых системах (включая ext4) есть несколько специальных инодов, которые не связаны ни с каким каталогом для внутреннего использования.

bac0n avatar
флаг cn
Скорость `df -i` я подозреваю, что она откуда-то тянет, знаете откуда?
pLumo avatar
флаг in
@bac0n [`df` использует системный вызов `statvfs()` и запрашивает у файловой системы текущую статистику пространства](https://unix.stackexchange.com/questions/445764/how-does-df-know-how- много-пространства-используется-без-необходимости-использовать-все-fi).
флаг vn
`find` и `df -i` не будут совпадать, возможно, по другой причине, потому что `find` будет проходить по смонтированным папкам. Чтобы избежать этого, используйте `-xdev`, как `sudo find / -xdev ***`
KeyWeeUsr avatar
флаг pl
@PaddyLandau Хорошая мысль о «установленной» части. `/` — это раздел на устройстве, но разделов или даже других папок может быть больше, которые можно монтировать друг через друга! Возможно, OP следует переформулировать в соответствии с тем, как монтируется файловая система Unix, иначе это может быть строго `/` количество файлов разделов (так что без монтирования `/home`, `/boot` и т. д. Может быть, поможет таблица монтирования в вопросе тоже.
pLumo avatar
флаг in
Истинный! Спасибо, я добавил эту информацию.
Рейтинг:14
флаг tm

Ты можешь использовать найти / чтобы перечислить все файлы. Когда вывод find перенаправляется, он выводит имена файлов, содержащие новые строки, как охватывающие несколько строк, поэтому вы не можете просто подсчитать строки. Однако вы можете вывести что-то еще для каждого файла и подсчитать символы:

sudo find / -type f -printf 1 | туалет -с

Без судо, вы, вероятно, не можете получить доступ ко всем путям, поэтому вы не можете сосчитать все файлы.

флаг cn
`locate` намного быстрее :D, если вы не обрезаете каталоги
флаг cn
подсчет инодов, вероятно, тоже быстрее.
флаг tm
У `locate` есть доступ ко всем файлам?
флаг cn
да, но вы можете использовать .conf для исключения каталогов, и он по умолчанию удаляет некоторые каталоги (например, tmpfs и /media)
bac0n avatar
флаг cn
думаю, что `locate -c '*'` является приемлемым балансом, как предлагает @Rinzwind.
флаг cn
Еще одна проблема: я полагаю, это тоже будет считать ссылки? Так что найдите: D Подсчет инодов - лучший метод.
qwr avatar
флаг kr
qwr
считает ли `find` блочные устройства и специальные системные файлы?
Ruslan avatar
флаг bv
_"``find` не должен выводить файлы с символами новой строки в именах на нескольких строках"_ какая-либо ссылка на это? Как он должен печатать в этом случае?
флаг tm
@Руслан: Попробуйте посмотреть. `коснитесь $'a\nb' ; найти`
Ruslan avatar
флаг bv
`коснитесь $'a\nb'; найти | od -tx1` выводит `2e 0a 2e 2f 61 0a 62 0a`, который содержит `0a` между `61` и `62`. Поскольку ваш код в ответе действительно передает вывод в канал, `wc` получит две строки для этого файла. Вы также можете увидеть переданный вывод, передав команду `cat`: `find | кот`.
флаг st
Это исключит каталоги, которые также являются файлами.
флаг tm
@Ruslan: Вот почему я также включил вторую команду.
флаг tm
Хорошо, переформулировал.
флаг vn
Я думаю, что в вашем ответе должны быть упомянуты смонтированные папки из других разделов. Чтобы включить их, используйте свой ответ, как указано (но с `sudo`). Чтобы исключить смонтированные разделы, используйте `-xdev`, а `sudo find / -xdev…`. Это может стать более сложным, например. если вы хотите включить `/home`, но не другие смонтированные разделы.
Peter Cordes avatar
флаг fr
Если вы опустите `-type f`, будут подсчитаны все файлы, включая каталоги, а не только *обычные* файлы. (Используйте `-not -name .`, чтобы исключить текущий каталог, если вы не указали явный аргумент `/`)

Ответить или комментировать

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