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

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

12 голосов | спросил Sergey Alaev 21 +03002016-10-21T22:55:55+03:00312016bEurope/MoscowFri, 21 Oct 2016 22:55:55 +0300 2016, 22:55:55

2 ответа


14

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

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

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

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

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

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

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

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

rm "-rf rmbomb *"

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

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

# ls ./-dingle
./-dingle

Ditto для rm

ответил JDS 21 +03002016-10-21T23:51:38+03:00312016bEurope/MoscowFri, 21 Oct 2016 23:51:38 +0300 2016, 23:51:38
7

Да.

Выдавая ---- +: = 0 =: + ---- в командной строке, BASH будет искать переменную среды $ PATH для файла с таким именем. Если файл не находится в каталоге в переменной $ PATH, он не будет найден.

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

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

EDIT: В вашем примере оболочка получает код /home/sheogorath/shivering/ и найден с помощью переменной пути. Его аргумент будет обрабатываться в вашем рабочем каталоге, что бы это ни было. Поскольку это значение по умолчанию для ls, вы не увидите никакой разницы между указанием ls и явно указывая file, поскольку они оба указывают на ваш текущий каталог.

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

ответил Spooler 21 +03002016-10-21T23:02:21+03:00312016bEurope/MoscowFri, 21 Oct 2016 23:02:21 +0300 2016, 23:02:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132