Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Knoppix

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

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

Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

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

Друзья!

Shell

user@debian:~/Desktop/kalkul_$
user@debian:~/Desktop/kalkul_$ kalkul
bash: /usr/local/bin/kalkul: Нет такого файла или каталога
user@debian:~/Desktop/kalkul_$
Я его просил искать в каталоге /usr/local/bin/? Нет, не просил. Чего он туда лезет? Тем более, что:

Shell

user@debian:~/Desktop/kalkul_$ echo $PATH
/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
user@debian:~/Desktop/kalkul_$
Вот себе прописан спокойно правильный путь к файлу kalkul:

Shell

user@debian:~/Desktop/kalkul_$
user@debian:~/Desktop/kalkul_$ /usr/bin/kalkul
Я kalkul
user@:debian~/Desktop/kalkul_$
Нет же, оно упорно лезет в

Shell

/usr/local/bin/
, где kalkul отродясь не было. ЧЯДНТ? Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение Bizdelnick »

жучара писал(а):
23.06.2019 20:35
Чего он туда лезет?
type kalkul
file /usr/local/bin/kalkul
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

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

Shell

user@debian:~/Desktop/kalkul_$
user@debian:~/Desktop/kalkul_$ type kalkul
kalkul is hashed (/usr/local/bin/kalkul)
user@debian:~/Desktop/kalkul_$
user@debian:~/Desktop/kalkul_$
user@debian:~/Desktop/kalkul_$ file /usr/local/bin/kalkul
/usr/local/bin/kalkul: cannot open `/usr/local/bin/kalkul' (No such file or directory)
user@debian:~/Desktop/kalkul_$

:wacko:
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение Bizdelnick »

жучара писал(а):
23.06.2019 23:24
kalkul is hashed
hash kalkul
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

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

Да я уж понял. Это из разряда: придумали фишку, которая на хрен никому не нужна, так же, как механизм альтернатив, ни хрена не документировали её, но сидим сами собой довольные. И по умолчанию включили. Прямо бесит.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение Bizdelnick »

жучара писал(а):
23.06.2019 23:58
на хрен никому не нужна
Не говорите за всех.
жучара писал(а):
23.06.2019 23:58
ни хрена не документировали её
А Вы искать-то пробовали? Всё подробно документировано.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение s.xbatob »

Значит, этот файл есть или недавно был в /usr/local/bin И тут:
  • он удалён, но остался в кеше bash. Тут достаточно запустить новый экземпляр этого bash
  • он есть и он ELF, но хочет несуществующий загрузчик динамических библиотек, как в моём случае

Shell

[xbatob@pink bin]$ usbdevices
bash: /home/xbatob/.local/bin/usbdevices: No such file or directory
[xbatob@pink bin]$ ls -l /home/xbatob/.local/bin/usbdevices
-rwxr-xr-x. 1 xbatob xbatob 54580 ноя 25 2008 /home/xbatob/.local/bin/usbdevices
[xbatob@pink bin]$ file /home/xbatob/.local/bin/usbdevices
/home/xbatob/.local/bin/usbdevices: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.9, BuildID[sha1]=5688a28eefb7200609e743da8b80dc183409bba2, stripped
Не исключаю и другие варианты, но если это скрипт, а заявленного в заголовке интерапретатора не существует, то диагностика более вменяемая.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

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

Bizdelnick писал:
24.06.2019 00:37
А Вы искать-то пробовали? Всё подробно документировано.
я лодырь, конечно, но man hash мне нетрудно набрать.
man hash

Shell

HASH(3) Руководство программиста Linux HASH(3)



ИМЯ
hash - метод доступа к базе данных ассоциативных массивов

ОБЗОР
#include <sys/types.h>
#include <db.h>

ОПИСАНИЕ
Примечание: В этой странице описаны интерфейсы, предоставляемые glibc до версии 2.1. Начиная с
версии 2.2, glibc больше не поддерживает эти интерфейсы. Вероятно, вы ищите API, предоставляемое
библиотекой libdb.

Функция dbopen(3) — это библиотечный интерфейс к файлам баз данных. Один из поддерживаемых
форматов файлов — hash. Общее описание методов доступа к базам данных находится в dbopen(3). Эта
справочная страница содержит только информацию, относящуюся к ассоциативным массивам.

Структура данных ассоциативных массивов (хэш) расширяемая и динамична.

Специальная структура метода доступа данных, к которой обращается dbopen(3), задана в <db.h>
следующим образом:

typedef struct {
unsigned int bsize;
unsigned int ffactor;
unsigned int nelem;
unsigned int cachesize;
uint32_t (*hash)(const void *, size_t);
int lorder;
} HASHINFO;

Элементы этой структуры имеют следующее назначение:

bsize определяет размер корзины хэш-таблицы, по умолчанию равный 256 байтам. Этот параметр
может быть изменён, чтобы увеличить размер для таблиц, расположенных на диске, или
таблиц с элементами большого размера.

ffactor указывает на желаемую плотность хэш-таблицы. Плотность — это максимальное количество
ключей, которые могут находиться в одной корзине, определяющей, на какую величину
увеличивается или уменьшается таблица. Значение по умолчанию — 8.

nelem предполагаемый окончательный размер хэш-таблицы. Если значение не указано, или
установлено слишком маленьким, то размер хэш-таблиц увеличивается каждый раз, когда
добавляется новый ключ. Это может привести к снижению производительности. Значение по
умолчанию — 1.

cachesize предполагаемый максимальный размер кэша памяти в байтах. Эта величина только
рекомендация, метод доступа скорее выделит больше памяти, чем завершится с ошибкой.

hash пользовательская функция хэширования. Так как не существует функции, которая подходит
для любых данных, пользователю может показаться, что встроенная хэш-функция слишком
проста для некоторых типов данных. Определяемая пользователем функция должна иметь два
аргумента (указатель на строку байтов и длина) и возвращать 32-битную величину,
используемую как хэш-значение.

lorder порядок байт для целых чисел, хранящихся в метаданных базы данных. Значение должно
представлять порядок байт в виде целом числе, например, для прямого порядка (big endian)
будет использовано значение 4321. Если lorder равно 0 (т. е. порядок не определён), то
используется порядок байт машины. Если файл уже существует, то указываемое значение
игнорируется и будет использоваться порядок байт, определённый при создании.

Если файл уже существует (и не задан флаг O_TRUNC), то значения, определённые в параметрах bsize,
ffactor, lorder и nelem, игнорируются, и используются значения, которые были указаны при создании
дерева.

Если определена хэш-функция, то hash_open попытается определить, совпадает ли эта функция с той,
что использовалась при создании файла, и завершается с ошибкой, если это не так.

Обратно совместимый интерфейс, определённый в dbm(3) и ndbm(3), также существует, но он не
совместим с предыдущими реализациями по формату файлов.

ОШИБКИ
Функции метода доступа hash могут завершиться с ошибкой и присвоить errno любое значение из
определённых для библиотеки функций dbopen(3).

ДЕФЕКТЫ
Поддерживаются значения только с прямым и обратным порядком байт.

СМОТРИТЕ ТАКЖЕ
btree(3), dbopen(3), mpool(3), recno(3)

Dynamic Hash Tables, Per-Ake Larson, Communications of the ACM, April 1988.

A New Hash Package for UNIX, Margo Seltzer, USENIX Proceedings, Winter 1991.



4.4 Berkeley Distribution 2012-04-23 HASH(3)
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение Bizdelnick »

жучара писал(а):
24.06.2019 11:32
я лодырь, конечно, но man hash мне нетрудно набрать.
Попробуйте ещё набрать man bash-builtins. Также не помешало бы глянуть тут.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение s.xbatob »

Bizdelnick
Кстати, я не уверен, что информацию о том, что bash и прочие шеллы кешируют содержимое $PATH, можно легко найти.
Про то, когда execve() возвращает ENOENT (а это не обязательно отсутствие самого файла!), можно прочитать в его man page, но это тоже неочевидно
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение Bizdelnick »

s.xbatob писал:
24.06.2019 12:53
я не уверен, что информацию о том, что bash и прочие шеллы кешируют содержимое $PATH, можно легко найти.
Вообще-то я дал ссылку на официальную документацию bash, где это написано. Более того, это стандартное поведение.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение s.xbatob »

Bizdelnick
Нет там стандартного поведения :( XDB такой же сомнительный источник стандартов, как XDB
Тут вообще понятие стандарт условное. Это обратная сторона принуждению ходить строем. Но это же и призыв к экспериментам. Да, многие из них кончаются ничем, но кое-какие выживают и весьма успешно.

Ах, да, у теме вопроса:
Что же было? Нарваться на устаревший кеш на самом деле совсем сложно. А вот на кривой файл можно. Даже при том, что bash сам проверяет то, что вообще-то не должен.

Тьфу, как XBD :)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение Bizdelnick »

s.xbatob писал:
24.06.2019 13:59
XDB такой же сомнительный источник стандартов
Вообще-то стандарт называется Single UNIX Specification, и лучшего нам не дадено.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

Сообщение s.xbatob »

Bizdelnick
Ещё раз: тут стандартов нет. То есть мы не ОБЯЗАНЫ следовать вообще ничему. Это просто правила хорошего тона к другим разработчикам. Естественный огтбор. Но работает.
Относиться к этому мы можем по-разному, но уже полвека модель UNIX живёт и процветает.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему исполняемый файл ищется в каталоге /usr/local/bin/, но не ищется в каталоге /usr/bin/?

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

s.xbatob писал:
24.06.2019 13:59
Что же было?
установил/удалил пакет

Shell

make install/make uninstall
, вот оно и было.
Я просто читаю маны.
Спасибо сказали:
Ответить