Между чем различие filename
и ./filename
? При каких обстоятельствах каждый предпочтен другому?
Для файлов данных это не имеет значения - оба оператора сошлются на файл данных в Вашем текущем каталоге. (Например, cat filename
и cat ./filename
семантически идентичны.)
Это - другая история, если рассматриваемое имя файла относится к исполняемому файлу, т.е. является первым (или даже только) вещь, Вы вводите на командной строке. ./filename
будет искать исполняемый файл в Вашем текущем каталоге, и больше нигде. filename
, с другой стороны, оценит переменную среды PATH
, и ищите filename
в каждом каталоге, сохраненном там (который мог бы или не мог бы включать Ваш текущий каталог).
./filename
(или любой другой /path/to/filename
) таким образом предпочтен, когда Вы хотите выполнить определенный исполняемый файл, не первый, найденный в Вашем ПУТИ.
Если Вы запускаете программу, filename
говорит для выполнения первого, найденного в Вашем $PATH
и второй говорит для выполнения того в текущем каталоге.
Если Вы используете то имя файла в качестве аргумента программе как в do_something filename
или do_something ./filename
затем они имеют в виду то же самое.
Вы относитесь для управления выполнением, правильно?
Существует переменная среды 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
Исполняемая безопасность является главной причиной для этого различия.
Вы не хотите. (существующий рабочий каталог или PWD) в Вашем пути, потому что кто-то мог троянский http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 решающий исполняемый файл как PS или ls в Вашем PWD и дурачить Вас путем представления неправильных данных.
Это зависит, какие обстоятельства Вы используете его как.
Как аргумент, например, "имя файла программы", затем это до программы, но обычно они идентичны.
Поскольку название программы, например, "аргументы имени файла", затем "аргументы имени файла" будет путь поиска для нахождения двоичного файла, в то время как "./имя файла аргументов" будут использовать программу в текущем каталоге. Это очевидно полезно если. не находится в ПУТИ, но также полезно использовать этого даже если. находится в пути, возможно, потому что это соответствует более ранней записи.