Яка різниця між назвою файлу та ./name в Linux


Відповіді:


18

Для файлів даних це не має значення - обидва твердження будуть посилатися на файл даних у вашому поточному каталозі. (Наприклад, cat filenameі cat ./filenameсемантично однакові.)

Це вже інша історія, якщо ім'я файлу, про яке йде мова, відноситься до виконуваного файлу , тобто є першою (або навіть єдиною) річчю, яку ви вводите в командному рядку. ./filenameшукатиме виконуваний файл у вашому поточному каталозі та більше ніде. filenameз іншого боку, буде оцінювати змінну середовища PATHта шукати filenameв кожному каталозі, що зберігається в ній (який може містити або не містити поточний каталог).

./filename(або будь-який інший /path/to/filename), таким чином, бажано, коли ви хочете виконати певний виконуваний файл, а не перший, знайдений у вашому PATH.


6

Якщо ви запускаєте програму, filenameговорить запустити перший, знайдений у вашому, $PATHа другий - запустити цей у поточному каталозі.

Якщо ви використовуєте це ім'я файлу як аргумент для програми, як в, do_something filenameабо do_something ./filenameтоді вони означають те саме.


5

Ви маєте на увазі виконання команд, правда?

Існує змінна середовище, PATHяка містить деякі системні каталоги, розділені крапкою з комою. При введенні commandсистема виглядає в цих каталогах у тому порядку, в якому вони вказані, щоб знайти виконуваний файл з ім'ям <command> Якщо він знайде його, він намагається виконати його. Ви можете побачити свій PATH через echo $PATHв bash. Наприклад:

$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / ігри: / 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


3

Виконана безпека є основною причиною цієї різниці.

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


1

Це залежить від того, в яких обставинах ви його використовуєте.

Як аргумент, наприклад, "ім'я файлу програми", це залежить від програми, але вони, як правило, однакові.

Як ім'я програми, наприклад "аргументи назви файлів", тоді "аргументи імені файлу" будуть шукати PATH для пошуку двійкового файлу, а "./файли аргументів" використовуватимуть програму в поточному каталозі. Це, очевидно, корисно, якщо. не в PATH, але також корисно використовувати цей, навіть якщо. стоїть на шляху, можливо тому, що він відповідає попередньому запису.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.