Когда я набираю имя некоторого исполняемого файла в командной строке, и он запускается, как я могу определить путь, где расположен этот исполняемый файл?
Когда я набираю имя некоторого исполняемого файла в командной строке, и он запускается, как я могу определить путь, где расположен этот исполняемый файл?
Ответы:
Вы можете узнать, какой исполняемый файл будет запущен с помощью команды
which <command>
Если вы хотите определить путь программным путем, вы используете неправильный обмен стека.
-a, отображаются все возможные совпадения. И есть также, whereisкто ищет руководства и источники, тоже.
whichcommandнаходит исполняемый файл данного commandв вашем $PATH. К сожалению, это не будет работать, как ожидалось, во всех случаях.
Когда commandэто псевдоним или функция, вы не получите правильный результат, потому что сам исполняемый исполняемый файл может иметь совершенно другое имя. Например, во многих дистрибутивах Linux llпсевдоним установлен по умолчанию. which llничего не находит. Еще один проблемный случай, когда ваша оболочка ведет себя нестандартным образом и не запускает первый commandнайденный в $PATH.
В Linux, если вы хотите быть полностью уверены в пути к исполняемому файлу запущенного процесса, вы можете получить его из его PID (ID процесса; в приведенном ниже примере вместо числа введите $PID:)
readlink /proc/$PID/exe
Как получить номер? PID последнего запуска процесса в оболочке в фоновом режиме $!. Небольшая демонстрация:
sleep 20 &
readlink /proc/$!/exe
Вы можете получить PID других процессов, например, из списка процессов, используя ps -ef.
Объяснение: /proc/$PID/exeэто символическая ссылка на исполняемый файл запущенного процесса. Команда readlinkпоказывает цель, на которую указывает символическая ссылка.
К сожалению, readlink /proc/$PID/exeметод не работает должным образом с языками сценариев, такими как bash, Perl, Python и т. Д. В таких случаях вы получите путь к интерпретатору сценария (например /bin/bash) вместо пути к сценарию. Чтобы приблизиться к информации, вы можете использовать:
cat /proc/$PID/cmdline # the commandline with the interpreter and script
readlink /proc/$PID/cwd # the current working directory
К сожалению, текущий рабочий каталог может измениться с момента запуска программы. Некоторые интерпретаторы, такие как bash, могут сохранять файл сценария открытым в дескрипторе 255:
readlink /proc/$PID/fd/255
Может вызвать любой процесс, exec()который заменяет его /proc/$PID/exe, /proc/$PID/cmdlineи другую информацию.