Поиск команд в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") linux/FileandDirectoryManagementGroup -.-> linux/whereis("File/Command Finding") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/TextProcessingGroup -.-> linux/sed("Stream Editing") subgraph Lab Skills linux/ls -.-> lab-271443{{"Поиск команд в Linux"}} linux/cat -.-> lab-271443{{"Поиск команд в Linux"}} linux/cd -.-> lab-271443{{"Поиск команд в Linux"}} linux/pwd -.-> lab-271443{{"Поиск команд в Linux"}} linux/find -.-> lab-271443{{"Поиск команд в Linux"}} linux/which -.-> lab-271443{{"Поиск команд в Linux"}} linux/whereis -.-> lab-271443{{"Поиск команд в Linux"}} linux/grep -.-> lab-271443{{"Поиск команд в Linux"}} linux/sed -.-> lab-271443{{"Поиск команд в Linux"}} end

Основы поиска команд с помощью which

В Linux, когда вы вводите команду в терминал, система ищет эту команду в каталогах, перечисленных в переменной окружения PATH. Команда which помогает вам определить, где именно хранится исполняемая программа.

Сначала перейдем в наш проектный каталог:

cd ~/project

Теперь используем команду which для поиска местоположения такой распространенной команды, как ls, которая используется для вывода содержимого каталога:

which ls

При выполнении этой команды вы должны увидеть такой вывод:

/usr/bin/ls

Этот вывод сообщает, что исполняемый файл команды ls находится по адресу /usr/bin/ls. Это означает, что когда вы вводите ls в терминале, система запускает исполняемый файл по этому адресу.

Понимание местоположения команд полезно по нескольким причинам:

  • Это помогает вам убедиться, что вы используете правильную версию команды.
  • Это необходимо при устранении неполадок, связанных с командами.
  • Это полезно при написании сценариев (shell scripts), которые требуют абсолютных путей.

Попробуем еще один пример с командой pwd, которая показывает текущий рабочий каталог:

which pwd

Вы должны увидеть вывод, похожий на следующий:

/usr/bin/pwd

Команда which находит только исполняемые программы, входящие в ваш PATH. Она не найдет встроенные команды оболочки (например, cd) или псевдонимы (aliases), которые вы могли настроить.

Поиск нескольких команд

Команда which может найти несколько исполняемых файлов за один раз. Это полезно, когда вы хотите проверить местоположения нескольких команд сразу, экономя время на ввод нескольких отдельных команд.

Попробуем найти местоположения нескольких команд сразу:

which ls pwd cat

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

/usr/bin/ls
/usr/bin/pwd
/usr/bin/cat

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

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

which cd

Вы, возможно, не увидите никакого вывода, потому что cd - это встроенная команда оболочки, а не исполняемый файл в вашем PATH.

Попробуем смесь других распространенных команд:

which find grep sed

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

/usr/bin/find
/usr/bin/grep
/usr/bin/sed

Это демонстрирует, как можно эффективно проверить несколько команд сразу с помощью команды which.

Понимание ситуаций, когда команда не найдена

Не все команды, которые вы пытаетесь найти с помощью which, будут найдены. Это может произойти по нескольким причинам:

  1. Команда не существует в вашей системе.
  2. Команда существует, но не находится в вашем PATH.
  3. Команда является встроенной командой оболочки (shell built-in) или псевдонимом (alias).

Рассмотрим эти сценарии.

Сначала попробуем найти команду, которая, скорее всего, не существует в вашей системе:

which nonexistentcommand

Вы, возможно, не увидите никакого вывода или получите сообщение об ошибке, указывающее, что команда не найдена:

which: no nonexistentcommand in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)

Теперь проверим встроенную команду оболочки:

which cd

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

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

type cd

Вы должны увидеть такой вывод:

cd is a shell builtin

Попробуем еще один пример с командой alias, которая также является встроенной командой оболочки:

type alias

Вывод должен подтвердить, что alias - это встроенная команда оболочки:

alias is a shell builtin

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

Исследование альтернатив с помощью whereis

В то время как which полезен для поиска исполняемых файлов в вашем PATH, Linux предоставляет и другие команды для поиска файлов. Одна из таких команд - whereis, которая может найти бинарные файлы, исходные коды и файлы руководства (manual pages) для команды.

Давайте используем whereis, чтобы получить больше информации о команде ls:

whereis ls

Вы должны увидеть вывод, похожий на следующий:

ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

Этот вывод сообщает вам:

  • Местоположение исполняемого файла ls: /usr/bin/ls
  • Местоположение файла руководства для ls: /usr/share/man/man1/ls.1.gz

Попробуем другой пример с командой grep:

whereis grep

Вы, возможно, увидите такой вывод:

grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz

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

Чтобы подытожить разницу между which и whereis:

  • which показывает только местоположение исполняемого файла в вашем PATH.
  • whereis показывает местоположения исполняемого файла, исходных файлов и файлов руководства.

Обе команды являются ценными инструментами для поиска команд в Linux, причем каждая служит немного разным целям.

Резюме

В этом практическом занятии (lab) вы научились важным навыкам поиска команд в операционной системе Linux:

  1. Вы начали с основ использования команды which для поиска местоположения исполняемых файлов в вашем PATH.
  2. Вы узнали, как одновременно найти несколько команд с помощью одной команды which.
  3. Вы исследовали, что происходит, когда команды не могут быть найдены, и научились различать исполняемые файлы и встроенные команды оболочки (shell built-ins).
  4. Вы узнали о команде whereis как альтернативе, которая предоставляет более полную информацию о местоположении команд.

Эти навыки являются фундаментальной частью знаний о командной строке Linux и помогут вам:

  • Устранять неполадки, связанные с командами.
  • Понять, как Linux-система организовывает исполняемые файлы.
  • Писать более эффективные скрипты оболочки (shell scripts).
  • Конфидентнее ориентироваться в файловой системе Linux.

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