Почему мы используем./progname в *, отклоняют системы для выполнения программы?

Я использовал Linux & Mac для когда-то теперь, и я всегда задаюсь вопросом - Почему мы должны выполнить программу как ./progname . Я знаю, что Unix рассматривает каждую вещь как файл, и это хранит имя файла в таблице, которая указывает на inode число файла.

Но как abc.py отличающийся от ./abc.py ?

5
задан 15.04.2011, 15:19

5 ответов

./abc.py означает, "Выполняются abc.py файл, который находится в текущем каталоге."

abc.py означает, "Выполняются что abc.py файл Вы находите сначала в пути поиска каталога оболочки."

24
ответ дан 07.12.2019, 16:45

abc.py должен быть в пути поиска команды (т.е. в одном из каталогов, указанных в PATH переменная среды). ./abc.py точный тракт: это выполняется abc.py из текущего каталога (.).

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

Например, довольно невероятное, но большая часть примера иллюстрирования является этим, где взломщик мог оставить исполняемый файл названным rm в /tmp и ожидайте системного администратора, чтобы попытаться опустеть /tmp каталог.

16
ответ дан 07.12.2019, 16:45

ОС ищет программу для выполнения во всех каталогах, перечисленных в $PATH-variable. Локальный каталог ". /" обычно не находится в ПУТИ. Можно добавить его, но это имеет последствия безопасности.

Если Вы добавляете ". /" к Вашему ПУТИ, кто-то может поместить программу, названную "vi" в каталоге, и ожидать, пока кто-то не пытается отредактировать что-то в этом каталоге с vi - и программа выполнена с полномочиями пользователя, который просто был обманут... В однопользовательской системе это не могло бы быть серьезной проблемой, но это - все еще плохая практика.

5
ответ дан 07.12.2019, 16:45

Необходимо вызвать как./progname, если текущий рабочий каталог (CWD) не находится в $PATH, если бы CWD находится в вызове $PATH формы 'progname', просто хорошо работал бы.

0
ответ дан 07.12.2019, 16:45

Только необходимо сделать./abc.py если. не находится в Вашем $path. $path является переменной среды, которая говорит Вашу оболочку, где искать программы, когда Вы вводите их как команды. Вы могли использовать другую оболочку, которая имеет определенные встроенные местоположения, если Вы хотели.

-1
ответ дан 07.12.2019, 16:45

Теги

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