Имея только имя программы, которая будет запущена, как Unix узнает ее абсолютный путь?

Вы можете прочитать пароль из незашифрованного файла.

Например, введите пароль в~/secrets/mail_pass:

the_secret_mail_password

Тогда

chmod 600 ~/secrets/mail_pass

В вашем muttrc:

# Read the password from a file and set it
set smtp_pass=`cat ~/secrets/mail_pass`
0
24.11.2020, 22:17
2 ответа

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

Библиотечные функции в конечном итоге вызывают системный вызов execve, который является рабочей лошадкой, фактически выполняющей программу. Вызов execveпринимает в качестве первого параметра имя файла, которое является именем файла, содержащего программу. Имя обычно представляет собой абсолютный путь к файлу, но также может быть и относительным путем. В этом случае поиск файла выполняется, начиная с текущего каталога процесса. (Обратите внимание, что файл не обязательно находится в текущем каталоге :, имя может быть, например, ../../myprogram. )Системный вызов execveне учитывает переменную окружения PATH.

Так как же ядро ​​узнает абсолютный путь к программе, если в системном вызове execveуказан относительный путь? Ответ заключается в том, что это не так, и это не нужно.

0
18.03.2021, 22:47

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

3.7.2 Поиск и выполнение команд

Bash uses a hash table to remember the full pathnames of executable files to avoid multiple PATH searches (see the description of hash in Bourne Shell Builtins). A full search of the directories in $PATH is performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a defined shell function named command_not_found_handle. If that function exists, it is invoked in a separate execution environment with the original command and the original command’s arguments as its arguments, and the function’s exit status becomes the exit status of that subshell. If that function is not defined, the shell prints an error message and returns an exit status of 127.

2
18.03.2021, 22:47

Теги

Похожие вопросы