Невозможно использовать & ldquo; найти & rdquo; команду найти файл, созданный в моем домашнем каталоге

Я новичок в Linux. И я просто изучаю терминал.

Я создал файл touch Desktop/vvv. Теперь я обновил базу данных, используя sudo updatedb. Команда locate vvv не показывает никакого результата. Пока он отлично работает с find / -name vvv.

Я обнаружил, что locate, похоже, не ищет в моем домашнем каталоге, так как он показывает результаты из usr, var, slib, opt и т. д. каталоги.

Почему я говорю это, потому что, когда я пытаюсь locate использовать некоторый случайный файл, такой как complete, который находится в каталоге загрузки (который не является уникальным именем) , он покажет результаты из других каталогов, но не Download.

Update: Чтобы продемонстрировать это, я скопировал это из терминала:

aditya@ubuntu16:~$ cd /usr/ aditya@ubuntu16:/usr$ ls bin games include lib local locale sbin share src aditya@ubuntu16:/usr$ sudo touch aaaa [sudo] password for aditya: aditya@ubuntu16:/usr$ ls aaaa bin games include lib local locale sbin share src aditya@ubuntu16:/usr$ sudo updatedb aditya@ubuntu16:/usr$ locate aaaa /usr/aaaa /var/cache/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-6 aditya@ubuntu16:/usr$ cd ../home/aditya/Desktop/ aditya@ubuntu16:~/Desktop$ touch aaaa aditya@ubuntu16:~/Desktop$ updatedb updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db' aditya@ubuntu16:~/Desktop$ sudo updatedb sudo: unable to resolve host ubuntu16 aditya@ubuntu16:~/Desktop$ locate aaa /usr/aaaa /usr/share/app-install/desktop/jaaa:jaaa-alsa.desktop /var/cache/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-6 /var/cache/fontconfig/bab58bb527bb656aaa9f116d68a48d89-le64.cache-6 aditya@ubuntu16:~/Desktop$
2
задан 3 June 2017 в 19:09

4 ответа

updatedb сканирует всю вашу файловую систему и, как таковая, является довольно дорогостоящей операцией.

Как вы можете видеть, запуская через sudo, он не запускается после каждого создания файла, а не один раз в день или около того, чтобы дать вам общее представление о системных файлах. не создавать или обновлять базу данных для каждого пользователя, она создает или обновляет общую глобальную, содержащую манифест всей вашей системы.

Следовательно, по соображениям конфиденциальности по умолчанию updatedb не сканирует каталоги, которые не могут быть прочитаны каждым пользователем. пользователь. Это было бы риском для конфиденциальности, если бы вы не предоставляли доступ для чтения к вашему домашнему каталогу другим (как по умолчанию в большинстве дистрибутивов), но другие пользователи могут получить список ваших файлов через updatedb / locate.

Для поиска файлов в вашем домашнем каталоге или в любом месте, где требуется отражение последних изменений, вам следует рассмотреть возможность использования find или других утилит, которые сканируют файловую систему именно тогда, когда вам это нужно.

1
ответ дан 18 July 2018 в 12:20

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

, с другой стороны, поскольку вы знаете, что locate использует кэшированную базу данных для ускорения этого процесса, однако он кэширует только определенные каталоги, вы можете использовать /etc/updatedb.conf файл, чтобы определить, какие каталоги будут исключены из кэширования.

обновление данных с помощью sudo на машине с несколькими пользователями - это риск для безопасности, поэтому мы закончим работу с базой данных, содержащей все данные пользователей, и каждый может ее искать.

Для меня sudo updatedb работает нормально, поэтому проверьте /etc/updatedb.conf, чтобы убедиться, что на вашем компьютере было исключено что-либо.

Если вы хотите создать базу данных только для своего пользователя, вы можете использовать:

updatedb -l 0 --output=/home/username/.mydb.db

, затем выполните поиск:

locate -d ~/.mydb.db search-pattern

И используйте псевдонимы, чтобы сделать его более удобным:

alias lupdatedb="updatedb -l 0 --output=/home/username/.mydb.db" alias llocate="locate -d ~/.mydb.db"
2
ответ дан 18 July 2018 в 12:20

updatedb сканирует всю вашу файловую систему и, как таковая, является довольно дорогостоящей операцией.

Как вы можете видеть, запуская через sudo, он не запускается после каждого создания файла, а не один раз в день или около того, чтобы дать вам общее представление о системных файлах. не создавать или обновлять базу данных для каждого пользователя, она создает или обновляет общую глобальную, содержащую манифест всей вашей системы.

Следовательно, по соображениям конфиденциальности по умолчанию updatedb не сканирует каталоги, которые не могут быть прочитаны каждым пользователем. пользователь. Это было бы риском для конфиденциальности, если бы вы не предоставляли доступ для чтения к вашему домашнему каталогу другим (как по умолчанию в большинстве дистрибутивов), но другие пользователи могут получить список ваших файлов через updatedb / locate.

Для поиска файлов в вашем домашнем каталоге или в любом месте, где требуется отражение последних изменений, вам следует рассмотреть возможность использования find или других утилит, которые сканируют файловую систему именно тогда, когда вам это нужно.

1
ответ дан 24 July 2018 в 19:57
  • 1
    На самом деле я единственный пользователь моего ноутбука. Кроме меня только гостевая учетная запись есть, но я думаю, у всех есть такая учетная запись. – Aditya 3 June 2017 в 10:43
  • 2
    Спасибо, что поделились вашей озабоченностью (о нескольких пользователях), надеюсь, что мой ноутбук не взломан! ??? – Aditya 3 June 2017 в 10:51
  • 3
    Программа updatedb не знает, что вы единственный пользователь, и вы намерены сохранить ее таким образом в будущем. Было бы глупо, если бы он вел себя по-другому, основываясь на том, на момент ли вы единственный пользователь. Я сказал, что ваша система может потенциально иметь несколько пользователей (Linux - многопользовательская операционная система, вы знаете), и updatedb подготовлен к ее последствиям. – egmont 3 June 2017 в 16:20

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

, с другой стороны, поскольку вы знаете, что locate использует кэшированную базу данных для ускорения этого процесса, однако он кэширует только определенные каталоги, вы можете использовать /etc/updatedb.conf файл, чтобы определить, какие каталоги будут исключены из кэширования.

обновление данных с помощью sudo на машине с несколькими пользователями - это риск для безопасности, поэтому мы закончим работу с базой данных, содержащей все данные пользователей, и каждый может ее искать.

Для меня sudo updatedb работает нормально, поэтому проверьте /etc/updatedb.conf, чтобы убедиться, что на вашем компьютере было исключено что-либо.

Если вы хотите создать базу данных только для своего пользователя, вы можете использовать:

updatedb -l 0 --output=/home/username/.mydb.db

, затем выполните поиск:

locate -d ~/.mydb.db search-pattern

И используйте псевдонимы, чтобы сделать его более удобным:

alias lupdatedb="updatedb -l 0 --output=/home/username/.mydb.db" alias llocate="locate -d ~/.mydb.db"
2
ответ дан 24 July 2018 в 19:57
  • 1
    Я проверил /etc/updatedb.conf, вот что он показывает: PRUNE_BIND_MOUNTS = & quot; yes & quot; # PRUNENAMES = & quot; .git .bzr .hg .svn & quot; PRUNEPATHS = & quot; / tmp / var / spool / media /home/.ecryptfs / var / lib / schroot & quot; PRUNEFS = "NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs luster tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs & quot; – Aditya 3 June 2017 в 10:22
  • 2
    Я единственный пользователь моего ноутбука, но все же я попробовал его (updatedb -l 0 --output=/home/username/.mydb.db) ... здесь также не удалось найти .... – Aditya 3 June 2017 в 10:35

Другие вопросы по тегам:

Похожие вопросы: