в чем разница между filename
и ./filename
? При каких обстоятельствах один предпочтительнее другого?
В чем разница между filename и./ filename в Linux
5 ответов
для файлов данных это не имеет значения - оба оператора будут ссылаться на файл данных в текущем каталоге. (Например, cat filename
и cat ./filename
семантически идентичны.)
это другая история, если имя файла в вопросе относится к исполняемый файл, т. е. это первая (или даже единственная) вещь, которую вы вводите в командной строке. ./filename
будет искать исполняемый файл в текущем каталоге, и нигде больше. filename
, С другой стороны, оценит переменная окружения PATH
, и ищите filename
в каждом каталоге, хранящемся в нем (который может включать или не включать ваш текущий каталог).
./filename
(или любой другой /path/to/filename
), таким образом, предпочтительнее, когда вы хотите выполнить specific исполняемый файл, не первый, найденный в вашем пути.
если вы запускаете программу,filename
говорит запустить первый найденный в $PATH
а второй говорит, чтобы запустить в текущем каталоге.
если вы используете имя файла в качестве аргумента программы, а в do_something filename
или do_something ./filename
тогда они означают то же самое.
Вы имеете в виду выполнение команды, верно?
есть переменная среды PATH
Содержит системные каталоги, разделенные точкой с запятой. При вводе command
система ищет в этих каталогах в том порядке, в котором они указаны, чтобы найти исполняемый файл с именем echo $PATH
в bash. Например:
$ echo $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), вы также можете type <path>/file
, например:
/ sbin / ifconfig
безопасность исполняемых файлов является основной причиной этого различия.
вы не хотите . (присутствует рабочий каталог или PWD) на вашем пути, потому что кто-то может троян http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 важный исполняемый файл, как ps или ls, в вашем PWD и обмануть вас, представляя плохие данные.
Это зависит от того, какие обстоятельства вы используете его в качестве.
в качестве аргумента, например "имя файла программы", тогда это зависит от программы, но в целом они идентичны.
название программы, например "аргументы именем", потом "именем аргументов" будет искать пути, чтобы найти бинарных, пока "./ filename arguments " будет использовать программу в текущем каталоге. Это, очевидно, полезно, если . не в пути, но также полезно использовать этот, даже если . в пути, возможно, потому что он совпадает с более ранней записью.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]