Каково различие между именем файла и./имя файла в Linux

Между чем различие filename и ./filename? При каких обстоятельствах каждый предпочтен другому?

10
задан 23.04.2010, 17:06

5 ответов

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

Это - другая история, если рассматриваемое имя файла относится к исполняемому файлу, т.е. является первым (или даже только) вещь, Вы вводите на командной строке. ./filename будет искать исполняемый файл в Вашем текущем каталоге, и больше нигде. filename, с другой стороны, оценит переменную среды PATH, и ищите filename в каждом каталоге, сохраненном там (который мог бы или не мог бы включать Ваш текущий каталог).

./filename (или любой другой /path/to/filename) таким образом предпочтен, когда Вы хотите выполнить определенный исполняемый файл, не первый, найденный в Вашем ПУТИ.

18
ответ дан 07.12.2019, 12:34

Если Вы запускаете программу, filename говорит для выполнения первого, найденного в Вашем $PATH и второй говорит для выполнения того в текущем каталоге.

Если Вы используете то имя файла в качестве аргумента программе как в do_something filename или do_something ./filename затем они имеют в виду то же самое.

6
ответ дан 07.12.2019, 12:34

Вы относитесь для управления выполнением, правильно?

Существует переменная среды PATH это содержит некоторые системные каталоги, разграниченные точкой с запятой. Когда Вы вводите command система смотрит в этих каталогах в порядке, они указаны, чтобы найти, что названный исполняемый файл <управляет>, Находит ли это его, это пытается выполнить его. Вы видите свой ПУТЬ через echo $PATH в ударе. Например:

$ повторяют $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/ivanatora/bin:/usr/local/kde4/bin:/usr/local/kde4/bin

Когда Вы вводите ./filename Вы указываете точный тракт: текущий каталог. Вы видите, что текущий каталог редко находится в Вашем $PATH (из соображений безопасности). Таким образом, если Вы хотите выполнить файл из текущего каталога, Вы используете ./filename.

Для выполнения файла его путем (особенно, если это не находится в $PATH), можно также ввести <path>/file, как:

/sbin/ifconfig

5
ответ дан 07.12.2019, 12:34

Исполняемая безопасность является главной причиной для этого различия.

Вы не хотите. (существующий рабочий каталог или PWD) в Вашем пути, потому что кто-то мог троянский http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 решающий исполняемый файл как PS или ls в Вашем PWD и дурачить Вас путем представления неправильных данных.

3
ответ дан 07.12.2019, 12:34

Это зависит, какие обстоятельства Вы используете его как.

Как аргумент, например, "имя файла программы", затем это до программы, но обычно они идентичны.

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

1
ответ дан 07.12.2019, 12:34

Теги

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