Ответ
 
LinkBack Опции темы
Старый 07.04.2012, 21:07      #1 (ссылка на пост)
levinkv
Активный пользователь
 
Аватар для levinkv
 
Регистрация: 23.01.2012
Сообщений: 54
levinkv скоро придёт к известности
Информация

По умолчанию 7 примеров команды locate в Linux – mlocate & updatedb

Всем привет!

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

На помощь может прийти команда locate. locate ищет файлы очень быстро, в чем собственно вы убедитесь прочитав эту статью.

В этой статье объясняется все, что может вам пригодиться для использования команды locate.

Как работает команда locate? – updatedb & updatedb.conf

Выше я сказал, что команда locate работает очень быстро, тогда первый вопрос который приходит в голову – Почему?

Команда locate не ищет файлы на диске, а выполняет поиск путей файлов в базе данных. База данный это файл, в котором содержится информация о файлах и их путях в системе Linux. Файл базы данных находится в:

Код:
/var/lib/mlocate/mlocate.db

Есть утилита под названием updatedb, которая сканирует всю систему и обновляет файл базы данных mlocate.db.

Команда locate зависит от базы данных, которая может быть обновлена через команду updatedb. Поэтому, чтобы получать последние и достоверные результаты по команде locate, нужно обновлять базу данных на регулярной основе.

Мы можем настроить команду updatedb так, как нам нужно. Для этого нужно обновить файл updatedc.conf. Это конфигурационный файл, который “читает” команда updatedb перед обновлением базы данных. Файл updatedb.conf находится в директории /etc:

Код:
# cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs"

Файл updatedb.conf содержит информацию в виде ПЕРЕМЕННЫЕ=ЗНАЧЕНИЯ. Эти переменные могут классифицироваться на:
  • PRUNEFS – здесь содержится список файловых систем, которые не должны сканироваться при работе программы updatedb
  • PRUNENAMES – содержится список имен директорий, без путей (path), которые не должны сканироваться при работе программы updatedb
  • PRUNEPATHS – здесь содержатся названия путей (path) директорий, которые не должны сканироваться при работе программы updatedb
  • PRUNE_BIND_MOUNTS – в этой переменной содержится одно из значений 0, no, 1 или yes.
Для справки: чтобы отключить updatedb, для этого нужно добавить в список исключенных директорий “PRUNEPATHS” корневую директорию “/“.

Примеры команды locate

1. Ищем файлы используя locate

Чтобы найти конкретные (определенные) файлы в системе, воспользуйтесь следующей командой:

Код:
$ locate sysctl.conf
/etc/sysctl.conf
/usr/share/doc/procps/examples/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

Следующая команда ищет файл httpd.conf по всей системе:

Код:
$ locate httpd.conf
/opt/lampp/etc/httpd.conf
/opt/lampp/etc/httpd.conf.bak
/opt/lampp/etc/original/httpd.conf

Можно использовать команду locate с параметром -0, чтобы вывести все пути файлов в одну строку. Например:

Код:
$ locate -0 httpd.conf
/opt/lampp/etc/httpd.conf/opt/lampp/etc/httpd.conf.bak/opt/lampp/etc/original/httpd.conf

2. Отображать только количество найденных файлов

Чтобы в выводе отобразить только количество найденных файлов, используйте команду locate -c, как показано ниже:

Код:
$ locate -c httpd.conf
3

3. Используйте updatedb для обновления базы данных mlocate

Предположим, что вы сделали копию какого то исполняемого или системного файла:

Код:
# cd /etc
# cp sysctl.conf sysctl.conf.copy

Если вы попробуйте найти файл sysctl.conf используя locate, то вы не найдете файл sysctl.conf.copy:

Код:
# locate sysctl.conf
/etc/sysctl.conf
/usr/share/doc/procps/examples/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

Причина в том, что когда мы создали файл sysctl.conf.copy, база данных на тот момент не была обновлена. Давайте теперь обновим базу данных используя updatedb и снова воспользуемся командой locate:

Код:
$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

Важно помнить, что команда updatedb требует запуск с правами root:

Код:
# updatedb

Для справки: не забывайте, что когда стоит значок доллара $, значит вы работайте от обычного пользователя. Если стоит знак решетки #, значит вы работайте с правами суперпользователя root.

Если запустить команду locate после updatedb,

Код:
# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.copy
/usr/share/doc/procps/examples/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

4. Изменяем расположение базы данных mlocate

По умолчанию база данных, которую читает утилита locate, находится в /var/lib/mlocate/mlocate.db. Но если вы захотите привязать команду locate к другой базе данных, которая имеет иное расположение, тогда воспользуйтесь опцией -d. Например:

Код:
$ locate -d <новый_путь_к_БД> <имя_файла>

Важно знать, что путь к базе данных можно взять из стандартного вывода STDIN.

5. Проверка наличия файла

Теперь представьте, что файл sysctl.conf.copy, который мы создали в 3-м пункте удален. И если опять воспользоваться командой locate, то этот файл будет найден:

Код:
# cd /etc
# rm sysctl.conf.orig
# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.copy
/usr/share/doc/procps/examples/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

Как вы видите команда locate нашла удаленный файл. Этот результат вводит в заблуждение.

Конечно можно снова воспользоваться командой updatedb, после чего запустить locate. Тогда поиска результат будет правильный.

Но лучше воспользоваться командой locate с параметром -e. Тогда будут отображены файлы, которые существуют в системе. Т.е. даже тогда когда запись о файле находится в mlocate.db, все равно будет осуществлена проверка физического нахождения файла в системе Linux, перед выводом команды locate.

Код:
# locate -e sysctl.conf
/etc/sysctl.conf
/usr/share/doc/procps/examples/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

6. Игнорировать регистр букв в выводе locate

The locate command by default is configured to accept the file name in a case sensitive manner. In order to make the results case insensitive, we can use the -i option :

Для примера создадим два файла в нижнем и верхнем регистрах:

Код:
# cd /tmp
# touch testing.txt TESTING.txt
# ls
testing.txt  TESTING.txt
# updatedb

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

Код:
# locate test.txt
/tmp/test.txt

Используйте locate -i, чтобы отключить регистр. В данном случае будут найдены файлы обоих регистров:

Код:
$ locate -i testing.txt
/tmp/TESTING.txt
/tmp/testing.txt

7. Ограничить вывод команды locate

В следующем примере вывод команды locate будет отображен в виде большого списка:

Код:
$ locate passwd
/etc/passwd
/etc/passwd-
/etc/cron.daily/passwd
/etc/exim4/passwd.client
/etc/pam.d/chpasswd
/etc/pam.d/passwd
/etc/security/opasswd
/opt/lampp/bin/htpasswd
/opt/lampp/bin/ldappasswd
/opt/lampp/lib/php/.registry/file_passwd.reg
/opt/lampp/lib/php/.registry/file_smbpasswd.reg
/opt/lampp/phpmyadmin/themes/original/img/s_passwd.png
/opt/lampp/phpmyadmin/themes/pmahomme/img/s_passwd.png
/usr/bin/gpasswd
/usr/bin/grub-mkpasswd-pbkdf2
/usr/bin/kdepasswd
/usr/bin/lppasswd
/usr/bin/mkpasswd
...

Если вы хотите, чтобы отображалось определенное количество записей. Тогда воспользуйтесь утилитой locate с опцией -l и укажите сколько найденных записей вы хотите посмотреть. Например, для отображения 5-ти записей воспользуйтесь следующей командой:

Код:
$ locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/cron.daily/passwd
/etc/exim4/passwd.client
/etc/pam.d/chpasswd

На сегодня все. Чтобы следить за статьями блога, оформляйте подписку по E-MAIL или RSS.

Источник: www.levinkv.ru
levinkv вне форума   Ответить с цитированием
Старый 07.04.2012, 22:08      #2 (ссылка на пост)
MiraMaX166
Инквизитор
 
Аватар для MiraMaX166
 
Регистрация: 29.01.2008
Адрес: Омск
Сообщений: 2,304
MiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспорима
Информация

Отправить сообщение для MiraMaX166 с помощью ICQ Отправить сообщение для MiraMaX166 с помощью AIM Отправить сообщение для MiraMaX166 с помощью MSN Отправить сообщение для MiraMaX166 с помощью Skype™
По умолчанию


Сегодня чуть не вытошнило. Ставил около двух часов кубунту на резервный винт бука. После установки запустил Muon, было стянуто порядка 600 метров обнов с репозиториев. В итоге Muon глюканул и повис, после рестарта отвалился вайфай-интерфейс и ваще всё косорыльнуло нефигово так... Терь понимаю, что не все линуксы одинаково полезны... Кстати, кубунта "помрёт" на v12.04 в 2017 году, больше саппорта не будет.
__________________
Хакер - это не профессия, а стиль жизни, в которой всё время идёшь вперёд, в которой испытываешь постоянный информационный голод и бросаешь вызов технологиям. Это путь бесконечной вереницы вопросов и ответов...


My PC: Fractal Design Define R6/ i9-9900K@5.00GHz/ ASUS MAXIMUS XI HERO (Wi-Fi)/ 64Gb RAM Dual DDR4 3000/ SSD Samsung EVO 860 250Gb + HDD WD Purple 4Tb/ nVidia GeForce RTX 2080 Ti FE 11Gb/ ASUS VG245Q 24" Full HD/ Sound Microlab Pro One
My Notebook: HP ENVY x360 15 (Ryzen 5 2500U@3,6GHz/ 16Gb RAM Dual DDR4 2400/ SSD M.2 Samsung CM871a 128Gb +HDD Seagate BarraCuda Pro 1Tb/ AMD Radeon Vega 8 1Gb/ FP 15.6" FHD / HP Pen)
My Server: HPE ProLiant MicroServer Gen8 (XEON E3-1265LV2@2.5~3.5GHz 8 threads/ 16Gb ECC RAM 1600/ HP P222 2Gb Cache FBWC 4x4TB Toshiba 4xRAID10/ ESXi 6.5U3/ iLO 4 v2.73)
My Phone: Samsung Galaxy Note 23 Ultra/ Android 13/ 256Gb + DeX Station + Galaxy Watch 46mm + Galaxy Buds Pro
My Tab: Samsung Galaxy Note 10.1 2014/ Android 5.1.1/ 32Gb/ Flash mSD 64Gb


Почему "Винда-отстой" кричат громче всех те, кто и в Линукс ничего не понимают...
Говорим спасибо и жмём на возле аватара или кнопочку
MiraMaX166 вне форума   Ответить с цитированием
Старый 12.04.2012, 12:49    Топик Стартер ТС   #3 (ссылка на пост)
levinkv
Активный пользователь
 
Аватар для levinkv
 
Регистрация: 23.01.2012
Сообщений: 54
levinkv скоро придёт к известности
Информация

По умолчанию

Я пользуюсь Debian Linux, мне он очень нравится. + ко всему BackTrack сделан на основе Debian, что конечно же не может не радовать.
levinkv вне форума   Ответить с цитированием
Ответ

Социальные закладки

Метки
linux, updatedb, updatedb.conf, команда locate, команда locate linux


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks Вкл.
Pingbacks Вкл.
Refbacks Вкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вот все XP да VISTA а как же LINUX ? MiraMaX166 Linuxoid 51 25.10.2014 13:36
Манипуляции с датой и временем в Linux levinkv Linuxoid 4 02.03.2012 00:52
Несколько трюков с командой cd в Linux levinkv Linuxoid 0 29.02.2012 00:52
Архивация в Linux – команда tar levinkv Linuxoid 0 29.02.2012 00:48
Архивация в Linux – команда zip levinkv Linuxoid 0 29.02.2012 00:45


Реламный блок
 

Текущее время: 03:13. Часовой пояс GMT +6.


Rambler's Top100 Счётчик тиц

vBulletin Skin by MiraMaX166
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Время генерации страницы 0.12426 секунды с 20 запросами