Как определить, сколько файлов в рамках каталога без подсчета?

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

Используйте OpenVPN, особенно если это - от компьютера к компьютеру (если некоторые клиенты являются, скажем, телефонами, то используйте IPSEC/PPTP, поскольку клиенты OpenVPN не легко доступны на таких устройствах). Вот ПРАКТИЧЕСКОЕ РУКОВОДСТВО:

http://openvpn.net/index.php/open-source/documentation/howto.html

Об/мин для OpenVPN находится в RPMForge. ПРАКТИЧЕСКОЕ РУКОВОДСТВО для установки того репозитория: http://wiki.centos.org/AdditionalResources/Repositories/RPMForge Так, после того как у Вас есть настроенный repo, можно просто работать yum install openvpn.

Если Вы просто настраиваете единственный клиент, то смотрите на мини-практическое руководство OpenVPN при конфигурировании статических ключей:

http://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html

Более типичное (и гибкий) конфигурация для OpenVPN должно создать Ваш собственный мини-Центр сертификации. Сервер проверяет клиенты (и клиенты проверяют сервер, для защиты от атак "человек посередине"), использование сертификатов, подписанных этим мало Приблизительно. OpenVPN включает много сценариев для подъема этого набора. Но из Вашего сценария можно, вероятно, обойтись статической key/pre-shared секретной конфигурацией.

3
16.08.2013, 01:39
3 ответа

Размер каталога (как замечено с ls -ld /var/lib/php/sessions) может дать признак. Если это является маленьким, нет многих файлов. Если это является большим, там может быть много записей, или в прошлом, возможно, были многие.

Список содержания, пока Вы не делаете stat отдельные файлы, не должен брать намного намного дольше, чем чтение файла тот же размер.

То, что могло бы произойти, - то, что у Вас есть псевдоним для ls это делает ls -F или ls --color. Те опции вызывают lstat системный вызов, который будет выполнен на каждом файле для наблюдения, например, если они - файл или каталог.

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

command ls -f /var/lib/php/sessions | wc -l

Если не слишком много имен файлов имеют символы новой строки, которые должны дать Вам хорошую оценку.

$ ls -lhd 1
drwxr-xr-x 2 chazelas chazelas 69M Aug 15 20:02 1/
$ time ls -f 1 | wc -l
3218992
ls -f 1  0.68s user 1.20s system 99% cpu 1.881 total
wc -l  0.00s user 0.18s system 9% cpu 1.880 total
$ time ls -F 1 | wc -l
<still running...>

Можно также вывести количество файлов там путем вычитания количества уникальных файлов в другом месте в файловой системе от количества используемого inodes в выводе df -i.

Например, если файловая система смонтирована на /var, с GNU find:

find /var -xdev -path /var/lib/php/sessions -prune -o \
  -printf '%i\n' | sort -u | wc -l

Найти количество файлов не в/var/lib/php/sessions. Если Вы вычитаете это к IUsed поле в выводе df -i /var, Вы получите приближение (потому что некоторые специальные inodes не связаны ни с каким каталогом в типичной файловой системе расширения) количества файлов, связанных с /var/lib/php/sessions это иначе не связано больше нигде (обратите внимание, что/var/lib/php/sessions мог очень хорошо содержать один миллиард записей для того же файла (хорошо на самом деле, максимальное количество ссылок на файл будет намного ниже, чем это в большинстве файловых систем), так, чтобы метод не был надежным).

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

rm -r, когда удаление файлов, первые списки содержание каталога, и затем звонит unlink() для каждого файла. И для каждого файла, система имеет к поиску файл в том огромном каталоге, который, если это не хешируется, может быть очень дорогим.

3
27.01.2020, 21:17

Я предполагаю, что Вы могли использовать ls -1 /var/lib/php/sessions | wc -l по SSH

Обратите внимание, что это ls -(one) и ws -(letter l)

1
27.01.2020, 21:17
  • 1
    Попробованный это. Это шло приблизительно в течение минуты теперь. Никакие результаты все же. Какие-либо идеи? –  Pangamma 15.08.2013, 20:34
  • 2
    @Pangamma чрезвычайно большой каталог собирается требовать времени в чтение. –  jordanm 15.08.2013, 20:43
  • 3
    Не должно требоваться большего количества времени когда простое ls... Можно ли сделать ls /var/lib/php/sessions ? –  Mash 15.08.2013, 20:44
  • 4
    @mash я видел, что каталоги с сотнями тысяч файлов занимают 10 минут к ls. спасибо –  jordanm 15.08.2013, 20:47
  • 5
    Портативный и канонический способ сделать, который является с ls -f –  Stéphane Chazelas 15.08.2013, 21:49

В ext2/3/4 можно сделать некоторое приближение на основе размера самого каталога. Это не очень точно, но позволяет образованное предположение без "подсчета".

Каталог запускается на уровне 4 096 байтов по умолчанию. Поскольку это получает больше записей, это увеличивается в размере (но никогда не будет уменьшаться снова). После некоторого тестирования кажется, что каждая запись берет 12 байтов и растет на 4 096, когда это достигает предела. Это означает, что, если размер текущего каталога 16384, Вы имели между 1 024 и 1 365 записями когда-то.

Существует также прием к просмотру файлов в этих каталогах сразу. Когда Вы работаете ls, весь каталог прочитан и затем отсортирован. Можно отключить использование сортировки ls -1U.

1
27.01.2020, 21:17
  • 1
    Хорошо имя файла, которое является 200 символами долго, будет обычно использовать больше это 12 байтов. –  Stéphane Chazelas 15.08.2013, 21:52
  • 2
    @StephaneChazelas хорошее примечание, это - довольно неточный способ вычислить. –  jordanm 15.08.2013, 22:07

Теги

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