Linux дает вам полный контроль над работой, от настройки до управления системой. Одним из удобных инструментов, который может сделать вашу работу более плавной, является команда which. Она помогает быстро найти точное местоположение исполняемого файла путем поиска по каталогам, перечисленным в переменной $PATH. В этом руководстве мы объясним, как работает команда which, изучим ее синтаксис и опции, а также рассмотрим практические примеры, которые помогут вам эффективно ее использовать.
Понимание синтаксиса и работы команды which
Команда which в Linux помогает найти исполняемый файл для заданной команды. Она просматривает каталоги, перечисленные в переменной окружения PATH. Эта команда показывает, какой файл запускается при выполнении команды. Она возвращает следующий вывод:
0, если все указанные команды найдены и могут быть выполнены.1если одна или несколько команд отсутствуют или не выполняются.2если используется недопустимая опция.
Общий синтаксис для использования команды which в Linux следующий:
which [file1] [file2] ...
Замените [file1] и [file2] на имена исполняемых файлов, которые вы хотите найти.
Почему мы должны использовать эту команду
Есть много причин использовать команду which в Linux. Например, она помогает определить, является ли команда настоящим исполняемым файлом, псевдонимом или символической ссылкой. Более того, она показывает точное местоположение исполняемого файла. Она также позволяет определить отсутствующие или конфликтующие команды в переменной PATH. Кроме того, использование команды which гарантирует запуск правильной версии при наличии нескольких версий.
Как использовать команду Which в Linux
Давайте рассмотрим несколько примеров, чтобы увидеть, как команда which работает в реальных ситуациях:
Пример 1: Нахождение пути к исполняемому файлу
Мы можем использовать команду which, чтобы определить, где хранится исполняемый файл команды:
which grep

Возвращает полный путь, например /usr/bin/grep, указывая точное местоположение исполняемого файла.
Пример 2: Поиск путей нескольких команд
Мы можем указать несколько команд одновременно с помощью команды which, чтобы проверить их соответствующие пути:
which awk sed cat touch
Эта команда извлекает пути команд awk, sed и cat соответственно:

Пример 3: Показать все экземпляры команды
По умолчанию which возвращает только первое совпадение, найденное в PATH. Однако мы можем выполнить команду which с опцией -a, чтобы найти все вхождения команды:
which -a cat
Эта команда выводит список всех мест, где cat встречается в PATH:

Вы можете проверить их данные, выполнив команду ls с параметром -lh. Это покажет, являются ли оба файла настоящими исполняемыми файлами или их дубликатами в разных местах:
ls -lh /usr/bin/cat && ls -lh /bin/cat

На скриншоте выше показаны две одинаковые команды в разных местах, обе размером 35 КБ и исполняемые.
Пример 4: Проверка существования команды
Мы можем использовать команду which для проверки существования определенной команды:
which cats

Если команда не существует, вывода не будет, как показано на скриншоте выше, а статус выхода будет ненулевым.
Пример 5: Идентификация символьных связей
В системе может быть несколько версий одной и той же программы, но некоторые из них могут представлять собой символические ссылки, а не реальные двоичные файлы. Чтобы найти символические ссылки, просто выполните команду which с опцией -a:
which -a crontab

Затем проверьте детали файла с помощью команды ls:
ls -lh /usr/bin/crontab && ls -lh /bin/crontab

Если вывод включает ->, это означает, что файл является символической ссылкой, указывающей на другое место.
Пример 6: Исключение встроенных команд оболочки
Команда which отображает только внешние исполняемые файлы и не показывает встроенные команды оболочки. Это помогает нам определить, где в системе установлена та или иная программа. Например, в следующей команде, которая возвращает путь только для ls, поскольку read – это встроенная команда оболочки:
which ls read

Ограничения команд
У команды which есть несколько ограничений, которые делают ее менее надежной в некоторых ситуациях. Например, она показывает только внешние исполняемые файлы и не обнаруживает встроенные команды, такие как cd или read. Кроме того, она не может различать двоичные и символические ссылки. Команда ищет только каталоги, перечисленные в переменной $PATH, то есть не может найти программы, хранящиеся в других местах. Кроме того, она не предоставляет подробную информацию о типе файла, разрешениях и версии. Кроме того, если команда не существует, она не выводит сообщение об ошибке, а просто ничего не возвращает.
Чтобы преодолеть эти ограничения, вы можете выбрать альтернативную команду, например where, type или ls.
Отличие Where от Which
Команды where и which помогают находить файлы, но служат для разных целей. Команда where используется в основном в Windows и некоторых Unix-подобных системах. Она находит как файлы, так и каталоги и перечисляет все совпадения в системном каталоге PATH.
Команда which характерна для Unix-подобных систем. Она ищет только исполняемые файлы в каталогах, перечисленных в переменной $PATH. По умолчанию она возвращает первое совпадение, но при использовании which -a перечисляются все совпадения.
Например, выполнение команды where node в Windows выводит все места, где был найден node. В Linux команда which gcc возвращает первый путь, где находится компилятор gcc.
Хотя команда which предлагает несколько функций, ей все же не хватает некоторых возможностей. Однако это можно преодолеть, используя альтернативную команду, как обсуждалось ранее. Кроме того, команда which обнаруживает только исполняемые файлы в вашем $PATH. Если ваш скрипт или программа не найдены, возможно, им не хватает прав на выполнение. Поэтому убедитесь, что ваш скрипт находится в каталоге, указанном в $PATH, и имеет права на выполнение.




Комментарии (0)