Поиск команд в терминале Linux
Если известно расположение команды, для ее запуска можно ввести полный путь к команде. Например, для запуска команды date из каталога /bin можно ввести :
Конечно, этот способ может оказаться неудобным, особенно если команда расположена в каталоге с длинным именем. Лучше хранить команды в известных каталогах и добавить их в значение переменной среды PATH.
Значение этой переменной состоит из списка каталогов, которые последовательно просматриваются при поиске вводимых команд. Для получения информации о текущем значении переменной PATH введите следующую команду:
Вывод команды соответствует принятому по умолчанию пути поиска команд для обычного пользователя Linux. Для разделения каталогов применяется двоеточие.
Каталоги, в которых расположены команды Linux
Большинство пользовательских команд в составе операционной системы Linux хранятся в каталогах /bin,/usr/bin и /usr/local/bin. Хотя многие команды графического интерфейса находятся в каталоге /usr/bin, существуют специальные команды X Window, которые расположены в каталогах /usr/bin/Xll и /usr/XHR6/bin. Последним в списке показан каталог bin в домашнем каталоге пользователя.
Если необходимо добавить собственные команды или сценарии командного интерпретатора, разместите их в каталоге bin в собственном домашнем каталоге (например, /home/pavel/bin для пользователя pavel). Данный каталог автоматически добавляется в путь поиска команд Linux. Это значит, что после добавления команды в собственный каталог с правом на выполнение (дополнительная информация о правах доступа приводится в разделе «Информация о правах доступа к файлам») команду можно сразу использовать, вводя ее имя в командной строке.
В путь поиска команд в Linux для пользователя root включаются каталоги /sbin и /usr/sbin, содержащие команды администрирования.
Порядок просмотра каталогов имеет важное значение. Каталоги просматриваются слева направо. В данном случае, если команда fоо расположена одновременно в каталогах /bin и usr/bin, будет выполняться команда из каталога /bin. Для запуска другой команды foo придется или ввести полный путь к команде, или изменить значение переменной PATH. (Изменение значения переменной PATH и добавление каталогов в путь поиска команд рассматриваются нами чуть ниже.)
Не все запускаемые команды расположены в каталогах, перечисленных в переменной PATH. Некоторые команды встроены в командный интерпретатор. Кроме этого, команды можно переопределить с помощью псевдонимов, позволяющих указать параметры запускаемой команды. Также можно определить функцию, содержащую последовательность команд.
Ниже приведен порядок проверки вводимых команд командным интерпретатором:
- Псевдонимы — имена, устанавливаемые с помощью команды alias и представляющие конкретную команду с набором параметров. (Введите alias для просмотра списка установленных псевдонимов.) Часто псевдонимы позволяют определить короткое имя для длинной сложной команды.
- Зарезервированные слова командного интерпретатора— ключевые слова, зарезервированные командным интерпретатором для специального применения. Многие из этих ключевых слов используются при создании функций, например do, while, case и else.
- Функции — наборы команд, которые выполняются вместе в пределах одного интерпретатора.
- Встроенные команды — команды, встроенные в командный интерпретатор. Такая команда не имеет представления в файловой системе. Некоторые распространенные команды являются встроенными, например:
- cd (для смены текущего каталога)
- echo (для вывода текста на экран)
- exit (для выхода из командного интерпретатора)
- f g (для вывода команды из фонового режима)
- history (для просмотра списка запускавшихся ранее команд)
- pwd (для получения текущего каталога)
- set (для установки параметров командного интерпретатора)
- type (для определения расположения команды).
- Команда в файловой системе — такая команда хранится в файловой системе. (Для поиска этих команд в Linux используется список каталогов в переменной PATH.)
Для определения источника конкретной команды можно воспользоваться командой type
(Если применяется не bash, а другой командный интерпретатор, воспользуйтесь командой which.) Например, для определения расположения интерпретатора bash введите следующую команду:
Введите вместе с командой type такие ключевые слова: which, case и return. Если команда одновременно присутствует в нескольких местах, можно добавить параметр -а для просмотра списка всех экземпляров команды.
Иногда после ввода команды выводится сообщение о том, что команда не найдена или отсутствуют права на ее запуск. В первом случае необходимо проверить правильность ввода команды и ее присутствие в пути, указанном в переменной path. Во втором случае команда может находиться в пути из переменной path, но для нее могут отсутствовать права на запуск.
Запускаем и ищем предыдущие команды в Linux
Работу в командной строке можно сделать немного эффективнее и быстрее, если знать несколько простых хитростей. Рассмотрим, как быстро запускать предыдущие команды, как выполнять поиск по истории команд.
Повторный запуск команды без указания аргументов. Используем «!»
!команда — используется для выполнения команды с аргументами, которые использовались при последнем запуске.
Предположим, мы выполняем какие-нибудь команды и дополняем их аргументами. Например, мы решили отредактировать файл myfile.txt в текстовом редакторе nano. Для этого мы выполняем:
Далее мы можем выполнять еще какие-нибудь команды, затем снова хотим выполнить nano, чтобы открыть в нем файл myfile.txt. Мы можем воспользоваться волшебным «!». Для этого достаточно написать восклицательный знак и без пробела название команды:
В результате будет вызвана команда nano с теми аргументами, с которыми она вызвалась последний раз, то есть в нашем случае !nano будет аналогично вызову nano /home/pingvinus/path/to/file/myfile.txt.
Выполнение предыдущей команды. Используем «!!»
!! — используется, чтобы выполнить предыдущую команду. Можно использовать в тексте другой команды.
Про два восклицательных знака я уже рассказывал. Например, вы вызвали команду:
И забыли написать в начале sudo. Чтобы не перепечатывать всю команду, можно выполнить:
Отмечу, что !! можно использовать прямо внутри текста команды. Например, мы перейдем в домашнюю директорию пользователя pingvinus:
А теперь войдем в папку /home/pingvinus/Downloads вот таким образом:
Поиск по истории команд. Команда history
history — поиск по истории команд — предназначена для вывода истории команд, поиска по ним и быстрого запуска предыдущих команд.
Если мы выполним history, то на экран будет выведен список последних введенных вами команд:
Каждая команда пронумерована. Чтобы вызвать какую-нибудь команду из списка достаточно выполнить в командной строке: !номер. Например выполним команду под номером 139:
Можно указать номер с минусом. Например, выполнив !-2 мы выполним пред-предыдущую команду. Выполнив, !-1 мы выполним предыдущую команду, это эквивалентно команде !!, описанной выше.
Для поиска по истории можно воспользоваться утилитой grep:
У команды history есть еще несколько дополнительных возможностей. Почитать руководство по history можно, выполнив man history.
Поиск по истории. Сочетание клавиш Ctrl+R
Ctrl+R — сочетание клавиш, которое используется для вызова «интерактивного» поиска по истории команд.
Нажмите Ctrl+R, находясь в командной строке. В результате на экране отобразится приглашение к поиску команды:
Начинайте вводить начальную часть или середину команды, которую вы ищете. То, что вы вводите будет заключено в кавычки, а после значка двоеточия вам будет предложена команда, найденная в истории команд, которая максимально удовлетворяет поиску. Например, я нажал Ctrl+R и начал вводить id-, и нашлась команда, содержащая символы id-:
В linux найти расположение команды
В этой статье поговорим о командах поиска файлов и директорий в терминале, таких как find, locate, whereis, which.
При работе в Linux, довольно часто возникает необходимость поиска файлов с определенными характеристиками. Этими характеристиками могут быть размер или тип файла, время изменения и многое другое.
Формат команды find.
В общем виде команда find выглядит следующим образом:
где путь – это директория, в которой мы хотим произвести поиск, опции — это ключи-параметры поиска.
Путь поиска команды find.
В обычном случае мы просто указываем полный путь к нужному каталогу, например:
Но в качестве пути поиска можно указывать следующие значения:
. | поиск в текущем каталоге; |
/ | поиск от корневого каталога; |
поиск в домашнем каталоге. |
Основные опции команды find.
-name — поиск файлов по имени;
-user — поиск файлов, принадлежащих указанному пользователю;
-type — поиск файлов определенного типа. Вот наиболее используемые типы:
- d – каталог;
- f – обычный файл;
- l – символическая ссылка;
-size -n,+n, n — поиск файлов с размером меньше(-), больше (+) или равное n единиц;
-mtime -n, +n — поиск файлов, созданных или модифицируемых менее чем (-) или более чем (+) n дней назад.
Примеры использования команды find.
Самый простой вариант поиска, указываем путь и имя файла. Давайте найдем файл с именем file1:
Но если мы напишем не полностью имя, например «file», то файл с именем «file1» не найдется. Для этого нужно писать имя в кавычках и в конце добавить *, вот таким образом:
Но нашлись и файлы и директории, в названии которых встречается «file». Чтобы найти только файлы, воспользуемся опцией -type , передав ей значение f, чтобы искать только файлы (для поиска только директорий мы бы передали d):
Но теперь нашлись файлы во всех вложенных директориях. А что если нам надо найти файл только в текущей директории или с уровнем вложенности 1 или 2?
Для этого используется опция maxdepth (глубина поиска), то есть, если мы хотим найти файл в директории поиска, без рекурсивного просмотра всех директорий:
Теперь нашлись файлы только в директории поиска.
Если хотим включить первый уровень внутри каталога поиска, тогда нужно указать maxdepth 2:
Как видно на скриншоте, теперь найден файл и в папке «Загрузки».
Нужно указывать опцию -maxdepth перед опцией -name.
Теперь разберем очень важную опцию поиска файла по размеру «-size».
Важно, если мы хотим найти файлы размером в килобайтах, нужно писать в конце k, для мегабайт M, для гигабайт G, для байт b. Важно соблюдать регистр.
Разберем пример, найдем файлы в домашней директории менее 10 килобайт с именем file*:
Нашлись все файлы в домашней директории и ее папках, размер которых менее 10 килобайт.
Теперь давайте найдем файлы в домашней директории, которые весят больше 100 мегабайт:
Нашелся один файл, который весит более 100 мегабайт.
Также можно искать файлы определенного размера, например, которые весят 1G или 1M:
Теперь переходим к поиску файлов, которые были созданы или модифицированы n количество дней назад.
Поиск файлов, которые были изменены или созданы менее 2 дней назад:
Также можно использовать опцию -user, чтобы найти только файлы определенного пользователя:
Вместо username нужно подставить имя пользователя. Если искать ваши файлы, то можно использовать системную переменную $USER, которая выводит имя текущего пользователя.
Возможности команды find поистине безграничны, мы можем использовать и регулярные выражения. К примеру, давайте уберем из поиска все скрытые файлы и директории.
Данная команда может показаться сложной на первый взгляд. Вот это вот регулярное выражение \( ! -regex ‘.*/\..*’ \) как раз и убирает из поиска все скрытые файлы и директории:
Поиск файлов, которые были изменены или созданы более 100 дней назад:
В одной статье очень трудно перечислить все возможности этой команды поиска файлов и директорий. Это самое основное и часто используемое.
Помимо find для поиска файлов существует ещё команда locate.
Разница между ними в том, что locate использует собственную базу данных для хранения имен файлов. В то время, как find исследует директории в поисках заданного параметром командной строки имени файла.
Команда locate ищет файлы очень быстро, так как она производит поиск не по файловой системе, а по собственной базе данных.
Поэтому, перед использованием данной команды поиска следует использовать команду, которая обновит базу данных индексов файлов в системе:
Хотя это и не обязательно (система это делает периодически), просто если не выполнить её, то вам может вывести в поиске удаленные файлы или не вывести только что созданные.
Формат команды locate.
Вводится команда locate и имя файла, который хотим найти. И, конечно же, опции, которые разберем на примерах.
Примеры использования команды locate.
Давайте найдем все файлы с расширением .exe:
Если мы хотим вывести результаты поиска в одну строку, тогда используем следующую опцию -0 (это тире и ноль)
Но если мы ищем файл с названием «file», то не найдутся файлы с именами в другом регистре: File, FILE и т.д.
Чтобы поиск сделать регистронезависимым, то нужно использовать следующую опцию -i, то есть:
Если мы хотим узнать просто количество файлов, имеющих в имени «file», или количество файлов с определенным расширением, к примеру .exe, то нужно указать опцию -c:
Что означает, что в системе 10 файлов имеют расширение .exe.
Если мы хотим ограничить число выводимых файлов в поиске по заданному параметру, мы ставим опцию -n и число:
То есть, данная команда с опцией -n 2 выведет нам только 2 первых найденных файла:
И напоследок, locate лучше выполнять с опцией -e, тогда будут отображены файлы, которые существуют в системе. Даже тогда, когда запись о файле находится в базе данных, все равно будет осуществлена проверка физического нахождения файла в системе:
Полезные команды whereis и which.
У нас установлены программы в системе и чтобы узнать размещение бинарных файлов, исходных кодов и руководств, относящихся к установленной программе, можно выполнить команду whereis. Для примера найдем информацию о пакете google-chrome:
Команда же which отображает полный путь к установленной программе. Также в качестве примера возьмем google-chrome: