Locate commands in linux

8 примеров использования команды locate в Linux

Оригинал: 8 Linux Locate Command Examples for Beginners
Автор: Himanshu Arora
Дата публикации: 20 апреля 2017 г.
Перевод: А.Панин
Дата перевода: 25 апреля 2017 г.

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

В данной статье мы будем обсуждать методику использования команды locate, рассматривая простые для понимания примеры. Помните о том, что все инструкции и примеры, приведенные в данной статье, были протестированы в системе Ubuntu 16.04 LTS с утилитой locate версии 0.26.

1. Использование команды locate в Linux

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

Например, если вам нужно найти все файлы в именах которых содержится строка «dir2» , вы можете использовать locate следующим образом:

Примечание: команда locate dir2 (без звездочек) также вполне применима, ведь locate автоматически заменяет переданное имя файла (такое, как NAME ), на соответствующий шаблон (в данном случае, *NAME* ).

2. Принцип работы locate или почему поиск осуществляется так быстро

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

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

Например, если я попытаюсь найти файлы с именами, содержащими строку tosearch в директории Downloads , утилита find сгенерирует следующий вывод:

Но при поиске файлов с теми же именами с помощью утилиты locate не будет выведено каких-либо результатов:

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

Теперь при исполнении приведенной выше команды locate выводится информация о найденных файлах:

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

3. Вывод информации о количестве найденных файлов и директорий

Как вы уже знаете, утилита locate выводит имена найденных файлов вместе с их полными или абсолютными путями. Но при желании вы можете сообщить ей о том, что вместо вывода данной информации нужно выводить лишь информацию о количестве найденных файлов и директорий. Для этой цели предназначен параметр -c .

4. Вывод информации лишь о существующих в данный момент файлах

В данной статье уже говорилось о том, что при удалении файла с диска до обновления базы данных его имя будет выводиться в результатах поиска. Однако, в подобных случаях вы можете не обновлять базу данных и получать корректные результаты поиска благодаря поддержке параметра -e .

Читайте также:  Ночной режим приложение windows

Например, рассмотрим следующую ситуацию: я умышленно удалил файл filetosearch.txt с диска. Этот факт был подтвержден утилитой find, которая не смогла найти его:

Но в случае осуществления аналогичной операции поиска с помощью утилиты locate информация о файле все еще выводилась:

И мы без труда можем догадаться, почему это происходит — база данных locate не была обновлена после удаления файла. Однако, в случае использования параметра -e проблема будет решена:

На странице руководства locate данный параметр описан следующим образом: «Выводить информацию лишь о тех файлах, которые существуют в момент запуска утилиты».

5. Игнорирование регистра символов

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

Например, в моей системе имеются два файла с именами newfiletosearch.txt и NEWILETOSEARCH.txt . Очевидно, что имена файлов отличаются лишь регистром символов. Если вы используете утилиту locate для поиска файлов по шаблону *tosearch* , она выведет лишь вариант имени файла в нижнем регистре:

Но в случае использования параметра -i утилита будет игнорировать регистр символов имен файлов, поэтому оба имени появятся в выводе:

6. Использование символа ASCII NUL для разделения имен файлов

По умолчанию имена файлов, выводимые утилитой locate, разделяются с помощью символа перехода на новую строку ( \n ). Но при необходимости вы можете изменить этот символ, а точнее, использовать вместо него символ ASCII NUL . Для этой цели предназначен параметр -0 .

Например, я могу выполнить команду из предыдущего раздела, добавив в нее параметр -0 :

Несложно заметить, что в выводе больше не используется символ перехода на новую строку — он был заменен на символ ASCII NUL .

7. Вывод информации о базе данных locate

Если вам необходима информация об используемой утилитой locate базе данных, а также статистические данные, касающиеся этой базы данных, вы можете воспользоваться параметром -S :

8. Поиск файлов с четко заданным именем

По умолчанию при поиске файла с помощью locate переданное имя, такое, как NAME , будет автоматически преобразовываться в в шаблон поиска *NAME* . Например, при поиске файла с именем testfile будут выведены все имена файлов, соответствующие шаблону поиска *testfile* :

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

Если вы не знакомы с регулярными выражениями, рекомендую обратиться к данному материалу .

Заключение

Утилита locate поддерживает большое число дополнительных параметров, но тех из них, что описаны в статье, должно хватить для составления хотя бы поверхностного представления о назначении утилиты и успешного начала работы с ней. Рекомендую в первую очередь испытать самостоятельно все описанные параметры утилиты в своей системе Linux, после чего разобраться с дополнительными параметрами, описанными на странице руководства .

Не стесняйтесь оставлять комментарии при возникновении любых сомнений или вопросов.

Источник

Команда Locate в Linux (Поиск Файлов и Каталогов)

Locate Command in Linux

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

Одна из наиболее распространенных операций при работе в Linux — поиск файлов и каталогов. В системах Linux есть несколько команд, которые позволяют вам искать файлы find и locate быть наиболее часто используемыми.

Команда locate — самый быстрый и простой способ поиска файлов и каталогов по их именам.

Установка locate (если команда locate не найдена)

В зависимости от дистрибутива и от того, как была предоставлена ​​система, пакет locate может быть или не быть предварительно установлен в вашей системе Linux.

Чтобы проверить, установлена ​​ли locate утилита в вашей системе, откройте терминал, введите locate и нажмите Enter . Если пакет установлен, система отобразит locate: no pattern to search for specified , в противном случае вы увидите что-то вроде locate command not found .

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

Читайте также:  Hwvendordetection для windows 10 что это

Установить locate на Ubuntu и Debian

Установить locate на CentOS и Fedora

Как locate работает

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

Во время установки пакета mlocate создается задание cron, которое запускает updatedb команду каждые 24 часа. Это гарантирует, что база данных регулярно обновляется. Для получения дополнительной информации о работе cron проверьте /etc/cron.daily/mlocate файл.

Базу данных можно обновить вручную, выполнив updatedb команду от имени пользователя root или пользователя с привилегиями sudo:

Процесс обновления займет некоторое время, в зависимости от количества файлов и каталогов и скорости вашей системы.

Файлы, созданные после обновления базы данных, не будут отображаться в результатах поиска.

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

Как использовать locate команду

Синтаксис locate команды следующий:

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

Например, чтобы найти файл с именем .bashrc , введите:

Вывод будет включать имена всех файлов, содержащих строку .bashrc в их именах:

/root/.bashrc Файл не будет показан , так как мы запустили команду как обычный пользователь , который не имеет право доступа к /root каталогу.

Если список результатов длинный, для лучшей читаемости вы можете направить вывод в less команду:

Команда locate также принимает шаблоны, содержащие символы-заглушки, такие как подстановочный знак * . Когда шаблон не содержит символов-глобусов *PATTERN* , которые ищет команда , поэтому в предыдущем примере отображались все файлы, содержащие шаблон поиска в своих именах.

Подстановочный знак — это символ, используемый для обозначения нуля, одного или нескольких символов. Например, для поиска всех .md файлов в системе вы должны использовать:

Чтобы ограничить результаты поиска, используйте -n параметр, за которым следует количество результатов, которые вы хотите отобразить. Например, следующая команда будет искать все .py файлы и отображать только 10 результатов:

По умолчанию locate выполняет поиск с учетом регистра. Опция -i ( —ignore-case ) указывает locate на игнорирование регистра и запуск поиска без учета регистра.

Чтобы отобразить количество всех совпадающих записей, используйте параметр -c ( —count ). Следующая команда вернет номер всех файлов, содержащихся .bashrc в их именах:

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

Чтобы отобразить только имена файлов, которые существуют в данный момент, locate используйте параметр -e ( —existing ). Например, следующее вернет только существующие .json файлы:

Если вам нужно выполнить более сложный поиск, вы можете использовать опцию -r ( —regexp ), которая позволяет выполнять поиск, используя базовое регулярное выражение вместо шаблонов. Эта опция может быть указана несколько раз.
Например, для поиска всех файлов .mp4 и .avi файлов в вашей системе и игнорирования регистра вы должны выполнить:

Вывод

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

Для получения дополнительной информации обо всех доступных опциях типа locate команды man locate в вашем терминале.

Источник

locate command in Linux with Examples

locate command in Linux is used to find the files by name. There is two most widely used file searching utilities accessible to users are called find and locate. The locate utility works better and faster than find command counterpart because instead of searching the file system when a file search is initiated, it would look through a database. This database contains bits and parts of files and their corresponding paths on your system. By default, locate command does not check whether the files found in the database still exist and it never reports files created after the most recent update of the relevant database.

Читайте также:  Проблема синий экран при запуске windows

Syntax:

Exit Status: This command will exit with status 0 if any specified match found. If no match founds or a fatal error encountered, then it will exit with status 1.

Options:

  • -b, –basename : Match only the base name against the specified patterns, which is the opposite of –wholename.
  • -c, –count : Instead of writing file names on standard output, write the number of matching entries only.
  • -d, –database DBPATH : Replace the default database with DBPATH. DBPATH is a : (colon) separated list of database file names. If more than one –database option is specified, the resulting path is a concatenation of the separate paths. An empty database file name is replaced by the default database. A database file name – refers to the standard input. Note that a database can be read from the standard input only once.
  • -e, –existing : Print only entries that refer to files existing at the time locate is run.
  • -L, –follow : When checking whether files exist (if the –existing option is specified), follow trailing symbolic links. This causes bro ken symbolic links to be omitted from the output. This option is the default behavior. The opposite can be specified using –nofollow.
  • -h, –help : Write a summary of the available options to standard output and exit successfully.
  • -i, –ignore-case : Ignore case distinctions when matching patterns.
  • -l, –limit, -n LIMIT : Exit successfully after finding LIMIT entries. If the –count option is specified, the resulting count is also limited to LIMIT.
  • -m, –mmap : Ignored, but included for compatibility with BSD and GNU locate.
  • -P, –nofollow, -H : When checking whether files exist (if the –existing option is specified), do not follow trailing symbolic links. This causes broken symbolic links to be reported like other files.

This option is the opposite of –follow.

  • -0, –null : Separate the entries on output using the ASCII NUL character instead of writing each entry on a separate line. This option is designed for interoperability with the –null option of GNU xargs.
  • -S, –statistics : Write statistics about each read database to standard output instead of searching for files and exit successfully.
  • -q, –quiet : Write no messages about errors encountered while reading and processing databases.
  • -r, –regexp REGEXP : Search for a basic regexp REGEXP. No PATTERNs are allowed if this option is used, but this option can be specified multiple times.
  • –regex : Interpret all PATTERNs as extended regexps.
  • -s, –stdio : Ignored, for compatibility with BSD and GNU locate.
  • -V, –version : Write information about the version and license of locate on standard output and exit successfully.
  • -w, –wholename : Match only the whole path name against the specified patterns. This option is the default behavior. The opposite can be specified using –basename.
  • Example 1: Search a file with specific name.

    It will search for sample.txt in particular directory.

    Output:

    Example 2: Limit Search Queries to a Specific Number.

    It will show 20 results for the searching of file ending with .html.

    Output:

    Example 3. Display The Number of Matching Entries.

    It will count files ending with .txt.

    Output:

    Example 4: Ignore Case Sensitive Locate Outputs. This command is configured to process queries in a case sensitive manner. It means SAMPLE.TXT will show a different result than sample.txt.

    Output:

    Example 5: Separate Output Entries Without New Line.

    Default separator for locate command is the newline (\\n) character. But if someone want to use a different separator like the ASCII NUL, the he/she can do so using the -0 command line option.

    Источник

    Оцените статью