В чем разница между filename и./ filename в Linux

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

9
задан quack quixote
02.04.2023 8:40 Количество просмотров материала 2965
Распечатать страницу

5 ответов

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

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

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

18
отвечен DevSolar 2023-04-03 16:28

если вы запускаете программу,filename говорит запустить первый найденный в $PATH а второй говорит, чтобы запустить в текущем каталоге.

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

6
отвечен Dennis Williamson 2023-04-03 18:45

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

есть переменная среды 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

5
отвечен Ivan Petrushev 2023-04-03 21:02

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

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

3
отвечен bitbucket 2023-04-03 23:19

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

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

название программы, например "аргументы именем", потом "именем аргументов" будет искать пути, чтобы найти бинарных, пока "./ filename arguments " будет использовать программу в текущем каталоге. Это, очевидно, полезно, если . не в пути, но также полезно использовать этот, даже если . в пути, возможно, потому что он совпадает с более ранней записью.

1
отвечен gorilla 2023-04-04 01:36

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх