Как на самом деле узнать, какому пакету принадлежит файл?

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение жучара »

Друзья! Debian 12, нулёвая, изменения минимальны. Файл ifconfig будем искать. apt-file обновлён

Shell

$ whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
$
$ apt-file search /usr/sbin/ifconfig
$
$ dpkg -S /usr/sbin/ifconfig
dpkg-query: не найден путь, подходящий под шаблон /usr/sbin/ifconfig
$
Хотя на самом деле файл /usr/sbin/ifconfig принадлежит пакету net-tools
/usr/bin/mount тоже не может найти, а вот /usr/bin/ssh может. Через раз ищется. Непонятно, короче. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Red Gremlin
Сообщения: 512
Статус: самоучка
ОС: Rosa 2016 Fresh

Re: Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение Red Gremlin »

жучара писал(а):
29.07.2024 09:13
Хотя на самом деле файл /usr/sbin/ifconfig принадлежит пакету net-tools
Нет, пакету net-tools принадлежит файл /sbin/ifconfig. Просто в 12-ом дебиане /sbin является ссылкой на usr/sbin.
Из-за этой путаницы с /bin, /sbin, /usr/bin, /usr/sbin я всегда искал принадлежность команды к пакету через apt-file find bin/cmdname
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Re: Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение жучара »

Red Gremlin писал:
29.07.2024 09:32
жучара писал(а):
29.07.2024 09:13
Хотя на самом деле файл /usr/sbin/ifconfig принадлежит пакету net-tools
Нет, пакету net-tools принадлежит файл /sbin/ifconfig. Просто в 12-ом дебиане /sbin является ссылкой на usr/sbin.
Из-за этой путаницы с /bin, /sbin, /usr/bin, /usr/sbin я всегда искал принадлежность команды к пакету через apt-file find bin/cmdname
спасибо, а вот неисполняемый файл, к, примеру, как про него узнать:

Shell

$ apt-file search /etc/network/interfaces
switchconf: /usr/share/doc/switchconf/examples/home/etc/network/interfaces
switchconf: /usr/share/doc/switchconf/examples/work/etc/network/interfaces
$
$
$ dpkg -S /etc/network/interfaces
dpkg-query: не найден путь, подходящий под шаблон /etc/network/interfaces
$
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21046
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение Bizdelnick »

жучара писал(а):
01.08.2024 13:24
а вот неисполняемый файл, к, примеру, как про него узнать
Не имеет значения, исполняемый ли он. Просто этот файл не входит в состав пакета, а генерируется постинсталляционным скриптом.

Shell

% grep -F /etc/network/interfaces /var/lib/dpkg/info/*
/var/lib/dpkg/info/ifupdown.list:/etc/network/interfaces.d
/var/lib/dpkg/info/ifupdown.postinst: if [ ! -f /etc/network/interfaces ] ; then
/var/lib/dpkg/info/ifupdown.postinst: echo "Creating /etc/network/interfaces."
/var/lib/dpkg/info/ifupdown.postinst: echo "# interfaces(5) file used by ifup(8) and ifdown(8)" > /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.postinst: echo "# Include files from /etc/network/interfaces.d:" >> /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.postinst: echo "source /etc/network/interfaces.d/*" >> /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.postinst: report_warn "/etc/network/interfaces does not exist"
/var/lib/dpkg/info/ifupdown.postrm: # Note: We don't remove /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.preinst:if [ -f /etc/network/interfaces ] && ! grep -q '^[^#]' /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.preinst: f=/etc/network/interfaces
/var/lib/dpkg/info/ifupdown.preinst: if [ `wc -c < /etc/network/interfaces` -eq 2466 ]; then
/var/lib/dpkg/info/ifupdown.preinst: echo -n "Removing old dummy /etc/network/interfaces: "
/var/lib/dpkg/info/ifupdown.preinst: rm /etc/network/interfaces
%
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Re: Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение жучара »

Bizdelnick писал:
01.08.2024 15:40
жучара писал(а):
01.08.2024 13:24
а вот неисполняемый файл, к, примеру, как про него узнать
Не имеет значения, исполняемый ли он. Просто этот файл не входит в состав пакета, а генерируется постинсталляционным скриптом.

Shell

% grep -F /etc/network/interfaces /var/lib/dpkg/info/*
/var/lib/dpkg/info/ifupdown.list:/etc/network/interfaces.d
/var/lib/dpkg/info/ifupdown.postinst: if [ ! -f /etc/network/interfaces ] ; then
/var/lib/dpkg/info/ifupdown.postinst: echo "Creating /etc/network/interfaces."
/var/lib/dpkg/info/ifupdown.postinst: echo "# interfaces(5) file used by ifup(8) and ifdown(8)" > /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.postinst: echo "# Include files from /etc/network/interfaces.d:" >> /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.postinst: echo "source /etc/network/interfaces.d/*" >> /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.postinst: report_warn "/etc/network/interfaces does not exist"
/var/lib/dpkg/info/ifupdown.postrm: # Note: We don't remove /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.preinst:if [ -f /etc/network/interfaces ] && ! grep -q '^[^#]' /etc/network/interfaces
/var/lib/dpkg/info/ifupdown.preinst: f=/etc/network/interfaces
/var/lib/dpkg/info/ifupdown.preinst: if [ `wc -c < /etc/network/interfaces` -eq 2466 ]; then
/var/lib/dpkg/info/ifupdown.preinst: echo -n "Removing old dummy /etc/network/interfaces: "
/var/lib/dpkg/info/ifupdown.preinst: rm /etc/network/interfaces
%
ну да. Удаление ifupdown + удаление /etc/network/interfaces + инсталляция ifupdown дало /etc/network/interfaces

...Остальные посстинсталляционные скрипты не не обращаются к файлу /etc/network/interfaces. При перезагрузке файл /etc/network/interfaces не меняется (но если разве что какая-нибудь программа его поменяет, но мы говорим о нулёвой установке.). Тем не менее после установки видим, что в файл /etc/network/interfaces как-то добавляются строки

Shell

# The loopback network interface
auto lo
iface lo inet loopback
Кто и когда их туда заносит для меня тайна. Впрочем, это уже совсем другая история.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Re: Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение жучара »

А как же быть с файлом /usr/bin/bash? Это вполне себе большущий исполняемый файл, не ссылка никакая:

Shell

user@debian:~$ whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz
user@debian:~$
user@debian:~$ ls -l /usr/bin/bash
-rwxr-xr-x 1 root root 1265648 апр 24 2023 /usr/bin/bash
user@debian:~$
user@debian:~$ file /usr/bin/bash
/usr/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0b6b11360e339f231f17484da2c87d0d78554e31, for GNU/Linux 3.2.0, stripped
user@debian:~$
И собственно его поиск в каких-либо пакетах ничего не даёт:

Shell

user@debian:~$ apt-file search bin/bash
bash: /bin/bash
bash: /usr/bin/bashbug
bash-static: /bin/bash-static
bpfcc-tools: /usr/sbin/bashreadline-bpfcc
bpftrace: /usr/sbin/bashreadline.bt
erlang-redis-client: /usr/lib/erlang/lib/redis_client-1.2.0/ebin/basho_bench_driver_eredis.beam
erlang-redis-client: /usr/lib/erlang/lib/redis_client-1.2.0/ebin/basho_bench_driver_erldis.beam
libbpf-tools: /usr/sbin/bashreadline
node-jake: /usr/share/nodejs/jake/bin/bash_completion.sh
python3-bashate: /usr/bin/bashate
user@debian:~$
============================================

/usr/bin/bash копия /bin/bash (md5sum). Получается, когда-то кто-то скопировал /bin/bash в /usr/bin/bash. Но кто и когда?

...Вот постинсталляционный скрипт пакета bash:

Shell

$ cat postinst
#! /bin/bash

set -e

# This should never happen.
if [ ! -e /bin/sh ]; then
ln -s bash /bin/sh
fi

update-alternatives --install \
/usr/share/man/man7/builtins.7.gz \
builtins.7.gz \
/usr/share/man/man7/bash-builtins.7.gz \
10 \
|| true

# Automatically added by dh_installmenu/13.11.4
if [ "$1" = "configure" ] && [ -x "`command -v update-menus`" ] && [ -x "$DPKG_ROOT`command -v update-menus`" ]; then
update-menus
fi
# End automatically added section


exit 0
$
Никто никуда ничё не копирует. Ну и как меня учили:

Shell

user@debian:~$ sudo grep -F /usr/bin/bash /var/lib/dpkg/info/*
/var/lib/dpkg/info/bash.list:/usr/bin/bashbug
user@debian:~$


Cтрого отвечая на вопрос, файл /usr/bin/bash никакому пакету не принадлежит. Но берётся-то он откуда?
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5373
ОС: Gentoo

Re: Как на самом деле узнать, какому пакету принадлежит файл?

Сообщение /dev/random »

жучара писал(а):
28.10.2024 16:34
/usr/bin/bash копия /bin/bash (md5sum). Получается, когда-то кто-то скопировал /bin/bash в /usr/bin/bash. Но кто и когда?

Shell

$ ls /bin -lh
lrwxrwxrwx 1 root root 7 May 6 2023 /bin -> usr/bin
Спасибо сказали: