Назад | Перейти на главную страницу

Есть ли разница между путями «файл» и «./file»?

Как сказано в заголовке, есть ли разница для файловых систем * NIX? например ls file и ls ./file

Я не без ума от объяснения SmallLoanOf1M. Это технически правильно, но ответы не соответствуют примеру использования в вопросе.

Итак, в качестве примера, вот одно важное различие между ними из вопроса: "файл" и "./file"

Что, если файл назван символом, который анализируется оболочкой? Особенно в отношении символов, интерпретируемых запущенной командой.

В частности, символ «тире»: «-». Но другие символы имеют значение для оболочки.

Пример. Мой файл был назван "-dingle"

Попробуйте перечислить файл:

ls -dingle
# ls -dingle
ls: invalid option -- 'e'

Еще хуже, что если бы файл был назван "-rf rmbomb *"? Теперь попробуйте удалить его

rm "-rf rmbomb *"

Я даже не собираюсь запускать этот пример, но, надеюсь, вы уловили идею.

Так как же вывести список файлов с тире? Использовать ./ спереди.

# ls ./-dingle
./-dingle

То же для rm

Да.

Путем выдачи file в командной строке BASH будет искать в переменной среды $ PATH файл с таким именем. Если файл не находится в каталоге в вашей переменной $ PATH, он не будет найден.

. означает текущий каталог. ./ средства в пределах текущий каталог в относительном выражении. Это то же самое, что сказать что-то вроде /home/sheogorath/shivering/isles.img при вызове ./isles.img работая в /home/sheogorath/shivering/ каталог.

Таким образом, он обычно используется для выполнения файлов в вашем рабочем каталоге «на месте».

РЕДАКТИРОВАТЬ: В вашем примере ls вызывается оболочкой и определяется с помощью переменной пути. Его аргумент будет обработан в вашем рабочем каталоге, каким бы он ни был. Поскольку это значение по умолчанию для ls, вы не увидите разницы между указанием file и явно указав ./file поскольку они оба указывают на ваш текущий каталог.

Не все команды принимают пути к файлам в рабочем каталоге, и некоторые ожидают, что вы укажете файлы в каталоге, который они сами предварительно определяют в конфигурации. Среди команд, которые принимают файлы в качестве аргументов, эти команды менее распространены.