Linux пути поиска команд

Обновлено: 07.07.2024

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

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

Простой поиск

Например, мы хотим найти команды, которые включают в свое описание или название слово move. Тогда мы должны выполнить команду:

В результате на экран будет выведен список команд и их описания, в которых было найдено слово move:

Поиск с учетом раздела

На самом деле в нем будут присутствовать не только команды, но и, например, функции языка C, так как для них тоже существуют man страницы (кстати, apropos отлично подойдет для поиска C функций). Все man-страницы разделены на разделы (apropos выводит номер раздела в скобках после названия команды). Например, в первом разделе man-страниц расположены описания команд Linux. Для того, чтобы вывести информацию только из man-страниц определенного раздела, существует опция -s, за которой указывается номер man-страницы.

Выполним поиск по ключевому слову move только в разделе:

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

Поиск по нескольким словам

Если вы вводите несколько слов через пробел, тогда apropos найдет все команды, содержащие любое из ключевых слов. Например, мы хотим найти команды, по ключевым словам move и empty:

В результате получим:

Поиск точного вхождения слов

Обратите внимание, что apropos по ключевому слову move найдет и строки со словами remove. Чтобы искать точное вхождение слов используется опция -e:

Теперь мы получим только те команды, которые содержат слова move и empty:

Поиск по фразе

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

Использование регулярных выражений

Команда apropos поддерживает поиск с использованием регулярных выражений, для этого служит опция -r:

Я рассказал об основных возможностях утилиты apropos. Дополнительную информацию можно получить в помощи по этой команде (у меня в Ubuntu на русском языке, кстати, но к сожалению, без примеров):

В этой статье поговорим о командах поиска файлов и директорий в терминале, таких как find, locate, whereis, which.

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

Формат команды find.

В общем виде команда find выглядит следующим образом:

где путь – это директория, в которой мы хотим произвести поиск, опции - это ключи-параметры поиска.

Путь поиска команды find.

В обычном случае мы просто указываем полный путь к нужному каталогу, например:

Но в качестве пути поиска можно указывать следующие значения:

Основные опции команды find.

  • -name - поиск файлов по имени;
  • -user - поиск файлов, принадлежащих указанному пользователю;

-type - поиск файлов определенного типа. Вот наиболее используемые типы:

  • d – каталог;
  • f – обычный файл;
  • l – символическая ссылка;

Примеры использования команды find.

Самый простой вариант поиска, указываем путь и имя файла. Давайте найдем файл с именем file1:

Примеры использования команды find

Но если мы напишем не полностью имя, например "file", то файл с именем "file1" не найдется. Для этого нужно писать имя в кавычках и в конце добавить *, вот таким образом:

Примеры использования команды find

Но нашлись и файлы и директории, в названии которых встречается "file". Чтобы найти только файлы, воспользуемся опцией -type , передав ей значение f, чтобы искать только файлы (для поиска только директорий мы бы передали d):

Примеры использования команды find

Но теперь нашлись файлы во всех вложенных директориях. А что если нам надо найти файл только в текущей директории или с уровнем вложенности 1 или 2?

Для этого используется опция maxdepth (глубина поиска), то есть, если мы хотим найти файл в директории поиска, без рекурсивного просмотра всех директорий:

Примеры использования команды find

Теперь нашлись файлы только в директории поиска.

Если хотим включить первый уровень внутри каталога поиска, тогда нужно указать maxdepth 2:

Примеры использования команды find

Как видно на скриншоте, теперь найден файл и в папке "Загрузки".

Важно!

Нужно указывать опцию -maxdepth перед опцией -name.

Теперь разберем очень важную опцию поиска файла по размеру "-size".

Важно, если мы хотим найти файлы размером в килобайтах, нужно писать в конце k, для мегабайт M, для гигабайт G, для байт b. Важно соблюдать регистр.

Разберем пример, найдем файлы в домашней директории менее 10 килобайт с именем file*:

Примеры использования команды find

Нашлись все файлы в домашней директории и ее папках, размер которых менее 10 килобайт.

Теперь давайте найдем файлы в домашней директории, которые весят больше 100 мегабайт:

Примеры использования команды find

Нашелся один файл, который весит более 100 мегабайт.

Также можно искать файлы определенного размера, например, которые весят 1G или 1M:

Теперь переходим к поиску файлов, которые были созданы или модифицированы n количество дней назад.

Поиск файлов, которые были изменены или созданы менее 2 дней назад:

Примеры использования команды find

Также можно использовать опцию -user, чтобы найти только файлы определенного пользователя:

Вместо username нужно подставить имя пользователя. Если искать ваши файлы, то можно использовать системную переменную $USER, которая выводит имя текущего пользователя.

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

Примеры использования команды find

Поиск файлов, которые были изменены или созданы более 100 дней назад:

В одной статье очень трудно перечислить все возможности этой команды поиска файлов и директорий. Это самое основное и часто используемое.

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

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

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

Поэтому, перед использованием данной команды поиска следует использовать команду, которая обновит базу данных индексов файлов в системе:

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

Формат команды locate.

Вводится команда locate и имя файла, который хотим найти. И, конечно же, опции, которые разберем на примерах.

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

Давайте найдем все файлы с расширением .exe:

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

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

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

Но если мы ищем файл с названием "file", то не найдутся файлы с именами в другом регистре: File, FILE и т.д.

Чтобы поиск сделать регистронезависимым, то нужно использовать следующую опцию -i, то есть:

Если мы хотим узнать просто количество файлов, имеющих в имени "file", или количество файлов с определенным расширением, к примеру .exe, то нужно указать опцию -c:

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

Что означает, что в системе 10 файлов имеют расширение .exe.

Если мы хотим ограничить число выводимых файлов в поиске по заданному параметру, мы ставим опцию -n и число:

То есть, данная команда с опцией -n 2 выведет нам только 2 первых найденных файла:

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

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

Полезные команды whereis и which.

У нас установлены программы в системе и чтобы узнать размещение бинарных файлов, исходных кодов и руководств, относящихся к установленной программе, можно выполнить команду whereis. Для примера найдем информацию о пакете google-chrome:

Команда же which отображает полный путь к установленной программе. Также в качестве примера возьмем google-chrome:

Если известно расположение команды, для ее запуска можно ввести полный путь к команде. Например, для запуска команды date из каталога /bin можно ввести :

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

Значение этой переменной состоит из списка каталогов, которые последовательно просматриваются при поиске вводимых команд. Для получения информации о текущем значении переменной PATH введите следующую команду:

Вывод команды соответствует принятому по умолчанию пути поиска команд для обычного пользователя Linux. Для разделения каталогов применяется двоеточие.

Большинство пользовательских команд в составе операционной системы Linux хранятся в каталогах /bin,/usr/bin и /usr/local/bin. Хотя многие команды графического интерфейса находятся в каталоге /usr/bin, существуют специальные команды X Window, которые расположены в каталогах /usr/bin/Xll и /usr/XHR6/bin. Последним в списке показан каталог bin в домашнем каталоге пользователя.

В путь поиска команд в Linux для пользователя root включаются каталоги /sbin и /usr/sbin, содержащие команды администрирования.

Порядок просмотра каталогов имеет важное значение. Каталоги просматриваются слева направо. В данном случае, если команда fоо расположена одновременно в каталогах /bin и usr/bin, будет выполняться команда из каталога /bin. Для запуска другой команды foo придется или ввести полный путь к команде, или изменить значение переменной PATH. (Изменение значения переменной PATH и добавление каталогов в путь поиска команд рассматриваются нами чуть ниже.)

Не все запускаемые команды расположены в каталогах, перечисленных в переменной PATH. Некоторые команды встроены в командный интерпретатор. Кроме этого, команды можно переопределить с помощью псевдонимов, позволяющих указать параметры запускаемой команды. Также можно определить функцию, содержащую последовательность команд.

  1. Псевдонимы — имена, устанавливаемые с помощью команды alias и представляющие конкретную команду с набором параметров. (Введите alias для просмотра списка установленных псевдонимов.) Часто псевдонимы позволяют определить короткое имя для длинной сложной команды.
  2. Зарезервированные слова командного интерпретатора— ключевые слова, зарезервированные командным интерпретатором для специального применения. Многие из этих ключевых слов используются при создании функций, например do, while, case и else.
  3. Функции — наборы команд, которые выполняются вместе в пределах одного интерпретатора.
  4. Встроенные команды — команды, встроенные в командный интерпретатор. Такая команда не имеет представления в файловой системе. Некоторые распространенные команды являются встроенными, например:
  • cd (для смены текущего каталога)
  • echo (для вывода текста на экран)
  • exit (для выхода из командного интерпретатора)
  • f g (для вывода команды из фонового режима)
  • history (для просмотра списка запускавшихся ранее команд)
  • pwd (для получения текущего каталога)
  • set (для установки параметров командного интерпретатора)
  • type (для определения расположения команды).
  1. Команда в файловой системе — такая команда хранится в файловой системе. (Для поиска этих команд в Linux используется список каталогов в переменной PATH.)

(Если применяется не bash, а другой командный интерпретатор, воспользуйтесь командой which.) Например, для определения расположения интерпретатора bash введите следующую команду:

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

Поиск файла по имени

1. Простой поиск по имени:

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий.

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

в) Более компактный вид имеют регулярные выражения, например:

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find --version).

а) дате изменения:

find . -type f -newermt "2019-11-02 00:00"

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct "2019-09-09 07:50:00"

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H "content" <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name "sess_*" -type f -print -exec rm <> \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name "sess_*" -type f -exec mv <> new_name \;

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name "*.tmp" | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e "s/test/production/g" <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

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

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Читайте также: