5

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

Но чем abc.py отличается от ./abc.py ?

5 ответов5

24

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

abc.py означает «Выполнить любой файл abc.py который вы найдете первым в пути поиска каталога оболочки».

16

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

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

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

5

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

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

0

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

-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .