Как Unix ищет исполняемые файлы?

Когда файл выполняется, как Unix ищет его? Если в PATH есть несколько исполняемых файлов с тем же именем, какой из них предпочтительнее? Является ли текущий каталог включенным в поиск при выполнении файла?

Предположим, что в текущем каталоге есть файл с именем executable.sh . Будет ли это работать, если он выполняется $ executed и . Не является частью PATH ?

  • Лучшая практика для управления файлами Windows PATH / environment?
  • Почему . Не по умолчанию?
  • Как может `какой cmd`! = Cmd?
  • Добавить папку в папку PATH
  • Восстановление переменной PATH Windows XP
  • PATH установлен до / etc / zshenv
  • Автоматически перезагружать работу Unix, если она опускается?
  • Как доказать, что файл не подделан?
  • Определение размера кэша L2 в Linux
  • Поиск файлов с похожим именем в папку
  • Стандартное значение переменной PATH Windows 10
  • В чем разница между «uname -r» и «uname -v»?
  • 4 Solutions collect form web for “Как Unix ищет исполняемые файлы?”

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

    Для файлов в текущем каталоге вам нужно будет предшествовать им ./ , поэтому команда станет ./executable.sh . Тебе никогда не должно быть . В вашей PATH, поскольку это создает угрозу безопасности, среди других проблем.

    Каталоги, которые сначала попадают в PATH и сначала просматриваются.

    Общий порядок поиска выглядит так, если я правильно помню:

    • псевдонимы

    • Экспортируемые функции

    • Встроенные команды оболочки

    • Скриптов и двоичных файлов в вашем PATH

    Хотя это было хорошо сказано некоторыми другими, я хотел бы добавить некоторые мысли:

    1) PATH обрабатывается только в том случае, если вызываемый исполняемый файл не имеет в нем никаких элементов пути. Somecommand будет искать в $ PATH, ./somecommand или /usr/bin/somecommand или ../../bin/somecommand просто используйте правила каталога, а не PATH

    Если в PATH есть несколько исполняемых файлов с тем же именем, которое предпочтительнее?

    Он останавливается при первом обнаружении, читает $ PATH слева направо.

    Текущая директория включена в поиск при выполнении файла?

    Если текущий каталог находится в PATH, он выполняется поиск. Помните, что пустой каталог в PATH включает текущий каталог. Например, PATH =: / usr / bin (ведущий пустой) PATH = / usr / bin: (trailing empty) и PATH = / usr / bin :: / bin (средний пустой) будут эффективно включать текущий рабочий каталог.

    Предположим, что в текущем каталоге есть файл с именем executable.sh. Будет ли это работать, если он выполняется $ execute и. Не является частью PATH?

    Он никогда не найдет его, выполнив поиск PATH. Если текущий каталог не находится в PATH, он не найдет его с помощью поиска PATH.

    При этом (и жаль добавить путаницу), если был псевдоним или функция, которая выполняла команду, она будет запущена. Или если в вашей оболочке был кеш местоположения, а исполняемый файл был в кеше, он может его найти. Таким образом, он никогда не найдет его в PATH, но он может управляться другими способами.

    Чтобы узнать, что ваш путь в данный момент, просто введите echo $PATH или printenv PATH .

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

    Ex.

    System #>, который grep

    / USR / бен / Grep

    Классный способ найти файлы, которые работают как ваша цель, – использовать apropos:

    По поводу grep

    Bzgrep (1) – поиск возможно bzip2 сжатых файлов для регулярного выражения

    Egrep (1) – печатать строки, соответствующие шаблону

    Fgrep (1) – печатать строки, соответствующие шаблону

    Grep (1) – печатать строки, соответствующие шаблону

    и так далее…

    Давайте будем гением компьютера.