Как сказано в заголовке, есть ли разница для файловых систем * 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
поскольку они оба указывают на ваш текущий каталог.
Не все команды принимают пути к файлам в рабочем каталоге, и некоторые ожидают, что вы укажете файлы в каталоге, который они сами предварительно определяют в конфигурации. Среди команд, которые принимают файлы в качестве аргументов, эти команды менее распространены.