Терминал Linux. 3 статья - команды поиска файлов (продолжение)


В этой статье поговорим о других командах поиска файлов в терминале, помимо "find".
Цикл статей о терминале:
  1. Терминал Linux. 1 статья - команды навигации в терминале.

  2. Терминал Linux. 2 статья - команда поиска файлов и директорий в терминале

  3. Терминал Linux. 3 статья - команды поиска файлов (продолжение)

  4. Терминал Linux. 4 статья - создание, удаление, форматирование, монтирование разделов жесткого диска

  5. Терминал Linux. 5 статья - cоздание aliases (псевдонимов) в Ubuntu

  6. Терминал Linux. 6 статья - права доступа к каталогам и файлам в Linux, команды chmod и chown.

  7. Терминал Linux. 7 статья - доступ к sudo без ввода пароля.


Помимо "find" существует еще команда "locate" для поиска файлов.

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

Команда "locate" ищет файлы очень быстро, так как она производит поиск не по файловой системе, а по собственной базе данных.

Поэтому при использовании данной команды следует использовать команду, которая обновит базу данных индексов файлов в системе:
sudo updatedb Хотя это и не обязательно, просто если не выполнить её, то вам может вывести в поиске удаленные файлы или не вывести только, что созданные.

Начнём использование данной команды:
В обычном виде вводится команда locate и имя файла, который хотим найти:
locate file или найти все файлы с расширением .exe:
locate .exe

Если мы хотим вывести результаты поиска в одну строку, тогда используем следующую опцию -0 (это тире и нуль):
locate -0 .exe Вот результат:


Но если мы ищем файл с названием 'file' , то не найдутся файлы с именами в другом регистре: File, FILE и т.д.
Чтобы это исправить, то нужно использовать следующую опцию -i , то есть:
locate file -i
Если мы хотим узнать просто сколько файлов имеют в своих именах "file" или файлов с расширением .exe и т.д., то нужно указать опцию -c:
locale .exe -c
Что означает, что в системе 10 файлов имеют расширение .exe

И если мы хотим ограничить число выводимых файлов в поиске по заданному параметру, мы ставим опцию -n и вводим число:
locate .exe -n 2 То есть данная команда с опцией -n 2 выведет нам только 2 первых найденных файла:


И напоследок об этой команде, что её лучше выполнять с опцией -e, тогда будут отображены файлы, которые существуют в системе.
Т.е. даже тогда когда запись о файле находится в базе данных, все равно будет осуществлена проверка физического нахождения файла в системе Linux, перед выводом команды "locate":
locate .exe -e
Теперь об очень полезных командах "whereis" и "which".
У нас установлены программы в системе и чтобы узнать размещение бинарных файлов, исходных кодов и руководств, относящихся к установленной программе, нужно выполнить команду "whereis", для примера найдем информацию о пакете google-chrome:
whereis google-chrome Команда же "which" отображает полный путь к установленной программе, также в качестве примера возьмем google-chrome:
which halt

Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

9 коммент. :

  1. То, о чём Вы пишете - не команды терминала, а команды шелла, запускаемого в данном терминальном окне
    Шеллы, кроме bash, могут быть разные - zsh или в Ubuntu, например, dash
    и в зависимости от этого и команды могут быть немного разные

    ОтветитьУдалить
    Ответы
    1. Сайт посвящен ubuntu, значит команды bash. Хорошо сделаю пояснение во всех статьях, чтобы не возникало таких недопониманий :)

      Удалить
  2. Пользователю Ubuntu вовсе не запрещается применять, скажем, zsh.
    А уж системный шелл в ней вообще dash :)
    Просто не нужно путать шелл, терминал и консоль - это и так уже слишком запутали.
    И кстати, говоря о терминале, не худо сразу оговорить - каком именно, их тоже вдоволь.

    ОтветитьУдалить
    Ответы
    1. ну locate и find отдельные программы и будут работать одинаков в независимости от терминала.

      Удалить
    2. Ну ещё давайте говорить о том, какая система, аппаратные данные, стол за которым сидит автор и стул на котором он сидит. Сказал, что есть такая команда и за это спасибо!

      Удалить
  3. братела молодец > делаеш нужную работу вот бы незабыл про wildcards сделать напоминалку и умные обои с общими командами > ну а так млолдец .

    ОтветитьУдалить
    Ответы
    1. Если хорошо разбираетесь в этом, напишите, опубликую статью от вашего имени :)

      Удалить
  4. whereis не выдает пути ко всем файлам установленного пакета. Для этого нужно использовать dpkg -L

    ОтветитьУдалить