Когда я делаю:
locate makeinfo
ИЛИ
find / -name "*makeinfo*"
Я ничего не получаю.
Но когда я это делаю makeinfo --help
, он выдает мне надлежащую справочную информацию.
Как это возможно? Если makeinfo
это исполняемый файл, он должен быть расположенгде-то, правильно? Или это может быть псевдоним, которым он не является. Я проверяю .bashrc
, .bash_aliases
и все эти файлы. Я не могу себе представить, как это может произойти.
В чем причины такого странного поведения?
Редактировать: type makeinfo
и which makeinfo
оба вывода /usr/bin/makeinfo
.
решение1
Я нашел проблему.
Кажется, это locate
быстро, потому что он полагается на базу данных, которую он создает, чтобы искать вещи быстрее. Эта база данных обновляется ежедневно. Команда updatedb
делает это. Как оказалось, updatedb
запускается каждые 24 часа, и 24 часа не прошли, когда я попытался найти файл с помощью locate
, с момента создания файла. После запуска sudo updatedb
, locate смог найти файл.
Для получения дополнительной информации я рекомендую прочитать страницы руководства locate
и .updatedb
Что касается find
, то, видимо, я проявил нетерпение и не стал дожидаться его завершения.
решение2
Я не использую или не знаю много о 'locate(1)'. Но 'find(1)' может не найти вашу команду, потому что по умолчанию она не пересекает линии файловой системы. Команда makeinfo, скорее всего, находится в /usr/bin (введите, which makeinfo
чтобы найти ее), а раздел '/usr' может находиться в другой файловой системе.
EDIT: Ого! Я вижу проблему! не используйте "*makeinfo*". Используйте 'makeinfo'. Если вы действительно хотите найти файл, в котором где-то есть строка 'makeinfo', используйте: find / -type f -name '*makeinfo*'
. То есть, сравнивайте только с файлами (не с каталогами — гораздо быстрее) и используйте одинарные кавычки, а не двойные.
Окончательное ПРАВКА: Мой ответ был /далеко/ неверным. Его проблемы не были связаны с двойными кавычками.