locate не находит все нужные файлы

4500
neubert

Я набираю в locate gmp.hприглашении и получаю следующее:

/usr/src/linux-headers-3.13.0-24/include/linux/igmp.h /usr/src/linux-headers-3.13.0-24/include/uapi/linux/igmp.h /usr/src/linux-headers-3.13.0-24-generic/include/linux/igmp.h 

Но когда я это ls /usr/include/x86-64-linux-gnu/вижу, я вижу это:

a.out.h asm bits c++ fpu_control.h gmp.h gnu ieee754.h sys 

Почему не locateнайти /usr/include/x86-64-linux-gnu/gmp.h?

редактировать: ls -l /usr/include/x64-64-linux-gnu/gmp.hговорит это:

ls: cannot access /usr/include/x64-64-linux-gnu/gmp.h: No such file or diretory 

Почему бы ls /usr/include/x86-64-linux-gnu/сказать, что существует, когда ls -l /usr/include/x64-64-linux-gnu/gmp.hговорит, что нет?

Скриншот:

enter image description here

3
Когда были созданы файлы, которые вы ищете? Когда вы в последний раз обновляли базу данных локаций? (До или после добавления файлов)? Hennes 9 лет назад 1
Несколько минут назад. Я не знал, что БД нужно было обновлять. Это решило проблему - спасибо! neubert 9 лет назад 1
Не могли бы вы запустить "ls -l /usr/include/x86-64-linux-gnu/gmp.h" и добавить вывод к вашему вопросу? Kenster 9 лет назад 0
Готово. Смотрите мой обновленный вопрос neubert 9 лет назад 0
Попробуйте "ls -l / usr / include / x64-64-linux-gnu". Я предполагаю, что запись `gmp.h` является символической ссылкой, указывающей на несуществующий файл. Kenster 9 лет назад 0
Похоже, это существует для меня, когда я делаю `ls -l`. Я обновил свой пост скриншотом .. neubert 9 лет назад 0
Я удалил свой ответ. Вы говорили, что файл находится в `/ usr / include / x86-64-linux-gnu /`. Но, согласно вашему скриншоту, он на самом деле находится в `/ usr / include / x86_64-linux-gnu /` (подчеркивание вместо тире). Kenster 9 лет назад 1

1 ответ на вопрос

4
Hennes

locateне находит файлы в файловой системе. Вместо этого он ищет в базе данных, которая содержит все файлы.

Эта база данных обычно обновляется один раз в день, обычно около 3 часов утра.

Вы можете обновить его вручную с помощью команды, например updatedb(или, если вы не вошли в систему с достаточными учетными данными:) sudo updatedb. Для получения дополнительной информации см man updatedb.


Основываясь на вашем посте, который включал / usr / src / linux-headers-3, я предположил, что вы запускаете его в дистрибутиве linux. В других операционных системах команда locate может работать немного иначе. Например, во FreeBSD команда для ручного обновления базы данных locate должна быть запущена и /usr/libexec/locate.updatedbеженедельно обновляется /etc/periodic/weekly/310.locate.