Я работаю над преемником auto-apt
, который индексирует информацию о пакете, используемую apt
, и отслеживает запросы ввода-вывода файлов, содержащихся в этих пакетах, как программную оболочку и устанавливает их автоматически.
Поэтому я хотел бы знать, сколько пакетов примерно в Ubuntu (эффективность 10 достаточно), чтобы я мог провести некоторые оценки сложности алгоритма.
Оригинальный код, кажется, не поддерживается на протяжении десятилетий, и автор недоступен по последнему известному адресу (я написал его год назад, но он не ответил). Программа, похоже, вышла из Ubuntu в 17.10. Кроме того, код не содержит комментариев и тестов (никогда не делайте этого, пожалуйста!), И мне нужно угадать, какова была цель древовидной структуры данных (это могло быть проблемой программирования) и могу ли я просто замените его на быструю стороннюю реализацию значения ключа.
Команда apt-file
может использоваться для поиска того, какой пакет предоставляет данный файл. Вам нужно запустить apt-file update
, чтобы он мог загрузить список файлов, и:
$ apt-file update
apt-file is now using the user's cache directory.
If you want to switch back to the system-wide cache directory,
run 'apt-file purge'
Downloading complete file http://jp.archive.ubuntu.com/ubuntu/dists/xenial/Contents-amd64.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
9 31.7M 9 2927k 0 0 282k 0 0:01:54 0:00:10 0:01:44 481k
Итак, Contents-amd64.gz
- это файл размером 31 МБ после сжатия. Открывая его в Vim, я вижу, что у него 5400831 строк, в заголовке около 30 строк:
This file maps each file available in the Ubuntu
system to the package from which it originates. It includes packages
from the DIST distribution for the ARCH architecture.
You can use this list to determine which package contains a specific
file, or whether or not a specific file is available. The list is
updated weekly, each architecture on a different day.
When a file is contained in more than one package, all packages are
listed. When a directory is contained in more than one package, only
the first is listed.
The best way to search quickly for a file is with the Unix `grep'
utility, as in `grep <regular expression> CONTENTS':
$ grep nose Contents
etc/nosendfile net/sendfile
usr/X11R6/bin/noseguy x11/xscreensaver
usr/X11R6/man/man1/noseguy.1x.gz x11/xscreensaver
usr/doc/examples/ucbmpeg/mpeg_encode/nosearch.param graphics/ucbmpeg
usr/lib/cfengine/bin/noseyparker admin/cfengine
This list contains files in all packages, even though not all of the
packages are installed on an actual system at once. If you want to
find out which packages on an installed Debian system provide a
particular file, you can use `dpkg --search <filename>':
$ dpkg --search /usr/bin/dselect
dpkg: /usr/bin/dselect
FILE LOCATION
Итак, у нас есть:
В моей системе 17.10 у меня установлено 181 367 файлов и каталогов (это число отображается, например, всякий раз, когда вы apt install
что-то) в 1360 пакетах (apt list --installed | wc -l
). Это в среднем около 133 файлов / каталогов на пакет.
В 17.10 имеется 58 108 пакетов (apt list | grep -c artful
), поэтому если предположить, что мои установленные пакеты являются репрезентативными, то получается примерно 7 749 038 файлов и каталогов.
promptdir() { PROMPT_DIRTRIM=$1; }
только для создания живым легче...
– dgoosens
17 August 2018 в 03:10
promptdir() { PROMPT_DIRTRIM=$1; }
только для создания живым легче...
– dgoosens
17 August 2018 в 03:10