У меня есть установка 16.04, настроенная с папкой «Загрузки», указывающей на второй жесткий диск (показывает Downloads -> /mnt/data/Downloads
). Когда я запускаю locate
поиск файлов, он не показывает никаких файлов на этом диске. Я запустил sudo updatedb
и проверяю свой updatedb.conf
(ничего не вижу, кроме /mnt
каталога или файлов, которые я ищу)
Для меня самое интересное, когда я cd /mnt/data/Downloads
потом бегунайтиЯ вижу все в этом каталоге, но не на моем основном диске. Это почти как если бы у Ubuntu было две разные базы данных locate в зависимости от того, на каком диске я нахожусь.
Как я могу исправить эту ситуацию?
Дополнительный: Вот мойupdatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"
Я попробовал бегать sudo locate
, и это не изменило результаты. Я попробовал бегать mlocate
, sudo mlocate
и это тоже не изменило результаты.
Я также попытался найти другой updatedb.conf
файл, но ничего не вышло.
Обновление 1:Файловая система на вторичном диске — ext4.
Обновление 2:Ничего не зашифровано. Я погуглил и заметил, что у некоторых пользователей это проблема.
Обновление 3:Я еще больше запутался. Я пытаюсь найти все файлы .iso на моей машине, ниже приведены результаты:
@:~$ найдите FreeNAS
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
@:~$ найдите *.iso
/home/hudsona/ubuntu-16.04.1-server-amd64.iso
@:~$ найти iso
/home//ubuntu-16.04.1-server-amd64.iso
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
(и куча других результатов)
@:~$ найти . -тип f -имя "*.iso"
./ubuntu-16.04.1-server-amd64.iso
Обновление 4:Больше результатов:sudo find / -type f -name "*.iso"дает мне желаемые результаты, но требуется много времени, чтобы получить эти результаты.
Я хотел покопаться и посмотреть, действительно ли у меня две разные базы данных, поскольку я получаю разные результаты поиска в зависимости от того, на каком диске я нахожусь. После проверки страницы MAN я поискал файл mlocate.db в своей системе, и вот мои результаты:
- /usr/share/man/man5/mlocate.db.5.gz
- /var/lib/mlocate/mlocate.db
- /var/lib/mlocate/mlocate.db.VEzhqO
Я подумал, что файл .VEzhqO может быть вторичной базой данных, поэтому я попытался указать это с помощью флага -d для команды locate. Это дало мне ошибку "can not stat". Тайна продолжается.
Обновление 5:Я воспроизвел это на другой машине с Ubuntu, серверная версия 16.04.
Обновление 6:Итак, у меня есть решение, найти "*.iso", но теперь мне интересно, "почему" это работает. Я посмотрел на страницу MAN и эти две ссылки:http://www.linfo.org/locate.htmlиhttp://www.howtogeek.com/112674/как-найти-файлы-и-папки-в-linux-используя-командную-строку/. Ничто из этого не проливает света на то, почему это работает.
решение1
Во всех оболочках использование *.iso
расширяет список файлов перед вызовом команды, поэтому в
locate *.iso
оболочка автоматически расширяет выражение, создавая список имен файлов из файлов в текущем каталоге. Предположим, что в текущем каталоге есть два файла iso file1.iso
и file2.iso
; результирующая команда будет на самом деле:
locate file1.iso file2.iso
то оболочка выполнит его. Итак, locate
попытается найти файлы, содержащие эти две строки, фактически выполнив поиск "*file1.iso*"
или "*file2.iso*"
.
Вот почему locate iso
find больше файлов, чем locate *.iso
; locate
на самом деле ищет "*iso*"
в первом случае. Решение (и правильный способ его использования, IMHO) — это цитирование специальных символов оболочки, когда команда принимает выражения с их использованием, как в следующей find
команде:
find /etc/ -type f -iname "*.conf"
Если в текущем каталоге есть два или более файлов conf и мы не используем кавычки, команда find не сможет проанализировать второе сгенерированное имя файла, и наша густота волос значительно уменьшится в отчаянии и поиске в Google ;D, потому что сообщение об ошибке, похоже, не связано с отсутствием кавычек.
решение2
По какой-то причине,
locate *.iso
ищет только файлы .iso в текущем каталоге, пока
locate "*.iso"
ищет все ваши диски. Это решение моей проблемы.
решение3
Функция Locate автоматически применяется *
до и после строки, поэтому самое простое решение:
locate .iso
У меня также смонтированы два диска Windows. При запуске locate
с раздела Ubuntu я получаю результаты, похожие на ваш вопрос. Используя этот ответ, получаются правильные результаты:
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate "*.iso" | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate *.iso | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate .iso | wc -l
45